はじめに
数ある記事の中で本記事まで足を運んでいただきありがとうございます。
この記事では、Rubyにおけるnilとは何か紹介しながらnil判定とnilガードについても触れていきます。
存在の判定で使われる「nil、empty、blank、present」といったメソッドを比較してnilを判定する場合にどういう結果が返ってくるか検証しています。
Rails開発にてTypeError - no implicit conversion of nil into Stringのエラーに直面し、nilについて調べている方は是非ご覧ください!
網羅的な内容ではありませんのでご了承下さい。
nilとは?「何もない」の定義
Rubyにおいて、nilは何もないことを表す特殊な値です。
他のプログラミング言語で言うところのnull
やNone
に相当します。
nilの基本的な特性
nilのクラスを確認
nilはRubyの予約語で、NilClassクラス
の唯一のインスタンスです。
nil.class
# => NilClass
NilClassが継承しているクラス
NilClassはObjectとBasicObjectを継承している。
NilClass.ancestors
# => [NilClass, Object, Kernel, BasicObject]
nil.to_sは空文字列""を返す
nil.to_s
# => ""
nil判定の方法
nilを判定するためによく使われるメソッドはnil?
です。
nil.nil?
# => true
そのオブジェクトがnilである場合にtrueを返します。
判定メソッドの比較
nil、empty、blank、presentのメソッドの戻り値を比較
nil
と""
にRails開発で目にするメソッドを使用してみると。
nil.nil? # => true
nil.empty? # => NoMethodError
nil.blank? # => true
nil.present? # => false
"".nil? # => false
"".empty? # => true
"".blank? # => true
"".present? # => false
名前の通りnil
のみを判定するにはnil?
メソッドを使用するのが良いですね。
nilによるエラーを防ぐコードを書く
nilによるエラー(NoMethodError)を防ぐための方法を紹介します。
デフォルト値を設定したnilガード
値がnilの場合にデフォルト値を返す事ができます。
value = nil
result = value || "デフォルト値"
puts result # => デフォルト値
わかりやすく書くと下記二つは同じ意味になります。
result = value || "デフォルト値"
result = value || (value ="デフォルト値")
場合によっては、判定メソッドを使ったnil判定が不要になりコード量を削減できることもメリットの一つです。
ぼっち演算子
「 &. 」シンプルで使いやすいですね。
safe navigation operatorが正式名称のようです。
nil.upcase
# => NoMethodError (undefined method `upcase' for nil:NilClass)
nil&.upcase
# => nil
最後に
nilはRubyで非常に重要な概念であり、適切に扱うことでエラーを防ぎ、コードの可読性を向上させることができると思います。
本記事でnilに関する知識が少しでも深まり開発に活かしていただけると幸いです。
参考URL