RubyとRailsの真偽判定まとめ
RubyとRailsの真偽判定、存在確認に関するまとめ
見つけ次第追加していく予定
【Rails】左辺値が空文字や空配列の場合の短絡評価 - 832.59の派生記事
Rubyの真偽値
偽:false
またはnil
真:false
またはnil
以外
(0
,'false'
,''
も真)
Rubyのメソッド
- nil?:
nil
であればtrueを返す。
nil.nil? #=> true false.nil? #=> false
- empty?:文字列では空、配列・ハッシュは要素がない場合にtrueを返し、それ以外のクラスではNoMethodErrorが返る。
"".empty? #=> true " ".empty? #=> false [].empty? #=> true {}.empty? #=> true nil.empty? #=> NoMethodError false.empty? #=> NoMethodError
- none?:要素全てが偽の場合にtrueを返す。ブロック評価もできる。
[].none? #=> true [false, nil].none? #=> true [false, nil, ''].none? #=> false [false, nil, 0].none? #=> false [1, 3, 5].none? {|n| n.even?} #=> true
- any?:要素の中にひとつでも真があればtrueを返す。こちらもブロック評価可。
[].any? #=> false [false, nil].any? #=> false [false, nil, ''].any? #=> true [1, 3, 5].any? {|n| n.even?} #=> false
- all?:すべての要素が真である場合にtrueを返す。ブロック評価可。
[].all? #=> true ['false', '', 0].all? #=> true [1, 3, 5].all? {|n| n.odd?} #=> true
- one?:要素の中に1つだけ真がある場合にtrueを返す。ブロック評価可能。引数を用意すると
===
で評価してくれる。
[nil, false].one? #=> false [nil, false, ''].one? #=> true [1, 2, 3, 4].one? {|n| n > 3} #=> true [1, 2, 3, 4].one? {|n| n > 2} #=> false [nil, 'hoge', 0].one?(Integer) #=> true
- Array#include?:要素が引数と
==
の場合にtrueを返す。エイリアスにmember?
もあり。 - String#include?:引数で指定した部分文字列が含まれていればtrueを返す
[1, 2, 3, 4].include?(2) #=> true 'garammasala'.include?('masa') #=> true
Railsのメソッド
- blank?:
nil
、false
、上記のempty?
な値に対してtrueを返す。「空白」であるか否か。
''.blank? #=> true ' '.blank? #=> true [].blank? #=> true {}.blank? #=> true nil.blank? #=> true false.blank? #=> true true.blank? #=> false
numbers = [1, 2, 3, 4] 2.in?(numbers) #=> true
- exists?:ActiveRecord用のメソッド、データがあればtrueを返す
# Userモデルにガラムマサラ1人が存在すると仮定 User.exists? #=> true User.exists?(name: 'ガラムマサラ') #=> true User.exists?(2) #=> false
present?
を使うとレコードを全てDBから取得し配列としてから評価。
exists?
ではSQLが exists式を使い、条件に該当するレコードが1件でも存在すればDBがそこで探索を打ち切ってくれるので、ActiveRecordではexists?
を使うのがよさそう
ActiveRecord::Type::Boolean.new.cast()
という形で、引数をtrue
やfalse
にしてくれる。文字列の'false'
などもブール値として処理できる
nil:nil
,''
偽:false
,0
,"0"
,:"0"
,"f"
,:f
,"F"
,:F
,"false"
,:false
,
"FALSE"
,:FALSE
,"off"
,:off
,"OFF"
,:OFF
真:上記以外のもの
ActiveRecord::Type::Boolean.new.cast(nil) #=> nil ActiveRecord::Type::Boolean.new.cast('') #=> nil ActiveRecord::Type::Boolean.new.cast(false) #=> false ActiveRecord::Type::Boolean.new.cast('f') #=> false ActiveRecord::Type::Boolean.new.cast(0) #=> false ActiveRecord::Type::Boolean.new.cast('OFF') #=> false ActiveRecord::Type::Boolean.new.cast('False') #=> true ActiveRecord::Type::Boolean.new.cast('Off') #=> true
参考:ActiveRecord::Type::Boolean#cast の返り値が nil となるケースについて - Qiita
実際のRailsのコードも抽出してくれている
ちなみにJavaScriptのfalsyな値
false
,undefined
,null
,0
,0n
,NaN
,""
JS版もいつかまとめれたら
追加推奨のメソッドあればコメントください。
- 22/11/30 @haruguchiさんに
one
,include?
,in?
を教えていただいたので追加しました