Sollten boolesche Methoden immer die positive Form annehmen, auch wenn sie immer nur in der negativen Form verwendet werden?
Angenommen, ich wollte vor dem Erstellen einer Entität überprüfen, ob eine Entität vorhanden ist. Mein Argument ist, dass die erste Form darunter 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);
if (not entity_exists(entity_id))
!
Zeichen so oft verpasst, dass ich den Code falsch verstanden habe, bis ich ihn erneut gelesen habe. Deshalb stimme ich wahrscheinlich eher Ihrem Kollegen zu. Ich mag das Formular, das als wahr bewertet wird, wenn Sie es untersuchen.if (!exists) create()
um zu sagen, dass dies in vielen Sprachen / Frameworks als eine schlechte Praxis angesehen werden kann, da es tendenziell nicht threadsicher ist. Normalerweise besteht der bevorzugte Ansatz darin,create()
bestimmte Ausnahmen oder Rückkehrcodes aufzurufen und zu verarbeiten, die besagen, dass die Entität bereits vorhanden ist. Dies ist natürlich keine Antwort auf die eigentliche Frage (weshalb es sich nur um einen Kommentar handelt).Antworten:
Regeln über solche Dinge zu machen, scheint ein bisschen viel zu sein - ich möchte keine Richtlinie in einem Kodierungsstandarddokument sehen, die besagt, dass Sie keine negativen Namen für boolesche Eigenschaften verwenden sollen . 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 diese dünne und leicht zu übersehende zu vermeiden
!
. 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 Doppelnegativen oder Schlimmerem führen können:
isComplete
// okayisNotComplete
//! isComplete ist normalerweise besserisIncomplete
// könnte Sinn machen, wenn 'unvollständig' ein bekannter Zustand des Objekts ist!isNotComplete
// schrecklich!isNotComplete == 0
// Kann zu einem dauerhaften Urlaub führenquelle
!isNotIncomplete
entity_exists
seinentity_should_be_created
(stattentity_not_exists
)? Oder vielleichtentity_missing
nach Dans Vorschlag?Ich stimme zu, dass die Aussage leichter zu lesen ist. Du könntest es versuchen
Dritte Form
oder
Vierte Form
quelle
Es hängt auch davon ab, wie Ihre Methode angewendet wird. Wenn es sowohl im positiven als auch im negativen Fall verwendet werden soll, z
Dann sollte der Methodenname positiv sein, wie oben. Wenn Sie sich nicht sicher sind, wie es verwendet werden soll, halten Sie sich an die obigen Anweisungen.
Aber wenn es NUR im negativen Fall verwendet wird, ist das Folgende akzeptabel (vielleicht sogar wünschenswert)
oder noch besser umformulieren, um mehr zu bejahen
quelle