はじめに
Rubyにおける述語メソッドについて記していきます。
また、後半に述語メソッドの一部を紹介します。
述語メソッドとは
Ruby用語集 (Ruby 3.2 リファレンスマニュアル)で以下のように説明されています。
述語メソッド predicate method
返り値を真偽値として用いるためのメソッド。メソッド名の末尾に ? を付ける習慣がある。
true/false を返すとは限らず、真である場合に、true 以外のオブジェクトを返すことで、単なる真偽を越えた情報を与えるものもある。
「def xx?」の意味
Rubyで使われる記号の意味(正規表現の複雑な記号は除く) (Ruby 3.2 リファレンスマニュアル)で以下のように説明されています。
def xx?
この場合の「?」はメソッド名の一部分です。慣用的に、真偽値を返すタイプのメソッドを示すために使われます。
※しかし、こちらの記事でも紹介されていたが、xx?メソッドにも関わらず、true・false以外の値を返すメソッドも実在する。
String(文字列)クラス
メソッド名 | 説明 |
---|---|
empty? | 文字列が空 (つまり長さ 0) の時、真を返します。 |
include?(substr) | 文字列中に部分文字列 substr が含まれていれば真を返します。 |
casecmp?(other) | 大文字小文字の違いを無視し文字列を比較します。文字列が一致する場合には true を返し、一致しない場合には false を返します。 nil は文字列のエンコーディングが非互換の時に返されます。 |
start_with?(strs*) | self の冒頭が strs のいずれかであるとき true を返します。 |
end_with?(*strs) | self の末尾が strs のいずれかであるとき true を返します。 |
eql?(other) | 文字列の内容が文字列 other の内容と等しいときに true を返します。等しくなければ false を返します。 ※同一オブジェクトかの判定はObject#equalを使用。 |
Array(配列)クラス
メソッド名 | 説明 |
---|---|
empty? | 自身の要素の数が 0 の時に真を返します。そうでない場合に false を返します。 |
include?(val) | 配列が val と == で等しい要素を持つ時に真を返します。 |
intersect?(other) | other と共通の要素が少なくとも1個あれば true を、なければ false を返します。 |
none? | ブロックを指定しない場合は、 配列のすべての要素が偽であれば真を返します。そうでなければ偽を返します。ブロックを指定した場合は、配列のすべての要素をブロックで評価した結果が、すべて偽であれば真を返します。そうでなければ偽を返します。要素の数が 0 である配列に対しては true を返します。 |
one? | ブロックを指定しない場合は、 配列の要素のうちちょうど一つだけが真であれば、真を返します。そうでなければ偽を返します。ブロックを指定した場合は、配列の要素をブロックで評価した結果、一つの要素だけが真であれば真を返します。そうでなければ偽を返します。 |
Numeric(数値)クラス
メソッド名 | 説明 |
---|---|
eql?(other) | 自身と other のクラスが等しくかつ == メソッドで比較して等しい場合に true を返します。そうでない場合に false を返します。 |
finite? | self の絶対値が有限値の場合に true を、そうでない場合に false を返します。 |
infinite? | 常に nil を返します。自身が Float かComplex、もしくはそのサブクラスのインスタンスの場合は、self の絶対値が負の無限大の場合に-1を、正の無限大の場合に1を、有限値の場合に nil を返します。 |
integer? | 自身が Integer かそのサブクラスのインスタンスの場合にtrue を返します。そうでない場合に false を返します。 |
negative? | self が 0 未満の場合に true を返します。そうでない場合に false を返します。 |
nonzero? | 自身がゼロの時 nil を返し、非ゼロの時 self を返します。 |
positive? | self が 0 より大きい場合に true を返します。そうでない場合に false を返します。 |
zero? | 自身がゼロの時、trueを返します。そうでない場合は false を返します。 |
Object(オブジェクト)クラス
メソッド名 | 説明 |
---|---|
eql?(other) | オブジェクトと other が等しければ真を返します。Hash で二つのキーが等しいかどうかを判定するのに使われます。 |
equal?(other) | other が self 自身の時、真を返します。二つのオブジェクトが同一のものかどうか調べる時に使用します。 |
frozen? | オブジェクトが凍結(内容の変更を禁止)されているときに真を返します。 |
instance_of?(klass) | オブジェクトがクラス klass の直接のインスタンスである時真を返します。 |
instance_variable_defined?(var) | インスタンス変数 var が定義されていたら真を返します。 |
is_a?(mod) kind_of?(mod) |
オブジェクトが指定されたクラス mod かそのサブクラスのインスタンスであるとき真を返します。 |
nil? | レシーバが nil であれば真を返します。 |
respond_to?(name, include_all = false) | オブジェクトがメソッド name を持つとき真を返します |
参考文献
この記事は以下の情報を参考にして執筆しました。