web-dev-qa-db-ja.com

ブール法による肯定と否定のネーミング

ブールメソッドは、否定形でのみ使用される場合でも、常に肯定形を取る必要がありますか?

エンティティを作成する前にエンティティが存在するかどうかを確認したいとします。私の主張は、以下の最初のフォームは2番目のフォームよりも優れているということです。

要約すると、if(!affirmative)よりもif(negative)の方が読みやすいと思います。私は反対する同僚、考えを持っていますか?

最初の形式:

int entity_id = 42;
if(!entity_exists(entity_id)) create_entity(entity_id);

2番目の形式:

int entity_id = 42;
if(entity_not_exist(entity_id)) create_entity(entity_id);
44
lynks

ブールメソッドは、否定形でのみ使用される場合でも、常に肯定形を取る必要がありますか?

そのようなことについてのルールを作成することは少し思えます-コーディング標準ドキュメントにブール値のプロパティに負の名前を使用しないでくださいのガイドラインを見たくありません。しかし、個人的なスタイルの問題として、私は名前をポジティブに保つことを試みることは素晴らしい理想であると思います。ただし、細くて見落としやすい!の必要性を回避することも良いと思います。多くの場合、否定的な名前を肯定的な名前に変える方法を見つけることができます。

  • accountHasCharges
  • accountIsClear!accountHasChargesと同じ)

明快さは最も重要な考慮事項であり、否定的なメソッド名を避けるための良い理由は、それらが二重の否定またはそれより悪い結果につながる可能性があることです。

  • isComplete //大丈夫
  • isNotComplete //!isCompleteは通常より良い
  • isIncomplete //「不完全」がオブジェクトの既知の状態である場合に意味があります
  • !isNotComplete //ひどい
  • !isNotComplete == 0 //永続的な休暇につながる可能性があります
64
Caleb

私は肯定が読みやすいことに同意します。あなたは試すかもしれません

3番目のフォーム

int entity_id = 42;
if (entity_is_missing(entity_id)) create_entity(entity_id);

または

4番目のフォーム

int entity_id = 42;
if (is_entity_missing(entity_id)) create_entity(entity_id);
15
Dan Pichelman

また、メソッドの使用方法にも依存します。肯定的なケースと否定的なケースの両方で使用される場合、たとえば

if (!entity_exists(entity_id)) create_entity(entity_id);

if (entity_exists(entity_id)) publish_entity(entity_id);

次に、メソッド名は上記のように肯定的でなければなりません。それがどのように使用されるのかわからない場合は、上記に固執してください。

ただし、否定的な場合に[〜#〜] only [〜#〜]を使用している場合は、次のようにしてください(多分望ましい)

if (entity_not_exists(entity_id)) create_entity(entity_id);

それともより肯定的になるように言い換えます

if (entity_is_absent(entity_id)) create_entity(entity_id);
2
Zack Xu