web-dev-qa-db-ja.com

ブール値を返すメソッドは、質問またはアサーションの後に名前を付ける必要がありますか?

多くの命名規則では、ブール値を返すメソッド(述語メソッドとも呼ばれます)にはa questionの後に名前を付けることを推奨しています。私の質問は次のとおりです。それらは、メソッドがアサーションの後に名前が付けられるべきであることを本当に意味しないのですか

違いは微妙かもしれませんが、場合によっては異なる名前になります。

  • question:is_pixel_transparent(...)
  • アサーション:pixel_is_transparent(...)

時々、これは違いがなく、フレージングは​​同じです:

  • question:end_of_file(...)
  • アサーション:end_of_file(...)

さらに、ほとんどの場合、「質問」と呼ばれるものは実際にはassertionsのようです。

  • key_exists(...)->これは問題ではありません。これは主張です。
    使用例:if(key_exists(...))...
  • array_contains_element(...)->これは問題ではありません。これはアサーションです。
    使用例:if(array_contains_element(...))...

ですから、質問を言い換えると、assertionquestion

10
rick

命名規則のポイントは、コードを英語のように読ませることではないため、少し分析しすぎている可能性があります。多くの言語では、論理的な結果またはブール変数を返すメソッドまたは関数の前にisを付けるのが通例です。他の伝統(LISP、Rubyなど)があり、代わりに接尾辞_?_が使用されます。 (古いLISPの伝統は、predicateのサフィックス_-p_です)。

  • ピクセル透明度の例では、_is_transparent_はピクセルオブジェクトのメソッドである必要があります。オブジェクトを持たない言語でOOPスタイルをシミュレートする場合、タイプは通常プレフィックス_Pixel_is_transparent_になります。プレフィックスishighlightこのメソッドのブール型の性質にのみ使用されます;これはメソッド呼び出し(_pixel.transparent_でも同様に機能しますが、これは他のプロパティ名があいまいです)。
  • EOFをテストするには、メソッドに_at_eof_という名前を付けます。これは、ファイルの終わりをストリーム内の場所として解釈しますが、_stream.is_eof_も機能します。ここでは、EOF is特定の状態。
  • エントリが存在するかどうかをテストするには、collection.exists(key)の方が適しています。
  • _array_contains_element_は型と不要なelementを含むため、適切なメソッド名ではありません。より良い:array.contains(elem)

私が提案する名前はすべてアサーション、より正確には述語です。これらの述語がif-then-elseコンテックスで使用されている場合、質問を使用しても言語的に意味がありません。 「assertion」という単語は、多くの言語で不変条件のテストを説明するために使用されるため、おそらくここでは最適ではありません。単語 predicate の方が良いでしょう。trueまたはfalseのステートメントです。ステートメントは、質問ではなく、あたかもそれが真実であるかのように表現されます。ステートメント_1 ∈ {}_ –「_1_は空のセットの要素」または「空のセットに_1_が含まれている」はfalseステートメントです。 「空のセットに数値1が含まれていますか?」という質問yesまたはnoで答えることができますが、trueまたはfalseではありません。

13
amon