nilガードについて
nilガードが必要な理由
例えば、以下のように出生年月日から年齢を計算する関数があったとする。
def calculate_age(birthdate)
current_year = Time.now.year
age = current_year - birthdate.year
end
ここでbirthdateがnilであると、nil.yearが呼び出されてNoMethodErrorエラーが発生する。
nilをチェックすることでこのようなエラーを防ぐのがnilガード。
様々なnilガード
if文でnilガードを書くこともできるが、rubyではnilガードする便利なメソッドが提供されている。
'||'演算子
nilかどうかではなく、nilまたは偽と評価される値(falseや0)をガードしたい場合、||演算子を使ってデフォルト値を設定できる。
name = params[:name] || "Guest"
'&.'演算子(通称ぼっち演算子)
&.演算子を使うと、呼び出すオブジェクトがnilの場合にはnilを返す。
age = current_year - birthdate&.year