nilガードの書き方と、使用するメリットについて
Rubyでよく出てくるキーワードのひとつ 「nilガード」
Railsチュートリアルでも出てくる概念なので、名前は知っているという方も多いと思います。
今日はnilガードの書き方と、使用するメリットについて記事を書いていきます。
- nilガードを使う意味がわからない
- nilガードを使いたいけど、書き方がわからない
- nilガードの理解をさらに深めたい
上記のような方々にお読みいただけるとうれしいです。
nilガードの説明と書き方
まずnilガードの説明をします。以下のような書き方をします。
number ||= 10 #①
このコードの意味は、**「もしもnumberがあればnumberを返す、nilかfalseであれば10を代入した上でnumberを返す」**という意味になります。
また、①と②は同じ動きをします。
number || (number = 10) #②
「左辺があれば左辺を返し、なければ右辺を返す」のが、nilガードです。
例えばこんな感じです。
> a ||= 10 #aはnilなので、aに10を代入してaを返します
=> 10
> a ||= 20 #a = 10なので、そのまま左辺の10を返します。
=> 10
nilガードの書き方がわかったでしょうか。
次にnilガードを使用するメリットについて書いていきます。
メリット① nilを返したことで発生するエラーを防げる
たとえば、aを戻り値で返すコードがあるとします。
return a
ここでaがnilであると、「戻り値がnilだから返す値がないよ!」というエラーが出ます。ほかにも、nilを返してはいけないところでnilを返す可能性があると、エラーが出てしまいます。
ここでnilガードを使います。
return a ||= []
aがあればaを返し、aがなければ[ ]を返します。
nilガードは名前の通り「nilをガードする」役割なので、**nilを返してはエラーが出てしまう!**というときに役立ちます。
メリット② リファクタリングできる
以下の2つのコードは同じ意味になります。
if a != nil
a = a
else
a = 10
end
a ||= 10
nilなのかどうか?でif文を使ってしまうと、コードが長くなってしまいます。
nilガードを使うことでリファクタリングすることができます。
まとめ
・nilガードの書き方「左辺があれば左辺を返し、なければ右辺を返す」
number ||= 10
nilガードを使うメリットは
- nilを返したことで発生するエラーを防げること
- リファクタリングできること
nilガードの書き方と、使用するメリットについて解説しました。どんどんnilガードを使って理解を深めていきましょう。
Discussion