Swift 2 Früh verlassen mit Wache

Überrascht es Sie, dass ich ein Tutorial für eine einfache Ergänzung als bewachen Aussage? Ich hoffe, Sie werden meine Aufregung am Ende dieses Tutorials besser verstehen. Während dieses Tutorials hoffe ich, Sie davon zu überzeugen bewachen ist alles andere als eine redundante Ergänzung der Programmiersprache Swift.

Komplexität minimieren

Bedingungen sind ein grundlegender Bestandteil jeder Programmiersprache. Objective-C und Swift bilden keine Ausnahme von dieser Regel. Wenn Sie vorhaben, eine Anwendung von beliebiger Komplexität zu schreiben, kreuzen sich die Bedingungen an Ihrem Weg, es gibt kein Entkommen.

Leider sind Bedingungen oft die Ursache von Komplexität. Insbesondere verschachtelte Bedingungen können zu schwer zu findenden Fehlern, schwer verständlichem Code und leicht übersehenen Randfällen führen.

Verschachtelt bleiben ob Aussagen zu einem Minimum, verwende ich häufig das folgende Muster in Objective-C.

- (void) fetchListOfCustomers: (NSArray *) Kunden if (! self.reachable) return; if (! self.connected) return; if (! Kunden ||! [Kunden zählen]) zurück;… 

Die Idee ist, so schnell wie möglich zu retten. Das ob Anweisungen im Beispiel stellen eine Reihe von Anforderungen dar, die erfüllt sein müssen, bevor der Rest des Methodenkörpers ausgeführt wird.

Das obige Beispiel übersetzt das folgende etwas komplexere Äquivalent.

- (void) fetchListOfCustomers: (NSArray *) Kunden if (self.reachable && self.connected) if (Kunden && [Kunden zählen]) … 

Sehen Sie das Problem in diesem Beispiel? Wir sind bereits zwei Ebenen tief verschachtelt, ohne etwas Interessantes getan zu haben.

Es ist einfach, das obige Muster in Swift zu übersetzen. Die Syntax sieht ähnlich aus, aber wegen Kunden Da dies optional ist, müssen wir das auspacken Kunden Argument, bevor wir auf seinen Wert zugreifen können.

func fetchListOfCustomers (Kunden: [Kunde]?) wenn! erreichbar return if! connected return wenn Kunden = Kunden sind, bei denen customer.count> 0 print (Kunden) 

Früh verlassen

Swift 2 führt die bewachen Aussage. Es wurde speziell für das frühe Beenden einer Methode oder Funktion entwickelt. Das bewachen Diese Anweisung ist ideal, um tief verschachtelte Bedingungen zu beseitigen, deren einziger Zweck darin besteht, eine Reihe von Anforderungen zu überprüfen. Schauen Sie sich das aktualisierte Beispiel an, in dem ich jedes ersetzt habe ob Aussage mit dem Neuen bewachen Aussage.

func fetchListOfCustomers (Kunden: [Kunde]?) Wache erreichbar sonst Zurück Wache verbunden sonst Zurück Wache Kunden = Kunden, bei denen Kunden.Zahl> 0 sonst Zurück drucken (Kunden) 

Es gibt einige Dinge, die es zu beachten gilt. Beginnen wir mit der Syntax.

Syntax

Das bewachen Das Keyword betont, dass wir eine Anforderung überprüfen. Wir sind Bewachung gegen etwas. Im Beispiel wird explizit geprüft, ob erreichbar und in Verbindung gebracht sind wahr. Wenn dies nicht der Fall ist, verlassen wir die Methode frühzeitig. Der Punkt ist, dass die Syntax über die Anforderungen expliziter ist als eine reguläre ob Aussage.

Ausgang

Beachten Sie, dass a bewachen Aussage hat immer eine sonst Klausel. Das sonst Klausel wird ausgeführt, wenn die Bedingung der bewachen Anweisung ausgewertet zu falsch. Verwenden bewachen Es macht viel mehr Sinn, wenn Sie Anforderungen validieren.

In dem sonst Klausel, müssen Sie die Kontrolle aus dem Bereich übertragen, in dem die bewachen Anweisung erscheint. Wir benutzen ein Rückkehr Anweisung im obigen Beispiel, Sie können jedoch beispielsweise eine fortsetzenAnweisung, wenn Sie sich in einer Schleife befinden oder einen Fehler auslösen. Schauen Sie sich das aktualisierte Beispiel an, in dem wir einen Fehler in der sonst Klausel. Beachten Sie das wirft Schlüsselwort in der Methodendeklaration, um dies anzuzeigen fetchListOfCustomers (_ :) ist eine Wurfmethode.

func fetchListOfCustomers (Kunden: [Kunde]?) wirft Wache erreichbar, sonst, APIError.APIErrorUnreachable. 

Kraftvoll

EIN bewachen Aussage ist genauso mächtig wie eine ob Aussage. Sie können optionale Bindungen und sogar die Verwendung von verwenden woher Klauseln, die in Swift 1.2 eingeführt wurden, sind zulässig. Ich bin sicher, Sie stimmen zu, dass das Beispiel einfach zu verstehen ist und unnötige verschachtelte Bedingungen eliminiert.

Umfang

Ein wichtiger Unterschied zu ob Anweisungen ist der Bereich von Variablen und Konstanten, denen mithilfe einer optionalen Bindung Werte zugewiesen werden. Im obigen Beispiel ist das Kunden Konstante wurde über eine optionale Bindung ein Wert zugewiesen. Das Kunden Konstante ist aus dem Umfang der bewachen Die Anweisung erscheint in. Dies ist ein wichtiges Detail und einer der wichtigsten Vorteile der Verwendung bewachen.

Fazit

Wenn du das gedacht hast bewachen war eine einfache Variante von Swift ob Aussage, dann hoffe ich, ich habe dich sonst überzeugt. Während ob Anweisungen werden in den meisten Situationen weiterhin das Mittel der Wahl sein, bewachen hat in bestimmten Situationen eine Reihe von Vorteilen. Dies gilt insbesondere für die Kombination mit der Fehlerbehandlung, die auch in Swift 2 eingeführt wurde.