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


10

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

わずかな違いかもしれませんが、場合によっては別の名前になります。

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

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

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

さらに、ほとんどの場合、人々が「質問」と呼ぶものは実際にはアサーションです。

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

だから、質問を言い換えると、質問をするとき、誰もが主張を意味するのですか?


3
疑問符を追加すると、アサーションと呼ばれるこれらすべてが質問になりますか?Key_Exists?
Pieter B

1
「Jon Skeet is awesome」は主張です。「ジョン・スキートは素晴らしいですか?」質問です。違いを見ます。違いを見ます?
スティーブンA.ロウ

@Pieter、いいえ、適切な英語ではありません。疑問符は文を質問にしますか?
リック

@スティーブン、私の最初の例はあなたのコメントの前半を取り上げ、2番目の例はそれの後半を扱っていると思います。何か不足していますか?
リック

@rick:アサーションはtrueでなければなりません。そうでなければ、プログラムは未定義/エラー状態です。質問は正しい場合とそうでない場合があります。私はそれを制御障害対制御フローと考えています。
スティーブンA.ロウ

回答:


13

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

  • ピクセル透明度の例でis_transparentは、はピクセルオブジェクトのメソッドである必要があります。オブジェクトを持たない言語を使用しているが、OOPスタイルをシミュレートする場合、タイプは通常プレフィックス:になりPixel_is_transparentます。接頭辞isは、このメソッドのブールの性質を強調するためにのみ使用されることに注意してください。これはすでにメソッド呼び出しによって暗示されています(pixel.transparent動作しますが、これは他のプロパティ名とあいまいになる可能性があります)。
  • EOFをテストするには、メソッドにという名前を付けat_eofます。これはファイル終わりをストリーム内の場所として解釈しますが、stream.is_eof同様に機能します。ここでは、EOFは特定の状態です。
  • エントリが存在するかどうかをテストするにcollection.exists(key)は、より良いでしょう。
  • array_contains_elementには型が含まれているため、これは適切なメソッド名ではありませんelement。良い:array.contains(elem)

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


1
+1は、「アサーション」という用語が混乱の可能性があるため、ここで使用するのに適切な用語ではないことに注意してください。
Pieter B
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.