it-swarm.com.de

Boolesche Methode, die Affirmative vs Negative benennt

Sollten boolesche Methoden immer die positive Form annehmen, auch wenn sie immer nur in der negativen Form verwendet werden?

Angenommen, ich wollte überprüfen, ob eine Entität vorhanden ist, bevor ich eine erstelle. Mein Argument ist, dass die erste Form unten besser ist als die zweite Form, unabhängig davon, ob die Methode jemals in der positiven Form verwendet wird oder nicht.

Zusammenfassend finde ich if(!affirmative) leichter zu lesen als if(negative). Ich habe einen Kollegen, der anderer Meinung ist, Gedanken?

Erste Form :

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

Zweite Form :

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

Sollten boolesche Methoden immer die positive Form annehmen, auch wenn sie immer nur in der negativen Form verwendet werden?

Regeln über solche Dinge zu erstellen scheint ein wenig viel zu sein - ich möchte keine Richtlinie in einem Dokument mit Codierungsstandards sehen, das besagt du sollst keine negativen Namen für boolesche Eigenschaften verwenden. Aber aus persönlichen Gründen denke ich, dass der Versuch, die Namen positiv zu halten, ein gutes Ideal sein könnte. Ich denke jedoch, dass es auch gut ist, die Notwendigkeit für dieses dünne und leicht zu übersehende !. Man kann oft Wege finden, einen negativen Namen in einen positiven zu verwandeln:

  • accountHasCharges
  • accountIsClear (wie !accountHasCharges)

Klarheit ist die wichtigste Überlegung, und ein guter Grund, negative Methodennamen zu vermeiden, besteht darin, dass sie zu doppelt negativen oder schlimmeren Ergebnissen führen können:

  • isComplete // okay
  • isNotComplete //! isComplete ist normalerweise besser
  • isIncomplete // könnte sinnvoll sein, wenn 'unvollständig' ein bekannter Zustand des Objekts ist
  • !isNotComplete // schrecklich
  • !isNotComplete == 0 // kann zu dauerhaftem Urlaub führen
64
Caleb

Ich stimme zu, dass die Bestätigung leichter zu lesen ist. Sie könnten es versuchen

Dritte Form

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

oder

Vierte Form

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

Dies hängt auch davon ab, wie Ihre Methode angewendet wird. Wenn es sowohl im positiven als auch im negativen Fall verwendet wird, z

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

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

Dann sollte der Methodenname wie oben bejaht werden. Wenn Sie nicht sicher sind, wie es verwendet werden soll, halten Sie sich an die oben genannten Punkte.

Aber wenn es NUR ist, das im negativen Fall verwendet wird, dann ist das Folgende akzeptabel (vielleicht sogar wünschenswert)

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

oder noch besser umformulieren, um positiver zu sein

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