empty?,blank?,present?,nil?メソッドについて
empty?は入れ物が存在するのが前提
okmt-aya-26.hatenablog.com ↑において
def page_title(page_title="") basic_title=アプリ名 page_title.empty? ? basic_title : page_title + basic_title end
の様な判定ロジックを用いたが、このロジックの三項演算子におけるempty?の代わりとして何が使えるのか。
present?やblank?、nil?ではどうなるのか
empty?
String,Array,Hash等に定義されているRubyのメソッド。
empty?メソッドを用いる場合は「入れ物が存在する」ことが前提。渡される値がなかった場合、初期値として設定したpage_title=""
より空の入れ物が代入されるので、容器の中身は空ですか?(empty?)ということになる。
後述するblank?メソッドと違い、nilや真偽値オブジェクトに対して使うとエラーが出力される。 blank?メソッドの下位互換?
nil.empty? false.empty? trure.empty? NoMethodError: undefined method `empty?'
※NilクラスやTrueクラス、Falseクラスはempty?メソッドを持っていないということ。
nil?
上の例ではpage_title=""
という様に空
を代入していた。空の容器
が存在するので何もないことを表すnil?はfalseになる。中身が空とnilは違う。つまり初期値で空を代入している以上nil?を使ったところでfalseしか返ってこない。そもそも値がなかった場合はエラーになってしまうので今回nil?を使うことはできない。
blank?
Rubyのメソッドではなく、Railsに入っているActiveSupportのgemメソッド。レシーバ(メソッドを呼び出したオブジェクト)が空白の場合にtrueを返す。空白でない場合はfalseを返す。
空白とは、nil,false,空文字列,空白文字列,空配列,空ハッシュのこと。
空文字列…''
空白文字列…' '
object = '' # => '' object.blank? # => true
present?
blank?同様にActiveSupportのpresent?メソッド。blank?と反対にレシーバの値が存在すれば存在すればtrueを返し、空白であればfalseを返す。
# ActiveSupport | present?メソッドの定義 def present? !blank? end
そのまんまだった。。
blank?メソッドとempty?メソッドの比較
【Rails】 blank?メソッドの使い方と返り値 | Pikawakaより
レシーバ | blank?[空白?] | empty?[空?] |
---|---|---|
''(空文字列) | true | true |
' '(空白文字列) |
true | false |
[](空配列) |
true | true |
[''] (配列要素がある) |
false | false |
{} (空ハッシュ) |
true | true |
{key: value}(ハッシュ要素あり) | false | NomethodError |
0,0.0,1000 | false | NomethodError |
nil | true | NomethodError |
true | false | NomethodError |
false | false | NomethodError |
参考にしたサイト
2 すべてのオブジェクトで使える拡張機能 | Railsガイド
2.1 black?とpresent? | Railsガイド
nil? empty? blank? present? の使い分け - Qiita