Viele Namenskonventionen empfehlen, dass Methoden, die einen Booleschen Wert zurückgeben (auch Prädikatmethoden genannt ), nach einer Frage benannt werden . Meine Frage ist: Bedeuten sie nicht wirklich, dass die Methoden nach einer Behauptung benannt werden sollten ?
Der Unterschied mag subtil sein, aber in einigen Fällen erhalten Sie unterschiedliche Namen:
- Frage : is_pixel_transparent (...)
- Behauptung : pixel_is_transparent (...)
Manchmal macht dies keinen Unterschied und die Formulierung ist dieselbe:
- Frage : end_of_file (...)
- Behauptung : end_of_file (...)
Außerdem scheint es die meiste Zeit so zu sein, dass das, was die Leute "Fragen" nennen, tatsächlich Behauptungen sind .
- key_exists (...) -> das ist keine Frage, das ist eine Behauptung.
Anwendungsbeispiel: if (key_exists (...)) ... - array_contains_element (...) -> das ist keine Frage, das ist eine Behauptung.
Anwendungsbeispiel: if (array_contains_element (...)) ...
Bedeutet jeder, um die Frage noch einmal zu wiederholen, Behauptung, wenn er Frage sagt ?
Antworten:
Bei Namenskonventionen geht es nicht darum, Ihren Code wie Englisch zu lesen, sodass Sie möglicherweise etwas zu viel analysieren. In vielen Sprachen ist es üblich, einer Methode oder Funktion ein Präfix voranzustellen, das ein boolesches Ergebnis oder eine boolesche Variable zurückgibt
is
, wenn dies sinnvoll ist. Es gibt andere Traditionen (z. B. Lisp, Ruby), bei denen?
stattdessen ein Suffix verwendet wird. (Eine ältere Lisp-Tradition ist das Suffix-p
für Prädikat ).is_transparent
sollte es sich um eine Methode eines Pixelobjekts handeln. Wenn Sie sich in einer Sprache befinden, die keine Objekte enthält, aber einen OOP-Stil simulieren möchte, lautet der Typ normalerweise das Präfix :Pixel_is_transparent
. Beachten Sie, dass das Präfixis
nur verwendet wird, um die Boolesche Natur dieser Methode hervorzuheben .pixel.transparent
Dies wird bereits durch den Methodenaufruf impliziert ( funktioniert auch, dies kann jedoch bei anderen Eigenschaftsnamen zu mehrdeutig werden).at_eof
. Dies interpretiert das Dateiende als Speicherort im Stream, währendstream.is_eof
dies ebenfalls funktionieren würde: Hier ist der EOF ein bestimmter Status.collection.exists(key)
wäre besser zu testen, ob ein Eintrag vorhanden ist .array_contains_element
ist kein guter Methodenname, da er einen Typ enthält und das Unnötigeelement
. Besser :array.contains(elem)
.Alle Namen, die ich vorschlage, sind Behauptungen oder genauer: Prädikate. Die Verwendung von Fragen macht sprachlich keinen Sinn, wenn diese Prädikate in einem Wenn-Dann-Sonst- Kontext verwendet werden. Das Wort " Behauptung " ist hier wahrscheinlich nicht optimal, da es verwendet wird, um das Testen von Invarianten in vielen Sprachen zu beschreiben. Das Wort „ Prädikat “ wäre besser: eine Aussage, die entweder wahr oder falsch ist. Eine Aussage wird so formuliert, als ob sie wahr wäre, nicht als Frage. Die Aussage
1 ∈ {}
- "1
ist Element der leeren Menge" oder "die leere Menge enthält1
" ist eine falsche Aussage. Die Frage "Enthält die leere Menge die Nummer 1?" kann mit ja oder nein beantwortet werden, aber es ist nicht wahr oder falsch.quelle