Dường như có ác cảm rất lớn với việc tạo một hàm trong JS. Sự ác cảm này khiến mọi người cố gắng khéo léo và sử dụng các thủ thuật lố bịch chỉ để giữ các công cụ trong một dòng giống như một cuộc gọi chức năng sẽ có. Tất nhiên tên hàm trong một cuộc gọi cũng đóng vai trò là tài liệu bổ sung. Chúng tôi không thể đính kèm một nhận xét cho một biểu hiện khó khăn bởi vì sau đó nó sẽ đánh bại quan điểm thực hiện nó vì vậy chúng tôi chỉ gọi nó là "thành ngữ js" và đột nhiên nó có thể hiểu được.
Javascript cực kỳ dễ truy cập, hầu hết mọi người không ăn thông số kỹ thuật cho bữa sáng như chúng tôi. Vì vậy, họ sẽ không bao giờ hiểu những giả định ẩn và trường hợp cạnh của một thành ngữ là gì.
x = x || 'default_value';
Joe trung bình sẽ không hiểu điều này hoặc đã ghi nhớ rằng đó là thành ngữ cho giá trị mặc định. Cả hai đều có hại, trong thực tế sau này thậm chí còn có hại hơn. Anh ta sẽ không hiểu các giả định và trường hợp cạnh ở đây. Anh ta sẽ không quan tâm để đọc các đặc điểm kỹ thuật và hiểu nó bao giờ.
Khi tôi nhìn vào mã mà tôi nhìn thấy "nếu nó null
hay undefined
, sau đó đặt nó vào giá trị mặc định này. Mặc dù nó cũng sẽ mặc nhiên điều trị +0
, -0
, NaN
, false
, và ""
giá trị là không phù hợp. Tôi sẽ phải nhớ rằng 3 tháng kể từ bây giờ khi nhu cầu đó để thay đổi. Tôi có lẽ sẽ quên nó. ".
Giả định ngầm định rất có thể gây ra lỗi trong tương lai và khi cơ sở mã của bạn chứa đầy các mánh khóe như thế này thì không có cơ hội nào bạn giữ tất cả chúng trong đầu mỗi khi bạn nghĩ về việc sửa đổi sẽ ảnh hưởng gì. Và đây là cho "JS pro", kẻ thù trung bình sẽ viết lỗi ngay cả khi các yêu cầu phải chấp nhận giá trị giả để bắt đầu.
Đoạn mã mới của bạn có cú pháp quen thuộc hơn nhưng vẫn có vấn đề ở trên.
Bạn có thể đi với:
function f(x) {
x = valueOrDefault(x, "default_value");
}
Bây giờ bạn có thể có logic rất phức tạp để xử lý các trường hợp cạnh và mã máy khách vẫn trông đẹp và dễ đọc.
Bây giờ, làm thế nào để bạn phân biệt giữa tính năng ngôn ngữ nâng cao như truyền một hàm làm đối số hoặc một mẹo thông minh như thế || "default"
nào?
Các thủ thuật thông minh luôn hoạt động theo một số giả định ẩn có thể bị bỏ qua khi mã được tạo ban đầu. Tôi sẽ không bao giờ phải sửa đổi IIFE thành một thứ khác vì một yêu cầu đã thay đổi, nó sẽ luôn ở đó. Có thể vào năm 2020 khi tôi có thể sử dụng các mô-đun thực tế nhưng vâng.
| 0
hoặc phiên bản sùng bái hàng hóa ~~num
được sử dụng cho sàn giả định giới hạn số nguyên dương và 32 bit có chữ ký.
|| "default"
giả định tất cả các giá trị giả đều giống như không chuyển một đối số nào cả.
Và như vậy.