ブールメソッドは、否定形でのみ使用される場合でも、常に肯定形を取る必要がありますか?
エンティティを作成する前にエンティティが存在するかどうかを確認したいとします。私の主張は、以下の最初のフォームは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);
ブールメソッドは、否定形でのみ使用される場合でも、常に肯定形を取る必要がありますか?
そのようなことについてのルールを作成することは少し思えます-コーディング標準ドキュメントにブール値のプロパティに負の名前を使用しないでくださいのガイドラインを見たくありません。しかし、個人的なスタイルの問題として、私は名前をポジティブに保つことを試みることは素晴らしい理想であると思います。ただし、細くて見落としやすい!
の必要性を回避することも良いと思います。多くの場合、否定的な名前を肯定的な名前に変える方法を見つけることができます。
accountHasCharges
accountIsClear
(!accountHasCharges
と同じ)明快さは最も重要な考慮事項であり、否定的なメソッド名を避けるための良い理由は、それらが二重の否定またはそれより悪い結果につながる可能性があることです。
isComplete
//大丈夫isNotComplete
//!isCompleteは通常より良いisIncomplete
//「不完全」がオブジェクトの既知の状態である場合に意味があります!isNotComplete
//ひどい!isNotComplete == 0
//永続的な休暇につながる可能性があります私は肯定が読みやすいことに同意します。あなたは試すかもしれません
int entity_id = 42;
if (entity_is_missing(entity_id)) create_entity(entity_id);
または
int entity_id = 42;
if (is_entity_missing(entity_id)) create_entity(entity_id);
また、メソッドの使用方法にも依存します。肯定的なケースと否定的なケースの両方で使用される場合、たとえば
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);