Rubyのメソッド名につく?(クエスチョンマーク)について
はじめに
末尾に ?
がついているメソッドをよく見かけるけど、どういう役割なんだろう?と気になった
そもそも ?
はどこで使われるているの?
def xx?
この場合の「?」はメソッド名の一部分です。慣用的に、真偽値を返すタイプのメソッドを示すために使われます。
def xx?
この場合の「?」はメソッド名の一部分です。慣用的に、真偽値を返すタイプのメソッドを示すために使われます。
(引用: Rubyリファレンス)
つまり ?
まで含んだものがメソッド名になるということ
def test?
true
end
[1] pry(main)> test1?
=> true
例えばArrayクラスだと
include?
や empty?
などのインスタンスメソッドがこれに相当する
末尾以外でも使える?
識別子というわけではないみたいから、句中には入れられない
[1] pry(main)> def test?1
SyntaxError: unexpected tINTEGER, expecting ';' or '\n'
def test?1
じゃあ ?
をつけたら真偽値を返すようになるのか?
def test2?
p "test2"
end
[1] pry(main)> test2?
"test2"
=> "test2"
def test2?
p "test2"
end
[1] pry(main)> test2?
"test2"
=> "test2"
否、 ?
をつけたメソッドでも自動的に真偽値が返るわけではないみたい
スタイルガイドでは
The names of predicate methods (methods that return a boolean value) should end in a question mark (i.e. Array#empty?). Methods that don’t return a boolean, shouldn’t end in a question mark.
# bad
def even(value)
end
# good
def even?(value)
end
(日本語訳)述語メソッド(ブーリアン値を返すメソッド)の名前は、クエスチョンマークで終わるべきです(例:Array#empty? 真偽値を返さないメソッドは、クエスチョンマークで終わるべきではありません。
The names of predicate methods (methods that return a boolean value) should end in a question mark (i.e. Array#empty?). Methods that don’t return a boolean, shouldn’t end in a question mark.
# bad
def even(value)
end
# good
def even?(value)
end
(日本語訳)述語メソッド(ブーリアン値を返すメソッド)の名前は、クエスチョンマークで終わるべきです(例:Array#empty? 真偽値を返さないメソッドは、クエスチョンマークで終わるべきではありません。
真偽値を返すメソッドを自作するときは、末尾に ?
をつけるようにしようぜ!ということみたい
つまり
- 真偽値を返すメソッドは 末尾に
?
をつけるべし
-
?
をつけたところで、返り値が変わるわけではない
追記
?
をつけるべし?
をつけたところで、返り値が変わるわけではないコメントいただいた内容が勉強になったので追記します
Rubyでの「真偽値」は単にtrue/falseを表すものではなく、
真偽性を利用するための値として扱われるため、?のつくメソッドの返り値はtrue/falseには限られないようです。
また?のつくメソッドを述語メソッドと呼ぶようです
述語メソッド
predicate method
返り値を真偽値として用いるためのメソッド。メソッド名の末尾に ? を付ける習慣がある。
参考記事URL
Author And Source
この問題について(Rubyのメソッド名につく?(クエスチョンマーク)について), 我々は、より多くの情報をここで見つけました https://qiita.com/ym_mm/items/739d8eedbb5f24b1c29e著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .