Nach meinem Empfinden geht das hier (solange diese Funktion nicht noch an anderer Stelle gebraucht wird) hart an die Grenze dieses Paradigmas. Wenn ich das wirklich bis zum Ende durchziehen will, dann müsste jede Zuweisung in eine Methode gekapselt werden, die die Absicht hinter dieser Zuweisung im Namen trägt. Dafür bin ich dann doch wohl zu viel Pragmatiker.
Warum nicht? Wenn dadurch der Code lesbarer wird? Es geht bei Methoden nicht nur um DRY, sondern und vor allen Dingen um Lesbarkeit. Ich will den Code (meinen und den anderer) sofort verstehen und mich nicht durch komische Abfragen hangeln müssen. Was ist so schlimm daran, die Abfrage nach dem Land in eine eigene kleine Funktion mit klarem Namen zu verschieben? Es hat *nur* Vorteile (die paar Pikosekunden Performance lassen wir mal außer acht, obwohl man das mit einer 'inline' Direktive auch noch hinbekommen könnte).
Schau Dir den (deinen) Code an. Extrahiere bzw. markiere in einer Methode, die mehr als 1 Zeile hat die Codezeilen, die genau eine Aufgabe erfüllen.
Sind die Zeilen an sich sofort verständlich, und zwar *ohne* das Du deinem fiktiven Kollegen etwas erklären müsstest?
Ist das Abstraktionsniveau dieser Zeile(n) mit den umgebenen identisch?
Ist die Antwort auf beide Fragen 'Ja', gehe zum nächsten Codeblock. Wenn nicht, refaktorisiere die Zeile(n) und spendiere ihnen eine eigene Methode mit einem Namen, der pragmatisch aber genau beschreibt, was diese Zeile(n) tun.
Sehr beliebt bei bool'schen Termen, denn wer begreift schon sofort, was folgende Zeile bedeutet:
Delphi-Quellcode:
if (Person.Position = Manager) or (Person.Salary>5000 and Person.Age>45)
then
Aber das hier versteht jeder:
Delphi-Quellcode:
if IstBonusBerechtigt(Person)
then
Das die Person ein Manager sein muss oder mehr als 5000 verdient und älter als 45 sein muss, ist für das Verständis der IF-Abfrage irrelevant (wer es dennoch wissen will, schaut eben in der Funktion nach). Aber der Code ist sofort verständlich. Ohne Kommentar.
Und wenn die Änderungsanforderung an 'IstBonusBerechtigt' kommt (weil nun auch Abteilungsleiter in den Genuss kommen), dann weiß auch der Junior-Programmierer, wo er ansetzen muss.
Das man daraus auch eine Eigenschaft der 'Person' machen könnte, sei mal dahingestellt.
Schau Dur mal z.B. den DevExpress Quellcode an: Dort gibt es massenhaft Methoden, die nur aus einer Anweisung bestehen. So schreibt man heute guten Code. Alles andere ist
imho Frickelei.
Und eines zum Schluß: Natürlich geht man pragmatisch an die Sache ran. Oder nenne es 'gesunden Menschenverstand ohne Dogma'. Ist doch logisch.