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ガードを使って理解を深めていきましょう。
この記事の説明がわかりやすかった!ここ間違ってるよ!次こんな記事を書いて欲しい!などあればコメント、DMよろしくお願いします。LGTMもぜひ。
Ruby on Railsを中心に**「なんとなくの理解で使っているもの」**を取り上げて解説しています。そのほかの記事もぜひご覧ください。
ほかの記事
①Rubyのハッシュとシンボル、キーの関係について、わかりやすく解説する
②Rubyにおける「クラス」と「オブジェクト」の関係について分かりやすく解説してみる
③git addとcommit、pushの関係をわかりやすく説明する【Gitコマンド解説①】
Twitterもやってますので、フォローしていただけたらうれしいです。
卓球、心理学、哲学、Webサービス、好きな音楽、カメラ、登山、ランニング、読んだ本など何でもつぶやいてます。
https://twitter.com/atsushi101011