safe navigationについて

safe navigationについて

Rubocopに怒られたので、まとめてみます。

Safe navigationとは

safe navigation operatorは「ぼっち演算子」とも呼ばれるようです。

obeject&.bazと記載すると、objectがnilでない時に、bazメソッドを実行してくれます。

objectがnilの場合は、no method errorではなく、nilを返してくれます。

実際にやってみましょう。今回の環境は、sorceryのreset_passwordを使用したパスワードリセット機能を構築したので、そちらを使ってみます。

Safe navigation operatorを使わない場合

def create                                     
  @user = User.find_by(email: params[:email])  
  @user.deliver_reset_password_instructions! if @user
  redirect_to root_path, success: t('.success')
end                                            

後置ifを使った書き方です。@userがnilでない(objectが存在するならば)なら、@user.deliver_reset_password_instructions!を実行するという意味です。

(deliver_reset_password_instructions!はsorceryの機能で、resetパスワードトークン発行、メーラーからメール送信を行ってくれます。)

理解しやすい書き方だと思います。

Safe navigation operatorを使う場合

def create                                     
  @user = User.find_by(email: params[:email])  
  @user&.deliver_reset_password_instructions!  
  redirect_to root_path, success: t('.success')
end                                            

先ほどの書き方よりも、省略されました。

こちらも先ほどと同じ意味で、@userが存在するならば、@user.deliver_reset_password_instructions!を実行します。こちらの方がシンプルで、文の前半から意味を理解できるので、チーム開発はこちらの方が良いかもしれませんね。