Đặt đối tượng null javascript
Một nhà thông thái đã từng nói rằng bạn không phải là một lập trình viên Java thực sự cho đến khi bạn xử lý xong một ngoại lệ con trỏ null. Đùa sang một bên, tham chiếu null là nguồn gốc của nhiều vấn đề vì nó thường được sử dụng để biểu thị việc không có giá trị. Java SE 8 giới thiệu một lớp mới có tên là 7 có thể giảm bớt một số vấn đề nàyHãy bắt đầu với một ví dụ để thấy sự nguy hiểm của null. Hãy xem xét cấu trúc đối tượng lồng nhau cho một 8, như được minh họa trong Hình 1Hình 1. Một cấu trúc lồng nhau để đại diện cho một 8Điều gì có thể có vấn đề với đoạn mã sau? 0Mã này có vẻ khá hợp lý. Tuy nhiên, nhiều máy tính (ví dụ: Raspberry Pi) không thực sự đi kèm với card âm thanh. Vậy kết quả của 1 là gì?Một thực tế phổ biến (xấu) là trả về tham chiếu null để cho biết không có card âm thanh. Thật không may, điều này có nghĩa là lệnh gọi tới 2 sẽ cố gắng trả lại cổng USB của một tham chiếu null, điều này sẽ dẫn đến một 3 trong thời gian chạy và ngăn chương trình của bạn tiếp tục chạy. Hãy tưởng tượng nếu chương trình của bạn đang chạy trên máy của khách hàng; Để đưa ra một số bối cảnh lịch sử, Tony Hoare—một trong những người khổng lồ của khoa học máy tính—đã viết, "Tôi gọi đó là sai lầm tỷ đô của mình. Đó là phát minh của tài liệu tham khảo null vào năm 1965. Tôi không thể cưỡng lại sự cám dỗ để đưa vào một tài liệu tham khảo null, đơn giản vì nó rất dễ thực hiện. " Bạn có thể làm gì để ngăn chặn các ngoại lệ con trỏ null ngoài ý muốn? Sao chép
Liệt kê 1 Tuy nhiên, bạn có thể thấy rằng mã trong Liệt kê 1 nhanh chóng trở nên rất xấu do các kiểm tra lồng nhau. Thật không may, chúng tôi cần rất nhiều mã soạn sẵn để đảm bảo rằng chúng tôi không nhận được một 3. Ngoài ra, thật khó chịu khi những kiểm tra này cản trở logic kinh doanh. Trên thực tế, chúng đang làm giảm khả năng đọc tổng thể của chương trình của chúng tôiHơn nữa, đây là một quá trình dễ bị lỗi; . Những gì chúng ta cần là một cách tốt hơn để mô hình hóa sự vắng mặt và hiện diện của một giá trị Để đưa ra một số bối cảnh, chúng ta hãy xem xét ngắn gọn những gì các ngôn ngữ lập trình khác cung cấp Có những lựa chọn thay thế nào cho Null?Các ngôn ngữ như Groovy có toán tử điều hướng an toàn được đại diện bởi " 5" để điều hướng an toàn qua các tham chiếu null tiềm ẩn. (Lưu ý rằng nó cũng sẽ sớm được đưa vào C# và nó đã được đề xuất cho Java SE 7 nhưng không được đưa vào bản phát hành đó. ) Nó hoạt động như sau 6Trong trường hợp này, biến 7 sẽ được gán là null nếu 8 là null hoặc 1 trả về null hoặc 2 trả về null. Bạn không cần phải viết các điều kiện lồng nhau phức tạp để kiểm tra nullNgoài ra, Groovy còn bao gồm toán tử Elvis " 51" (nhìn nghiêng sẽ nhận ra mái tóc nổi tiếng của Elvis), có thể sử dụng cho các trường hợp đơn giản khi cần giá trị mặc định. Trong phần sau đây, nếu biểu thức sử dụng toán tử điều hướng an toàn trả về null, thì giá trị mặc định 52 được trả về; Sao chép
Các ngôn ngữ chức năng khác, chẳng hạn như Haskell và Scala, có cách nhìn khác. Haskell bao gồm một loại 53, về cơ bản gói gọn một giá trị tùy chọn. Giá trị của loại 53 có thể chứa giá trị của loại nhất định hoặc không có gì. Không có khái niệm về tham chiếu null. Scala có một cấu trúc tương tự được gọi là 55 để gói gọn sự hiện diện hoặc vắng mặt của một giá trị kiểu 56. Sau đó, bạn phải kiểm tra rõ ràng xem một giá trị có tồn tại hay không bằng cách sử dụng các thao tác có sẵn trên loại 57, thao tác này thực thi ý tưởng "kiểm tra null. " Bạn không còn có thể "quên làm việc đó" vì nó được thực thi bởi hệ thống loạiOK, chúng tôi đã chuyển hướng một chút và tất cả điều này nghe có vẻ khá trừu tượng. Bây giờ bạn có thể tự hỏi, "vậy, còn Java SE 8 thì sao?" Tóm tắt về
String version =
computer?.getSoundcard()?.getUSB()?.getVersion() ?: "UNKNOWN";
|