読者です 読者をやめる 読者になる 読者になる

かけちゃんねる2

エモいことを書く

真偽判定をするときは「blank?」や「present?」を使うと便利!【Rails】

Rails

真偽判定とは

真偽判定とは、条件式を評価して真(true)なのか、あるいはnilや偽(false)なのかを判定するものです。
Ruby on Railsにおいて真偽判定をするためのメソッドにはいくつか種類があって、「nil?」や「empty?」、「blank?」、「present?」などがあります。
それぞれの違いを見ていきたいと思います。

存在を判定するnil?メソッド

nil?は「何も存在していない」状態のときにtrueを返します。 逆を言えば、容れ物が存在していている時点でfalse判定されます。

@item.nil?

このとき、@itemそのものが存在していなければtrueを返します。

容れ物の中身が空か判定するempty?メソッド

一方、empty?では容れ物の中身が空のときにtrueを返します。
注意すべき点は、容れ物自体は存在していることが前提にあるということです。
したがって、nilに対して呼び出すとNoMethodErrorが発生します。

Item.prices.first.price.empty?

配列や文字列の中身が空("")のときにtrueを返します。

nilまたは空のオブジェクトを判定するblank?メソッド

nil?とempty?を足したようなメソッドです。
nil, "", " "(半角スペースのみ), , {}(空のハッシュ) のときにtrueを返します。
「配列そのものがきちんと定義できているのかな?」「配列の定義はできていても中身は空だしな」というときに、blank?メソッドを使うとだいたい通ります。(本当はそこを明確に把握して進めるべきですが)
便利なのでついつい多様してしまいがちです……
注意すべき点はblank?はRailsで拡張されたメソッドであり、Rubyのみの環境では使えないということです。

blank?の否定と同じ意味のpresent?メソッド

present?は、「!blank?」を実行するメソッドです。
つまり、if 変数.present?とunless 変数.blank?は同じ意味となります。
blank?と逆なので、nil, "", " "(半角スペースのみ), , {}(空のハッシュ) のときにfalseを返します。
これも便利なメソッドですが、blank?と同様にRailsで拡張されたメソッドでありRuby単体では用いることができないのでご注意ください。

参考

Ruby on Rails 4 アプリケーションプログラミング

Ruby on Rails 4 アプリケーションプログラミング

Railsを勉強するのにオススメの本です!