😎

nilガードの書き方と、使用するメリットについて

2022/02/10に公開

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