Ist es am besten, "get" als Präfix für Getter zu verwenden?


8

Wenn ich einen Booleschen Wert (Eigenschaft) hätte, shouldAutoLoginist es besser, den Getter zu benennen getShouldAutoLoginoder nur shouldAutoLoginso, dass er eher wie Englisch liest?

Ex :

if(shouldAutoLogin){
    ...
}

oder

if(getShouldAutoLogin){
    ...
}

Ist die eine Eigenschaft mit dem Namen 'shouldAutoLogin'? Reflexionen in einigen Sprachen (z. B. JSP-Frameworks) erwarten, dass ${foo.something}sie foo.getSomething()hinter die Kulissen übersetzt werden.

Das scheint die Norm zu sein. Für boolesche Werte ist es jedoch auch üblich, isFoo()anstelle von zu verwenden getFoo(). In Ihrem Beispiel , das wäreisAutoLogin()
rath

Wenn Sie über einen JSP auf eine dieser Klassen zugreifen möchten, müssen Sie dies ziemlich genau tun.
Jaydee

@jmoreno Während ich (und andere) Java erwähnt haben, ist es nicht klar, dass das OP darüber spricht (wenn überhaupt, ist es angesichts der Auswahl der darin enthaltenen Ausdrücke if()unwahrscheinlich, dass es Java ist.

7
@ MikeBryant Namenskonventionen sind sprachspezifisch.
CodesInChaos

Antworten:


9

Die Namenskonvention für Getter lautet normalerweise:

getAutoLogin() wenn Sie eine Zeichenfolge oder ein Objekt erhalten.

isAutoLogin() für boolean.


11
Dies ist eine Namenskonvention für Java, die Teil von JavaBeans ist . Für c # deklarieren Sie die Eigenschaftsnamen ohne Präfix wie get / set / is.
k3b

@ k3b Danke für die Info. Ich bin ein Java-Entwickler. :) Aber es ist auch gut, etwas über die C # -Konvention zu wissen. Danke
JNL

2
Diese Frage bezieht sich auf Getter / Setter, nicht auf Eigenschaften. Ich dachte, Getter und Setter in C # beginnen normalerweise mit get * oder set * (siehe zum Beispiel stackoverflow.com/questions/16718772/… ).
Sergut

1
@sergut: Stimmt, aber wenn die Getter / Setter-Methoden schnell und idempotent sind, würde man normalerweise Eigenschaften gegenüber Getter- und Setter-Methoden bevorzugen. Wenn sie nicht idempotent sind, sind das Abrufen und Festlegen von Präfixen wahrscheinlich irreführend. Wenn sie nicht schnell sind, sollten Get- und Set-Präfixe wahrscheinlich durch Präfixe ersetzt werden, die deutlicher machen, dass Kosten anfallen (z. B. "berechneFrob" anstelle von "getFrob" verwenden).
Brian

@ Brian Ich suchte nach mehr Klarheit. Die Art und Weise, wie ich Getter und Setter sah, bestand NUR darin, die privaten Daten zu erhalten und die Daten einzustellen. Wenn Sie im vorherigen Kommentar ein Beispiel für berechneFrob () angegeben haben, entspricht dies eher einer Operation / Berechnung für die privaten Daten. Diese Berechnung kann auch vorübergehend sein und wir müssen die privaten Daten möglicherweise nicht festlegen. Ich hoffe, Sie bekommen den Punkt, den ich hier ansprechen möchte.
JNL

3

Traditionell wird Getter mit getoder isfür den Wert vorangestellt . Dies wird oft in Java Style Guides erwähnt. Zum Beispiel Java Programming Style Guide (dies ist nur ein Beispiel).

Die Konvention für solche Methodennamen wird gelegentlich in Tools durchgesetzt, die Reflektion verwenden oder bestimmte Codestile erwarten. Beispielsweise wird erneut in Java (obwohl JSPs Ausdruckssprache) beim Kompilieren des JSP ${foo.bar}in den Aufruf übersetzt foo.getBar(). Das getValue()wird auf diese Weise durchgesetzt, so dass es mehr als nur eine Konvention wird.

Wie bereits erwähnt, stammen die obigen Beispiele aus Java. Dies ist eine Konvention für Java . Andere Sprachen haben andere Konventionen, die beachtet und wahrscheinlich auch befolgt werden sollten. Einige Sprachen verwenden Eigenschaften (und können andere nette Dinge damit tun, wie auf Anfrage kopieren oder schreibgeschützt).

Suchen Sie in den Styleguides nach Ihrer speziellen Sprachauswahl. Es ist wahrscheinlich eine gute Idee, ihnen zu folgen, wenn dies möglich ist, damit andere Codierer beim Lesen Ihres Codes schneller in den Code gelangen können, ohne Ihren persönlichen Stil herauszufinden.


2

Eine Methode gut lesbar zu benennen, hat Vorteile. Das Benennen von Methoden, so dass ihre Absicht und Art leicht aus dem Namen abzuleiten ist ("Getter haben Präfixe get, boolesche Prädikate is"), hat ebenfalls Vorteile.

Es liegt an Ihnen, ein Gleichgewicht zu finden, aber in einem großen Projekt überwiegen die Vorteile der Konsistenz normalerweise die der zufälligen Klugheit.

Das Umbenennen einer Methode, um den Namen sowohl lesbar als auch konventionskonform zu machen, ist eine schöne tägliche Übung. In Ihrem speziellen Fall würde ich so etwas wie isAutoLoginEnabledoder in Betracht ziehen getAutoLoginFlag.

OTOH Sie haben eine Reihe von konzeptionell ähnlichen Methoden, die alle dem Muster folgen können shouldDoSomething, Ihr ursprünglicher Name kann auch in Ordnung sein.


Ich mag das hinzugefügte "Aktiviert" zum Getter, es verbessert die Lesbarkeit, die ich finde, erheblich
Mike Bryant

1

Ich finde immer, dass Code so gut wie möglich lesbar sein sollte. Es hilft, die Absichten des Codes klar zu definieren. Denken Sie in Ihrem Fall darüber nach, welche positiven und negativen Verwendungen Ihr Boolescher Wert hat und wie sich dies auf die Lesbarkeit und die Absichten Ihrer Logik auswirken würde.

if(!shouldAutoLogin)
{
     ....
}

gegen

if(!getShouldAutoLogin)
{
    ....
}

Was gibt der Absicht, was der Code versucht, eine klarere Bedeutung?

Wie andere vorgeschlagen haben, würde ich die Variable sogar in umbenennen

isShouldAutoLogin

o.ä


0

Ich neige dazu zu schreiben, getAutoLoginwenn ich die Methode zu returneinem Datentyp wie einem intoder einem haben möchte String. Wenn ich jedoch überprüfen möchte, ob es trueoder false( boolean) ist, tausche ich das einfach getgegen ein issolches aus: getAutoLogin> isAutoLogin. Ich glaube, es gibt eine Namenskonvention für jede Sprache.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.