Nil trong Ruby

Đăng bởi Lưu Đại vào ngày 18-12-2022

Nil là gì?

  1. Nil là một object trong ruby để biểu hiện một giá trị rỗng, hoặc giá trị mặc định (default value). 
  2. Nil là một object. Class của nó là NilClass và chỉ có duy nhất một instance object nil trong toàn hệ thống. obj_id của nil thường là 4 (với ruby 32 bit) hoặc 8 (với ruby 64 bit)
  3. Trong câu điều kiện thì nil nghĩa là false. Tất cả những thứ khác trong ruby đều là true trừ nil, false (chú ý 0 cũng là true)

Xuất hiện khi nào?

Nil xuất hiện tại rất nhiều tình huống
  • Khi duyệt mảng và giá trị index vượt quá độ dài mảng.
  • Khi truy vấn tới một bản ghi không tồn tại trong database
  • Là giá trị trả về của rất nhiều hàm như puts

Cách sử dụng nil trong Ruby

  1. Dùng trong câu điều kiện thường là để check xem object được lấy ra trước đó có tồn tại hay không? 
    VD: p ‘Errors’ if object_a
    Có thể dùng chung với safe navigator(có từ ruby 2.3) &. để check một attribute trong object khi object tồn tại 
    VD: 
    p ‘Have Dinner’ if person&.have_dinner? 
    Câu điều kiện person&.have_dinner? tương đương với person && person.have_dinner? 
  2. Dùng khi muốn ép kiểu nil thành các giá trị như array rỗng số 0 hoặc chuỗi rỗng. 
    VD: nil.to_a # ⇒ []
    nil.to_f # ⇒ 0.0
    nil.to_i # ⇒ 0
    nil.to_h # ⇒ {}
  3. Ngoài cách check trực tiếp object trong câu điều kiện ra thì còn có thể dùng hàm .nil? để kiểm tra xem object có phải là nil không?

Lưu ý khi code

  • Lưu ý khi sử dụng hàm trong vòng lặp sort, map, filter thì xem giá trị trả ra của hàm đấy nếu là nil hoặc có trường hợp trả về nil thì phải chú ý. 
    VD: (1..12).map { |month| puts month } # ⇒ [nil, nil, … , nil]
  • Chú ý các object có attribute/method có thể trả ra nil khi chain nhiều hơn 2 methods 
    VD: obj_a.method_that_return_object.attribute_b sẽ raise exception method not found nếu obj_a.method_that_return_object trả về nil. 
    Trong trường hợp trên có thể sử dụng safe navigator obj_a.method_that_return_object&.attribute_b