Guard Statements statt IF-ELSE Hölle

Tobias Zimmermann2 Minuten Lesezeit

Du kennst das sicherlich, du schreibst eine Funktion und am Ende hast du mehrere Blöcke IF-ELSE.

Klar kann es auch sein, dass dein Programmierstil etwas dirty ist, aber vielleicht arbeitest du auch einfach mit einer Sprache die kein guard unterstützt wie z.B. Typescript/Javascript.

Hier ein Beispiel, was für eine Art code ich meine:

typescript
function getClassNameByNumber(number: number): string {
if (number > 100) {
return "dark";
} else if (number > 50) {
return "medium";
} else {
return "light";
}
}

Fallthrough switch#

Klar kann man bei vielen solcher Funktionen vermutlich auch ein switch nehmen, ist sich aber genauso schlecht lesen.

typescript
function getClassNameByNumber(number: number): string {
switch (true) {
case number > 100:
return "dark";
case number > 50:
return "medium";
default:
return "light";
}
}

guard-style in Javascript#

Nutzt man aber eine Art guard-style-Code, ist es viel viel einfacher zu lesen:

typescript
function getClassNameByNumber(number: number): string {
if (number > 100) return "dark";
if (number > 50) return "medium";
return "light";
}

Das echte Guard-Statement in Swift#

Achtung, guard ist eine Art negative IF. Deshalb sind die Logiken hier umgedreht. Nur wenn das Guard-Statment True ist, geht es in der Funktion weiter.

swift
func getClassName(for number: Int) -> String{
guard number < 100 else { return "dark" }
guard number < 50 else { return "medium" }
return "light"
}

Fazit#

Ich denke das diese Art von Abfragen viel besser lesbar sind. Natürlich sollte man Funktionen so klein wie möglich halten und im letzten Return-Statement sollte eigentlich immer der Rückgabetyp eingehalten werden.

Grade in Swift, möchte ich guard nicht mehr hergeben.