Safe navigation calls a method only when the receiver is not nil.

Safe Navigation

safe_navigation.rb
user_key = 
users = {
  ada: { name: "Ada", email: "ada@example.com" },
  grace: { name: "Grace", email: nil }
}

user = users[user_key]
email = user&.dig(:email) || "no email"
name = user&.dig(:name) || "unknown"

puts "key=#{user_key}"
puts "name=#{name}"
puts "email=#{email}"
user_key = 
users = {
  ada: { name: "Ada", email: "ada@example.com" },
  grace: { name: "Grace", email: nil }
}

user = users[user_key]
email = user&.dig(:email) || "no email"
name = user&.dig(:name) || "unknown"

puts "key=#{user_key}"
puts "name=#{name}"
puts "email=#{email}"
user_key = 
users = {
  ada: { name: "Ada", email: "ada@example.com" },
  grace: { name: "Grace", email: nil }
}

user = users[user_key]
email = user&.dig(:email) || "no email"
name = user&.dig(:name) || "unknown"

puts "key=#{user_key}"
puts "name=#{name}"
puts "email=#{email}"
safe navigation The `&.` operator returns `nil` instead of calling a method on `nil`.