rubyの存在チェック
nil?
ruby標準
全てのオブジェクトに定義されてる→NoMethodErrorはない
nilオブジェクト→true
empty?
ruby標準
文字列やコレクションに定義されてる
オブジェクトの状態が空であるか判断
文字列やコレクションが空の値と言えるか?
"" , [] , {},→true
nil.empty?はエラー
1.empty?はエラー
blank?
rails定義
object.nil? || object.empty?
DBから取ってきた値についてnil(NULL) / 空文字列だったりするのをまとめて「空」と判定したい
present?
rails定義
!blank? = !object.nil? && !object.empty?
オブジェクトの状態が何か存在している
unless hoge.blank?(「空」じゃない)って書くくらいならif hoge.present?(値が存在する)って書いた方が可読性が高い
false.present?がfalseになる理由
present?が「ruby的に値が存在している」ことを確認するメソッドだとするとtrueに評価されても良い気がする
実装的理由
present?はblank?の反対実装
blank?は次の値でtrueを返すので、この値がまるまる反対の評価になる
nil , false, "", 空配列, 空ハッシュ
意味的理由
値が「意味のある内容を持っている」ということを評価しているのでfalse.present?はfalseと言える
falseはpresent?において「意味のある内容を持っていない」と言っている