4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Posted at

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

4
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?