web-dev-qa-db-ja.com

変数の最初の単語として「is」が使用されているブール式の命名規則(IsUserAdminとUserIsAdminなど)が表示されるのはなぜですか?

次のブール変数/プロパティ名が標準であることに誰もが同意するでしょう。

  • UserIsAdmin
  • OrdersAreClosed

ブール式について注意すべき重要な点は、ブール式が記述され、trueまたはfalseとして評価されることです。ユーザーは管理者です。いいえ。あなたはポイントを取得します。

しかし、最近、この方法でブール値が増加するのを見てきました。

  • IsUserAdmin
  • AreOrdersClosed

これがまったくばかげているように思えないのは私だけですか? 「ユーザーは管理者ですか?」そして、はいまたはいいえを待っています。 「ユーザーは管理者です」と発声し、真または偽の評価を待っています。

Microsoftは最近、これに加えて、Telerik Webコントロールの背後にあるプログラミングも頻繁に行っています。問題は、これがどこから来ているのかわからないことです。以前は人気がなかったため、これに気づいているのは私だけなのか、これが実際に増加傾向にあるのか、そうであれば、ポイントは何ですか?

4

@Joeがコメントで述べたように、オブジェクトの名前をメソッド名に含めるのは冗長です。あなたが電話するとします:

if (user.isUserAdmin()) {

メソッド名がクラス名(おそらくUserのようなもの、またはAdminと呼ばれるサブクラス)を繰り返すため、これはかなりばかげています。 isまたはareまたはcanで始まることは、呼び出し先のオブジェクトの直接のコンテキストで意味があります。

ただし、オブジェクトから、そのオブジェクトが担当する別のオブジェクトに関する情報を取得する場合は、あまり意味がありません。例えば:

if (user.ordersAreValid()) {

その後、少しぼやけます。 areOrdersValidは質問の形式であるため、理にかなっています。しかし、その一方で、ordersAreValidは、ifwhileなどの制御構造と組み合わせると文になります(たとえば、「注文が有効な場合」)。私は後者に傾いていますが、それは好みの問題かもしれません。

7
Jonah

これを行う理由の1つは、オートコンプリートを支援することです。たとえば、Windowsフォームアプリは、一貫性のない.NET Framework APIに悩まされており、「is」を含める必要があるかどうかわからない場合があります。たとえば、チェックボックスがオンになっているかどうかを確認するには、this.checkbox.Checkedと記述する必要があります。 WPFではこれが変更され、覚えやすいthis.checkbox.IsCheckedを使用する必要があります。

そうは言っても、AreOrdersClosedOrdersAreClosedより優れているとは思いません。考えられる説明は同じオートコンプリートです。ブール値のプロパティとフィールドを見つけやすくなります。

しかし、これは批判される可能性があります:

  • それを始めたら、ハンガリー語の表記も使ってみませんか?現在使用されているほとんどの言語ではハンガリー語表記を使用してはならないため、ブール値だけに使用する理由はありません。
  • ブール変数は、isare、またはcanで始めることができます。オートコンプリートの改善が唯一の理由である場合、同じタイプの3つのプレフィックスは多すぎます。一貫性を保つには、AreOrdersClosedIsOrdersClosedにする必要があり、CanResumeDownloadsIsResumeDownloadsPossibleにする必要があります。

おそらく人々は、Is + <Adjective>として文法的に形成されたプロパティで開始し、<Noun> + Is + <Adjective>のまれなケースになると、Is + <Noun> + <Adjective>を使用すると、APIがより統一されます。

現在、変数の名前の2つの単語の間に「is」が見つかる場合がいくつかあり、.NET Frameworkの有効な大文字小文字を思い出せません。実際、あなたの例を見ると、やるべきリファクタリングがあるように感じます:

  • コメントで示唆されているように、IsUserAdminIsAdminにすることができます。
  • AreOrdersClosedは、コンテキストに応じて、AreClosedまたはその他の名前に変更することもできます。たとえば、これがカートに新しい商品を追加できないかどうかを示す値である場合、IsClosedまたはIsFinishedCartまたはOrderプロパティを作成します。
2

これは、オートコンプリート/インテリセンスで検索を絞り込むための方法にすぎません。条件を記述し始めるときに、「Is」と入力すると、探しているメンバーの名前がわからないときに、すべてをスクロールしなくても、探しているものを見つけることができます。

これを「Is」のために行う唯一の理由は、ブールメンバーがブランチまたはループのコンテキストで使用されることがよくあるからです。ブール値がほとんどの言語で認識される特別なキーワードや構造が非常に多い数少ないタイプの中にあるのは偶然ではありません。

適切なコンテキストが何であるかを理解できれば、同様の接頭辞を使ってさらに多くのことを記すことができると私は確信しています。

1
Rei Miyasaka