&. (lonely operator / safe navigation, Ruby 2.3+) gọi method chỉ khi receiver không phải nil — nếu nil thì trả về nil thay vì raise NoMethodError.
ruby
user = nil
user.name # => NoMethodError!
user&.name # => nil
user&.name&.upcase # => nil — chain dừng ngay khi gặp nil
user = User.new(name: "Alice")
user&.name # => "Alice"Khác .try (Rails):
- &. là Ruby core — bảo toàn NoMethodError nếu method không tồn tại trên object thật.
- .try nuốt cả lỗi khi method không tồn tại — có thể che giấu bug.
ruby
42.try(:nonexistent) # => nil (nuốt lỗi)
42&.nonexistent # => NoMethodError (đúng hành vi)Dùng &. trong production Ruby; dùng .try khi thực sự muốn fallback im lặng.