Das Thema Code-Style, in Bezug auf die Benamung von Variablen und Methoden, hatte ich ja in einem anderen Beitrag angesprochen. In Bezug auf die Benamung ist es allerdings gut etwas mehr in die Tiefe zu gehen und einen genaueren Blick darauf zu werfen.
Ganz grundsätzlich aber gilt: Bennene deine Variable / Methode danach wofür sie steht oder was sie macht. Punkt! Das hilft dir deinen Code auch später noch zu verstehen oder glaubst du, du kannst dich in einem Jahr noch erinnern, warum der String der Klasse Tier eigentlich ä heisst und wofür er steht?
Ja, das ist der eigentliche Kern der Sache und so einfach es auch klingt, so schwer scheint es manches mal zu sein.
Ja, ich gebe dir recht, dass da manchmal auch echt komische Sachen bei rauskommen doch wenn man einige andere Dinge (wie z.B. das KISS-Prinzip) dabei beachtet, dann klappt das sogar erstaunlich gut. Doch langsam … Ich fange nochmal ganz in Ruhe an, bevor hier Begriffe vorkommen, die du vielleicht gar nicht kennst …
Ein gern genommenes Beispiel sind ja Tiere, Tierarten oder ein Zoo oder ähnliches. Daran lässt sich Objektorientierung ziemlich gut darstellen und auch für diesen Beitrag eignet sich das Thema durchaus.
Nehmen wir also an, wir wollen mit unserem Code einen Zoo darstellen. Dazu brauchen wir natürlich eine Menge Variablen und Methoden. Grundsätzlich ist nach meiner Einschätzung die englische Sprache bei der Benamung von Variablen vorzuziehen doch es gibt durchaus auch gute Gründe für die Benamung in deutscher Sprache. Um das hier einfacher darzustellen wähle ich an dieser Stelle letzteres und zeige dir auch, auf welche Schwierigkeiten du damit stoßen kannst.
Doch zunächst zurück zu unserem Zoo. Wir möchten nun einfach die Klasse Tier erstellen und legen ein paar Klassenvariablen an:
public class Tier {
private String a;
private int i;
private boolean xyz;
}
Ich hoffe du erkennst sofort, dass dieses Vorgehen alles andere als klug ist denn außer dir (und auch nur zum Zeitpunkt als du so etwas geschrieben hast) wird niemand verstehen, was deine Tiere für Eigenschaften haben. Besser sieht dagegen das folgende Beispiel aus:
public class Tier {
private String geschlecht;
private int alter;
private boolean hatFell;
}
Nun kann man deutlich sehen, welche Eigenschaften deine Tiere haben. Ein Geschlecht und ein Alter ist so problemlos zu erkennen und auch im weiteren Verlauf deines Code wiederzufinden.
Doch bei der Verwendung des Boolean werden wir nun auf ein weitere Problem stoßen: Getter & Setter. Um den Zugriff auf deine Variablen zu erhalten benötigst du Getter und Setter und hier wird nun das Problem der deutschen und englischen Sprache sichtbar. Wenn du eine IDE verwendest (wie IntelliJ, VSC oder NetBeans) kannst du dir diese Generieren lassen. Bei der Verwendung von boolschen Ausdrücken hat es sich allerdings etabliert, diese über ein is anzusprechen. Damit erhalten wir Getter wie isSaeugetier oder isFleischfresser welche als Antwort dann eben true oder false zurückliefern.
public String getGeschlecht() {
return geschlecht;
}
public void setGeschlecht(String geschlecht) {
this.geschlecht = geschlecht;
}
public boolean isHatFell() {
return this.hatFell;
}
public void setHatFell(boolean hatFell) {
this.hatFell = hatFell;
}
Nun siehst du, dass hatFell vielleicht nicht so die geeignete Wahl der Benamung ist, denn was soll isHatFell denn dann bedeuten? Für boolsche Ausdrücke sollten Adjektive verwendet werden damit die Benamung auch Sinn ergibt. hatFell ist also keine Eigenschaft die du so umsetzen solltest. Wenn es tatsächlich aber nur diese Möglichkeit gäbe es über einen boolschen Ausdruck darzustellen müsste die Eigenschaft dann eher befellt heißen damit es ersichtlich wird (isBefellt, bzw. setBefellt).
Es bleibt also nichts anderen übrig, als sich von vorne herein schon Gedanken zu machen, wie man seinen Code gestalten will. Dies ist ein unabdingbarer Schritt bei der Entwicklung.
Ein paar Regeln sollte es also geben damit man sich gut zurechtfinden kann. Dabei haben sich folgende etabliert:
einfache Variablen: Nomen (Einzahl, CamelCase beachten!) boolsche Ausdrücke: Adjektive (bedenken, dass der Getter mit is aufgerufen wird!) Methode: Verben
Gibt es Eigenschaften, die nur ja oder nein enthalten können, dann nimmt man einen Boolean. Eigenschaften die mehrere, aber eine feste Anzahl an Möglichkeiten bieten, dann kommt ein Enum in Frage und für alles andere eben einfache Datentypen.
Eine Variable mit nur einem Buchstaben (in der Regel i) wird ausschließlich in Zählschleifen verwendet!
for (int i = 0; i < 10; i++) {
// macht was
}
Um das Beispiel zu vervollständigen noch Methoden, die die Klasse Tier enthalten könnte:
private void bellen() {
// Tier bellt
}
private void beissen() {
// ein Tier kann auch beissen
}
Letztlich wird auch hier schnell klar, dass die deutsche Sprache Schwierigkeiten machen könnte, denn beissen und beißen ist eben nicht das Gleiche. Und gerade bei der Benamung sollte auf Sonderzeichen aller Art verzichtet werden. Dies schließt natürlich auch die Verwendung von ä, ö, ü sowie ß mit ein. So müsste dann loeschen statt löschen oder beissen statt beißen verwendet werden. Daher wird nun auch deutlich, dass es eben doch besser sein kann die Benamung ganz grundsätzlich in englischer Sprache nutzen.
