ATSU Tech Blog

Ruby on Rails, Pythonなどの記事を書いています。

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ガードを使って理解を深めていきましょう。


この記事の説明がわかりやすかった!ここ間違ってるよ!次こんな記事を書いて欲しい!などあればコメント、DMよろしくお願いします。LGTMもぜひ。

Ruby on Railsを中心に「なんとなくの理解で使っているもの」を取り上げて解説しています。そのほかの記事もぜひご覧ください。

ほかの記事

  1. Rubyのハッシュとシンボル、キーの関係について、わかりやすく解説する
  2. Rubyにおける「クラス」と「オブジェクト」の関係について分かりやすく解説してみる

  3. git addとcommit、pushの関係をわかりやすく説明する【Gitコマンド解説①】

Twitterもやってますので、フォローしていただけたらうれしいです。 卓球、心理学、哲学、Webサービス、好きな音楽、カメラ、登山、ランニング、読んだ本など何でもつぶやいてます。 https://twitter.com/atsushi101011