はじめに
この記事は、エンジニア経験1年の大学生が実務で勉強になったこと、詰まったこと、調べたことをまとめています。間違っている箇所などがございましたら、指摘していただけると幸いです。
前提
- Ruby: 2.7.5
- Rails: 5.2.4.6
- rails コンソールで実行
内容
条件分岐などで、blank?
やempty?
、nil?
を使用する時に、どれを使えばいいのか迷ったことはありませんか?実務でよく使われており、その度に調べてました。しかし、頻繁に調べるのはめんどくさいので、まとめることにしました。
真偽判定メソッド
nil?
empty?
blank?
present?
Rubyの標準メソッドとRailsで拡張されたメソッドがある。
nil?(Rubyの標準メソッド)
text = "ABCDE" # => false
text_2 = "" # => false
text_3 = nil # => true
text_4 = true # => false
text_5 = false # => false
test_6 = 12345 # => false
test_7 = " " # => false
test_8 = [] # => false
test_9 = {} # => false
test_10 = 0 # => false
Rubyの標準メソッド。nilの場合のみtrueを返し、それ以外はfalseを返す。
empty?(Rubyの標準メソッド)
text = "ABCDE" # => false
text_2 = "" # => true
text_3 = nil # => NoMethodError
text_4 = true # => NoMethodError
text_5 = false # => NoMethodError
test_6 = 12345 # => NoMethodError
test_7 = " " # => false
test_8 = [] # => true
test_9 = {} # => true
test_10 = 0 # => NoMethodError
Rubyの標準メソッド。空の文字列や空の配列の場合にtrueを返す。nilに対して呼び出すとNoMethodErrorが発生する。" "
半角スペースの場合、falseを返す。
blank?(Railsのメソッド)
text = "ABCDE" # => false
text_2 = "" # => true
text_3 = nil # => true
text_4 = true # => false
text_5 = false # => true
test_6 = 12345 # => false
test_7 = " " # => true
test_8 = [] # => true
test_9 = {} # => true
test_10 = 0 # => false
正確にいうと、Railsに入っているActiveSupportのgemのメソッド。Rails以外でもgemを入れると、blank?メソッドなどの便利なメソッドを使うことが出来る。
nilまたは空のオブジェクトをチェック nil, “”, “ “(半角スペースのみ), 空の配列, 空のハッシュのときにtrueを返す。少しややこしいが、falseの場合は、trueを返す。Rubyのみでは使えない。
present?(Railsのメソッド)
text = "ABCDE" # => true
text_2 = "" # => false
text_3 = nil # => false
text_4 = true # => true
text_5 = false # => false
test_6 = 12345 # => true
test_7 = " " # => false
test_8 = [] # => false
test_9 = {} # => false
test_10 = 0 # => true
正確にいうと、Railsに入っているActiveSupportのgemのメソッド。Rails以外でもgemを入れると、present?メソッドなどの便利なメソッドを使うことが出来る。(実際のメソッドの中身は、!blank?
)となっている。なので、stringや配列、ハッシュなど型の器はあっても中身がない場合はfalseになる。
if 変数.present?とunless 変数.blank?は同じ意味 nil, “”, “ “(半角スペースのみ), 空の配列, 空のハッシュのときにfalseを返す。
まとめ
nil?
empty?
blank?
present?
は実務でもよく出てくるので、今回まとめることで整理することができました。rails
コンソールで簡単に確認できますので、わからなくなった時にでもやってみてください。
参考