Getter-Methoden bei Boolean-Variablen: isVariablenname() oder getVariablenname() ?

Hi,

Bisher habe ich sämtliche get-Methoden nach dem Muster “getVariablenname()” erstellt. Egal von welchem Typ die Variable ist.
In Eclipse nutze ich seit einiger Zeit die Funktion, welche mir automatisch die get und set Methoden erstellt. Dabei ist mir aufgefallen, dass Eclipse bei Boolean-Variablen statt “getVariablenname()” immer “isVariablenname()” verwendet.

Welche Variante ist die gängigere von beiden?

Der isVariablenName() ist schon richtig… Es gibt ja nur richtig oder falsch z.b. isChangeable(). Daraus kann man dann schließen obs änderbar ist oder nicht. (Also auch “wörtlich”)

Für boolsche Werte sollte man is verwenden und für alles andere get.

Immer der, der Sinn macht. Wenn es um einen Konkreten boolschen Zustand geht, dann triffts is…(); halt eher.

Wenn du prüfen möchtest, ob dein Objet grad aktiv ist, dann ist

if(foo.isActive()){}

leichter zu lesen als

if(foo.getActivationValue() == true){}

.

is- wird als Prefix bei booleans zugelassen, auch von den meisten Frameworks, die Methoden für setter/getter automatisch auswerten.

Von außen ist es eher eine Sache der Lesbarkeit (mal als Beispiel direkt in der if-Anweisung, da solche Methoden oft genau dort landen):

if(usefulPost()) vs if(isUsefulPost()) vs if(getUsefulPost())
bzw
if(usefulPosts()) vs if(isUsefulPosts()) vs if(getUsefulPosts()) vs if(areUsefulPosts())

get- bzw is- sind Standard, Varianten ohne Prefix lesen sich in if-Bedingungen manchmal besser, Varianten mit are- sind kein Standard, ergeben dafür aber richtiges Englisch.

Wichtig: Einmal als Konvention im aktuellen Projekt festlegen und dann durchziehen, es gibt nichts schlimmeres als gemischte Konventionen, wo man bei jeder Klasse 3 mal per Code-Completion testet ob es jetzt enabled(), isEnabled() oder getEnabled() war.

Gruß

Laut Spezifikation **kann **man für boolesche Variablen isXXX verwenden, getXXX ist aber keinesfalls “falsch” (auch wenn das einige Tools nicht so sehen). Vermutlich hätte man aus Gründen der Einheitlichkeit gerne überall “get” gehabt, das “is” ist nur ein Zugeständnis an das Sprachgefühl.

@vanny

if(bool == true)

echt jetzt ? du prüfst ob es war ist das ein bool wahr ist ? auch wenns der compiler eh weg-optimiert und heutige cpu’s das eh in einem takt machen , aber mal erlich : mehrfache prüfungen sind ja ok, zeugen aber von wenig erfahrung / wissen

gleiches gilt natürlich für : if(bool == false)

klar, will man einen wert prüfen der false ist bleibt einen nichts anderes übrig, und in reinen asm-takten gezählt sogar besser da nur ein CMP draus wird, deutlich besser lesbar wäre jedoch : if(!bool)

if(bool == true)
Ich mach das eigentlich immer so, genau so wie den Vergleich auf false. Ich hab mich irgendwie dran gewöhnt und da sich hier und da schon mal ein Fehler genau bei so ner Abfrage versteckt hat schreib ichs immer aus, damit auch ja kein Zweifel bleibt :slight_smile:

@butterbemme
Wenn dich keiner dazu zwingt, würde ich mir das mal ganz schnell abgewöhnen.

Vergisst du vor einem Ausdruck im if das “!” hast du einen Fehler, nämlich dass dein if-Block zur falschen Zeit ausgeführt wird (oder nicht ausgeführt wird).
Das findet man relativ leicht.
Vergurkst du aber irgendwo mal das “==” zu einem “=”, ist der Ausdruck trotzdem noch gültig, deine Bedingung wird jedesmal ausgeführt und dein Boolean hat ab der Zuweisung immer den Wert true oder false.
Das ist ein Fehler, den man schon wesentlich schwerer findet.

(Gilt natürlich nur für die Prüfung von Variablen, bei Ausdrücken kann der Fehler nicht auftreten, da man einer Funktion nichts zuweisen kann).

Von der Lesbarkeit mal abgesehen, die meisten Entwickler sind if(anweisung) oder if(!anweisung) gewohnt.

Gruß

@Gast
Es geht dabei um die Verdeutlichung, der Lesbarkeit des is-Prefix gegenüber einer get-Bezeichnung bei boolschem Rückgabewert.
Und wenn ich schon son Sch… fabriziere, wie “boolean getActivationValue()”, dann muss ich auch für eine nachvollziehbare Lesbarkeit sorgen und im Vergleich “== true” nutzen.
Da es sich dabei aber sowieso offenkundig um ein Negativbeispiel handelt ist die vorausgehende Erklärung eh für´n Hintern.
@butterbemme
Bitte lass das sein, ich konnte ja nicht ahnen, das das jemand für bare Münze nimmt o0

Dem kann ich nur zustimmen und wenn ein Azubi bei uns soetwas ( == true) schreibt, darf er sich dass auch direkt abgewöhnen. Also @butterbemme ich würde dir auch raten, dir das abzugewöhnen. Ich könnte mir vorstellen, dass du früher oder später von einer Firma per Firmenkonvention dazu gezwungen wirst :wink:

Okay, okay, überzeugt…

Naja mal vom sinn her:

if(x) heisst: wenn x wahr ist. if(x == true) sagst du dann: wenn wahr ist das x wahr ist.

Sinnlos ^^