Ich weiß, dass die Konvention in Java für boolesche Getter das Präfix "is" enthält.
isEnabled
isStoreOpen
Aber was ist, wenn das Thema Plural ist? Das heißt, was ist, wenn ich nicht wissen möchte, ob ein Geschäft geöffnet ist, sondern wissen möchte, ob alle Geschäfte geöffnet sind?
isStoresOpen()
macht auf Englisch keinen Sinn.
Ich bin versucht, Getter zu schreiben wie:
areStoresOpen
areDogsCute
areCatsFuzzy
Und ich denke , dass Sinn machen würde, aber ich habe von anderen gesagt worden , dass ich es einfach aufzusaugen und verlassen unterliegen Verb Vereinbarung und die Nutzung isStoresOpen
, isDogsCute
, isCatsFuzzy
.
Was soll ich für Boolesche Getter tun, die mit einem Plural-Thema arbeiten?
java
naming-conventions
boolean
Kodai
quelle
quelle
are*()
Getter.are*()
Getter, wenn sie grammatikalisch korrekt sind.is
oderhas
...Antworten:
Ich kann mich nicht erinnern, aus welchem Buch dies stammt, aber das Wesentliche ist, dass Code viel öfter gelesen wird, als er geschrieben wurde. Schreiben Sie zur besseren Lesbarkeit.
quelle
storesAreOpen()
wäre wahrscheinlich die grammatikalischste (wegenif(storesAreOpen())
), aber der boolesche Teil des Namens ist jetzt in der Mitte des Methodennamens versteckt, wodurch Java-Konventionen und lesbarer Code verletzt werden.Wie wäre es mit ausreichend Englisch und Java-Standard:
isEveryStoreOpen()
oderisEachCatCute()
Wenn ich Zweifel am richtigen Wort habe, schlage ich immer gerne den Thesaurus auf.
quelle
boolean
sis
Präfix Konvention. Außerdem bietet es ein paar zusätzliche Informationen, die für nicht-englische Muttersprachler, die zufällig die Codebasis pflegen , sehr nützlich sind.Die Konvention besteht darin, der Getter-Methode "is" voranzustellen, nicht die variale selbst.
z.B
und
Grammatisch mag es keinen Sinn ergeben, aber es folgt der Konvention und sieht lesbar genug aus.
quelle
Die Java Bean-Spezifikation besagt, dass sie
get
für Getter verwendet werden soll, es sei denn, es handelt sich um eineboolean
damalige Verwendungis
.are
ist nicht Standard und wird von nichts erkannt, was eine Standard-Bean-Benennung erwartet.quelle
Viele Tools erwarten
is
oderget
werden es wahrscheinlich nicht erkennenare
.Versuchen Sie, sie wie
getDogsAreFuzzy()
odergetStoresAreOpen()
oder ähnliche Dinge neu zu formulieren , um die Kompatibilität und Konventionen zu verbessern .quelle
-
isEnabled()
kann auch wiegetEnabled()
in geschrieben werdenJava naming conventions
.- Es ist nur eine gute Angewohnheit, die Namenskonventionen zu befolgen und bei der Arbeit zu helfen
Java Beans
.quelle
Im Allgemeinen denke ich, dass Code so leicht wie möglich lesbar sein sollte, damit eine Methode fast als Absatz gelesen werden kann (wie von
Clean Code
). Daher würde ich die Methode so nennen, dass sie so einfach wie möglich klingt / liest und der Grammatikregel von folgtare
. Mit modernen IDEs ist es einfach, Methoden zu finden, ohne speziell nachget
/ zu suchenis
.Kumar macht jedoch einen guten Punkt über Bohnen. Viele Tools suchen nur nach
get
/is
. In diesem Fall könnte ich beide Methoden in Betracht ziehen. Eine zur Erleichterung des Lesens und eine zur Verwendung mit Werkzeugen.quelle
In welcher Sprache schreiben Sie: Englisch oder Java ?
Wenn ich Java-Code lese, erwarte ich, dass die Dinge da sind. Wenn ich nach beiden Gettern mit is- und are- Präfixen suche, ist dies komplizierter als die Suche nach nur einem Präfix.
Wenn ich jedoch morgens Zeitung lese, suche ich nichts, sodass Sie auf traditionellere Weise Englisch schreiben können.
return 0;
quelle
In Ihrer Frage fragen Sie explizit nach Gettern. Ein Getter gibt einige Informationen zu einer Instanz Ihrer Klasse zurück. Zum Beispiel hast du eine Klasse
Store
. Jetzt,isStoreOpen
ist ein perfekter Methodenname für einen Getter.Als Nächstes erwähnen Sie eine Methode, mit der überprüft wird, ob alle Geschäfte geöffnet sind. Diese Methode ist überhaupt kein Getter, da sie keine Informationen über eine Instanz zurückgibt, sondern für alle. Natürlich, es sei denn, es gibt eine Klasse
Stores
. In diesem Fall sollten Sie Ihr Design überdenken, da Java bereits über Möglichkeiten zum Speichern einer Reihe von Instanzen verfügt, z. B. Arrays oder Sammlungen, sodass Sie keine zusätzlichen Klassen schreiben müssen.Wenn dies nicht der Fall ist, ist dieser Methodenname vollkommen in Ordnung. Eine Alternative kann gerecht sein
allStoresOpen
ohne das 'ist' sein.TL; DR: Wenn Sie mit mehreren Instanzen zu tun haben, ist dies kein Getter. Wenn ja, ist Ihr Design schlecht.
quelle
Ganz ehrlich würde ich sagen definitiv vergessen
are*
und dabei bleibenis*
. Stellen Sie sich das"is"
als variable Bedeutung vor und machen Sie wenn möglich einen besseren Namen.Ich würde sagen, isStoresOpen klingt nicht so schlecht, aber Sie können isStoresAreOpen erstellen, wenn das für Sie besser klingt.
Aber meine allgemeine Idee wäre, mich an die Konventionen zu halten. Was "get" für Getter und "is" für boolesche Typen verwendet. Persönlich denke ich, dass die Verwendung von "ist" manchmal schon problematisch ist. Ja - es sieht unter "wenn" -Bedingungen gut aus, aber manchmal schreibe ich beim Codieren einfach "get" und überprüfe die Dropdown-Liste auf meine benötigte Variable und frage mich, was falsch ist und warum ich es nicht finden kann, dann merke ich es beginnt mit "ist" ...
quelle
In der objektorientierten Programmierung sollte dies selten, wenn überhaupt, auftreten, da
Store
oderCat
oder was Sie haben, eine separate Klasse mit einer eigenenisOpen()
oder einer eigenenisFuzzy()
Methode sein sollte. Wenn Sie einen höheren Typ haben, sollten Sie in Betracht ziehen, ihn auf die atomarere Ebene aufzuteilen, die Sie tatsächlich verwenden. Im Allgemeinen sollten Objekte nicht auf der untersten Ebene plural sein.quelle
isStoresOpen () in diesem StoresOpen scheint wie ein Plural,
Wenn Sie die Java-Namenskonvention und die Java-Beans-Standards befolgen, haben sie vordefinierte Präfixe für Boolesche und andere Typen. Daher sollten Sie die Java-Beans-Namenskonvention befolgen.
Kommen wir zu Ihrem Punkt, wenn Sie Geschäfte öffnen wie in einer englischen Perspektive sehen, sieht es ja wie Plural aus. Nehmen Sie noch einmal tiefe Beobachtung in dieses Wort,
Hier
storeOpen ist Plural nach englischer Grammatik,
Das Ergebnis von isStoresOpen ist kein Plural, sondern ein Singular oder man kann sagen, dass es in Bezug auf die Programmierkonvention skalar ist.
Es ist boolesch, nur wahr oder falsch
Nicht wie Ihre englische Pluralaussage wahr oder falsch
Kein Array von wahr oder falsch oder keine Sammlung von wahr oder falsch
Hier können wir also sagen, dass es hier um den Wert geht, der von dieser booleschen Bean-Methode zurückgegeben wird, und nicht um den Namen, der der Eigenschaft der Klasse gegeben wurde, um auf eine reale Entität zu verweisen.
Eine weitere wichtige Sache ist, dass, wenn solche booleschen Eigenschaften in Klassen verwendet werden und diese von vordefinierten Bibliotheken in einem beliebigen Framework verwendet werden, das Framework mit dem Präfix 'verwendet wird. is ' zum Abrufen von booleschen Werten verwendet wird.
Warum bedeutet das, dass es nicht viel schlauer ist als Sie, da Sie die englische Grammatik wie Plural / Singular, Multiplexer usw. kennen?
quelle