元々PHPをやっていて、Rubyのnilというものが気になったのでメモ
nilとは
Rubyでは「null」ではなく「nil」が利用される
Rubyは全てがオブジェクトなので、nilは、NilClassに属している。
nilはNilClassの中の唯一のインスタンス。
nil判定を行う際は、NilClassの中の定義されたメソッドを使用する必要がある。
→ こちらの件についての追記
nil? メソッドは確かに NilClassクラスに定義されていますが,Objectクラスにも定義されていて,どんなオブジェクトに対しても使えます。
でないと nil 以外のオブジェクトに対して NoMethodError が出て nil 判定できませんからね。
Object クラスの nil? メソッドは常に false を返しますが,NilClass クラスの nil? メソッドはそれを「常に true を返す」メソッドとして上書きしています。
@scivolaさん、ご指摘ありがとうございました!
nilの判定
nil?
nil?では、対象オブジェクトがnilかどうかを確認する。nilの場合true、そうでない場合はfalseが返ってくる。
blank?
blank?はnilに加えて、空白文字列、空の文字列などもtrue、そうでない場合はfalseが返ってくる。Railsのメソッドのため、「require 'active_support'」が必要
present?
present?はblank?の逆で、nil、空白文字列、空の文字列などの場合はfalse、そうでない場合はtrueが返る。
empty?
nil判定には使えないメソッド。
empty?では空白値を調べることは可能ですが、nilは判定できない
nilガードを使おう!
nilガード、個人的にはPHPなどのnullセーフ同じようなものかなと勝手に考察しましたが、少し勝手が違うみたいですね。(PHPだとnullに対してメソッド呼び出しを行わないようにするための物だったので)
変数 ||= 指定値
||= と記載することで、変数が「nil」の時に指定値を代入することが可能です。