見出し画像

[Ruby] nilガードの使い方

nilガードがリファクタリングに使えそうなので調べてみました。

nilガードとは?

nilガードは左辺がnilもしくはfalseの場合に代入を行い、左辺にそれ以外の値が入っているときは特に代入を行わない文法となります。

age ||= 12

のような書き方をします。
ageがnilなら12を代入し、すでに何かしらの値が入っている場合は代入を行いません。

ここで気をつけるべきはnilかfalseでないと代入が行われないということです。

""や{}などがすでに入っている場合は代入が行われません。

使用例

例えば

def my_wear
  @my_wear = Wear.new if @wear.nil?
  @my_wear
end

のようなゲッターというか初期化処理があったとすると

def my_wear
  @my_wear ||= Wear.new
end

上の二つの記述は同じになります。

処理が複数ある場合

処理が複数ある場合は以下のように記述可能です。

def my_wear
  @my_wear ||= begin
    wear = Wear.new
        ・
      何かしらの処理
        ・
    wear
  end
end

のように記述することで、nilの場合にbegin~end内の処理の実行結果を代入してくれます。

まとめ

リファクタリングに使えそうなので、積極的に使っていきましょう。


この記事が気に入ったらサポートをしてみませんか?