Swift 2.0 Guard-Statements

Auf der WWDC 2015 hat Apple Swift 2.0 angekündigt. Neben den vielen anderen Vorstellungen in der Keynote ging Swift fast unter. Die Session What’s new in Swift ist dann etwas deutlicher geworden. Dabei hat es das Update durchaus in sich. Zum Beispiel werden Altlasten entfernt, die von Objective-C geerbt wurden, überwunden. Außerdem kommen spannende neue Konzepte sowie Paradigmen, die das Gesamtpaket abrunden. Dazu gehören auch die Guard-Statements, die mit dem guard Keyword eingeleitet werden

Das guard Keyword in Swift

Mit dem guard-Keyword gibt es nun einen Türsteher.  Du kannst mit ihm Variablen in Swift prüfen und Bedingungen durchsetzen. Werden sie nicht erfüllt, wird ein Standardfall ausgeführt. Der Wert soll größer als 0 sein? Kein Problem. Du hast noch weitere Voraussetzungen, die davon abhängen? Ebenfalls kein Problem!

Zugegeben, die Anforderung ist nicht neu. Bisher gab es bereits solche Prüfungen in jeder Sprache, realisiert mit if-Bedingungen. Daraus ergeben sich aber ein paar Nachteile. Der beste Weg besteht darin jede Bedingung vorab einzeln zu prüfen. In einer Methode oder Funktion werden so Parameter auf Herz und Nieren geprüft, bevor sie genutzt werden. Jede Bedingung steht als eigener if-Block:

Um Bedingungen in einzelnen Statements zu ermöglichen, müssen wir abfangen was wir nicht wollen. In diesem Fall wird das übergebene Alter geprüft. Es soll zwischen 0 und 150 liegen. Ist das nicht der Fall, wird die Funktion vorzeitig beendet.

Du kannst natürlich auch die Bedingung prüfen, die gewünscht ist. Allerdings musst Du den gesamten Code der Funktion dann verschachteln:

Kommen weitere Bedingungen hinzu, bist Du schnell bei zwei oder drei verschachtelten Ebenen – bereits ohne eigene if-Blöcke, switch-Statements oder Schleifen. Bei nur einer Zeile kein Problem. In der Realität ist aber eine Funktion deutlich länger. Wenn Du Optionals validierst, musst du zusätzlich immer explizit auf nil prüfen. Anschließend wird über forced optional-unwrapping der Wert in den ursprünglichen Datentyp überführt (mit dem Ausrufezeichen).

Optional Binding als Alternative

Swift bietet zur Vereinfachung Optional-Binding an. So prüfst Du auf nil, verarbeitest Deine Bedingung und hast gleichzeitig die Werte im ursprünglichen Datentyp vorliegen. Bleibt aber noch immer das Problem der Verschachtelung. Bei diesem Ansatz musst Du den positiven Fall prüfen:

Du bist bei diesem Ansatz schnell in zweiter oder dritte Ebene. Guter Stil ist das nicht. Genau das dachten sich auch die Entwickler bei Apple. Die Antwort? Das guard-Keyword, dass mit Xcode 7 bzw. Swift 2.0 Einzug halten wird.

Du kommst hier nicht rein: guard im Einsatz

Das guard-Statement bietet aus beiden Ansätzen die besten Optionen. Du führst einzelne Prüfungen durch. Außerdem wird genau das geprüft, was eigentlich gewünscht ist. Zudem verzettelst Du Dich nicht in tiefer Verschachtelung. Gleichzeitig werden Optionals nicht mehr über forced unwrapping „ausgepackt“. Eine elegante Lösung für alle Probleme. Und zudem auch noch ein total sprechender Name. Ein guard, zu deutsch Wächter oder „Aufpasser“:

Ziemlich cool, oder? Das Keyword kann natürlich auch genutzt werden, wenn es nicht um Optionals geht. Ähnlich wie das in der zweiten Bedingung zu sehen ist, funktioniert es auch alleinstehend:

Live im Video

Das Konzept kannst Du auch noch einmal im Video ansehen:

Fazit

Swift 2.0 hat die Bezeichnung definitiv verdient. Guard Statements sind ein Feature, dass ich nie aktiv vermisst habe. Mit der Idee kann ich mich aber sofort anfreunden. Eine echte Bereicherung. Es gibt noch weitere Konzepte und Neuerungen, die uns im Herbst mit der Veröffentlichung von iOS9 erwarten. Selbstverständlich demnächst mehr dazu auf codingtutor.de.

Tags:

, , ,

Schreib einen Kommentar

Your email address will not be published.