ume

Ruby safe navigation operator(ぼっち演算子)

ぼっち演算子とは?

⇨レシーバーがnilだった場合でもメソッドをエラーにさせない仕組み

class User 

  def name 
    puts "まさです"
  end

  

end

user = User.new 
user.name

object = nil
 object.name
出力結果
a.rb:15:in `<main>': undefined method `name' for nil:NilClass (NoMethodError)

 object&.name
上記の出力結果エラーにならずnilを戻り値として返す。

どういう用途で使う?

⇨ログインしているユーザーとログインしていないユーザーでページを出し分ける際

@nickname = current_user.nickname

このような時です。このcurrent_userはログインしていない時はnilになってしまうのでログインしていないときにこのメソッドが実行されてしまうとエラーになってしまうのですがここでボッチ演算子を使うことでこのnilのcurrent_userをnilという表記で出力することができます。nilで返すことでエラーが消え、current_userに何も入っていない時でもページを表示することができます。

@nickname = current_user&.nickname

書き方はこの通りです。メソッドの前に&をつけるだけです。こうすることでcurrent_userはnilを返すことができるようになります。

少しわかりづらいかもしれないですが、オブジェクトがnilだった場合にnilに対応していないメソッド(NilClassに定義されていないメソッド)を呼び出すので、エラーが出る状況だったのを、オブジェクトがnilだった場合に戻り値にnilを返すメソッドに一時的に変えてしまうことでエラーを回避するという感じですかね。(実際の仕組みは分からない)