present?について
present?は真偽値を返すRailsのメソッドです。
nil
, false
, ""
(空文字), " "
(空白), []
(空配列), {}
(空ハッシュ)の場合にfalse
、それ以外の場合にtrue
を返します。
真偽値の判定結果は!blank?
と等価です。
> nil.present?
=> false
> false.present?
=> false
> "".present?
=> false
> "".present?
=> false
> " ".present?
=> false
> [].present?
=> false
> {}.present?
=> false
presenceについて
presenceはRailsのメソッドです。
オブジェクトが存在する場合はオブジェクト自身、存在しない場合はnil
を返します。
object.presence
はobject.present? ? object : nil
と、email.presence || 'test@example.com'
はemail.present? ? email : 'test@example.com'
と等価です。
present?とpresenceの違いについて
表にまとめると以下のようになります。
メソッド | オブジェクトが存在する場合 | オブジェクトが存在しない場合 |
---|---|---|
present? | true | false |
presence | self | nil |
present?の使いどころ
present?
は真偽値を返すメソッドなのでif文の条件式などで利用します。
def message(name)
if name.present?
"こんにちは#{name}さん"
else
"はじめまして名無しさん"
end
end
presenceの使いどころ
presence
は『オブジェクトが存在していればオブジェクト自身、存在していなければnilもしくはデフォルト値を返す』といった場合で利用します。
以下の2つのコードの出力結果は同じですが、present?
の代わりにpresence
を利用したほうがシンプルにかけます。
present?を使った場合
class User < ApplicationRecord
def account_name
if nickname.present?
nickname
elsif name.present?
name
else
id
end
end
end
presenceを使った場合
class User < ApplicationRecord
def account_name
nickname.presence || name.presence || id
end
end
さいごに
Twitter(@nishina555)やってます。フォローしてもらえるとうれしいです!