Null Exception – Lỗi tỉ đô của mọi hệ thống
May 21, 2022Có thể ở đâu đó bạn đã từng nghe đến biến, kiểu dữ liệu tham chiếu, hay đối tượng trong lập trình. Nhưng bạn có biết có những lỗi xảy ra trong mọi hệ thống mà được mệnh danh là “Lỗi tỉ đô” chưa.
Cùng mình thử khám phá tại sao lỗi này được gọi là như vậy nhé!
Hãy cùng mình tưởng tượng, dữ liệu hay một giá trị cụ thể nào đó như nước vậy. Để có thể sử dụng nó thì bạn cần thứ để chứa nó, lúc này biến được coi là một cái ly nước. Bạn có thể chứa nước vào một cái ly, và sau đó bạn có thể sử dụng được rồi.
Tuy nhiên, nếu bạn không có ly thì sao, nó được xem như biến đó chưa từng khỏi tạo, và dĩ nhiên bạn không thể dử dụng nó.
Còn một trường hợp khác, bạn chuẩn bị sẵn một cái ly, nhưng cái ly lại rỗng, chẳng có nước bên trong. Khi này bạn vẫn có thể sử dụng cái ly nhưng mà có thể sẽ xảy ra lỗi vì mục đích sử dụng của bạn là nước bên trong ly chứ không phải cái ly rỗng.
Đối với ngôn ngữ lập trình thì thường xuất hiện từ khóa null một giá trị nào đó không tồn tại. Định nghĩa chính xác của nó sẽ là “null value đại diện cho reference dẫn đến môt object hoặc address không tồn tại hoặc không có giá trị (Theo MDN)”. Tuy nhiên trong một số ngôn ngữ khác như javascript thì lại xuất hiện thêm từ khóa Undefined hay NaN cũng chỉ một thứ gì đó mang tên “không là gì cả”. Tất nhiên 3 từ khóa này khác nhau và xảy ra trong các trường hợp khác nhau (nó cũng là lý do mình không hề thích ngôn ngữ này).
Qua trở lại bài viết thì mình đề cập đến thứ “không là gì cả” kia gây lỗi cho hầu như các hệ thống phần mềm hay website.
Vì sao lại phát sinh lỗi vậy.
Đơn giản thôi một dữ liệu không tồn tại khi bạn sử dụng thì đương nhiên sẽ lỗi. Và có một số trường hợp xảy ra phổ biến như:
– Ràng buộc dữ liệu:
Chẳng hạn như thằng A phụ thuộc vào dữ liệu của thằng B, dữ liệu thằng B null và vẫn gọi tới thằng A thì thằng A sẽ lăn ra chết. Ví dụ thực tế sẽ là tôi đi vay tiền thế chấp để đưa bạn, nhưng do qua tin tưởng bạn tôi không kiểm tra và có giấy tờ đàng hoàng. Khi bạn không có tiền trả nên tôi bị người ta siết nợ hết tài sản. Vậy là lỗi ở bạn nhưng tôi lại phải chịu.
– Kiểm tra đầu vào dữ liệu:
Khi sử dụng bất kỳ một dữ liệu đầu vào nào, hãy cố gắng kiểm tra nó trước khi sử dụng, tránh như ví dụ bên trên. Validate null thường rất chủ quan trong các hàm được tạo ra, điều này dẫn tới không ít các hệ lụy phía sau khi sử dụng.
– Phép toán không xác định:
Ai cũng từng được học toán rằng một số bất kỳ chia cho 0 sẽ không thể chia được, hay căn bậc hai của một số âm thì là điều không thể. Khi này máy tính sẽ cho nó là những phép toán không xác định. Một số ngôn ngữ thì văng ra lỗi này, còn một số ngôn ngữ thì lại không và cứ âm thầm tính toán sai. Đấy nó lại làm bạn trả giá rất nhiều tiền nếu như trường hợp này là những con số tính toán trong giao dịch ngân hàng và bạn để lủng khâu kiểm tra đó.
– Không bắt buộc (optional):
Có cũng được, không có cũng được. Người ba phải sống rất lâu nhưng nhiều khi lại hại người khác vì câu của miệng “sao cũng được”. Khi một dữ liệu đầu vào được gắn mác optional thì hãy cẩn thận khi sử dụng nó, vì nó có thể không là gì cả bất cứ lúc nào và vô tình bạn ăn gạch vào một ngày đẹp trời vào những trường hợp ngoại lệ rất ít khi sử dụng mà rất khó để tìm ra nguyên nhân nhé.
– …
Còn khá là nhiều trường hợp xảy ra lỗi này nhưng trên đây có thể là những trường hợp phổ biến nhất mà mình gặp phải. Lỗi này xảy ra bất kể ngôn ngữ bất kể đặc thù nghiệp vụ nào. Mà nếu nó văng lỗi thông báo cho người dùng thì còn đỡ, chứ nó cứ im im thực hiện luồng tính toán khác với dữ liệu sai thì phải gọi là ối dồi ôi.
Không hổ danh là Lỗi tỉ đô đâu nhé!