Duffs Gerät in Swift

8

Wir wissen, dass ein Duff-Gerät das Interlacing der Strukturen eines Fallthrough-Switches und einer Schleife wie folgt verwendet:

%Vor%

Nun, in Swif 2.1, Switch-Case-Kontrollflüsse haben implizit keinen Fall durch, wie wir in Swift-Dokumenten lesen:

  

Kein impliziter Fall durch

     

Im Gegensatz zu den Schalteranweisungen in C und Objective-C wechseln Sie   Aussagen in Swift fallen nicht durch den Boden jedes Falles und   in die nächste standardmäßig. Stattdessen die gesamte switch-Anweisung   beendet seine Ausführung, sobald der erste passende Schalterfall vorliegt   abgeschlossen, ohne dass eine explizite break-Anweisung erforderlich ist. Das macht   Die Switch-Anweisung ist sicherer und einfacher zu benutzen als in C und vermeidet   mehr als einen Schalterfall versehentlich ausführen.

Nun, da es eine Fallthrough-Klausel gibt, die in Swift explizit einen Fallthrough-Nebeneffekt hat:

  

Fall durch

     

Switch-Anweisungen in Swift fallen nicht durch den Boden jedes Falles   und in den nächsten. Stattdessen wird die gesamte switch-Anweisung abgeschlossen   seine Ausführung, sobald der erste übereinstimmende Fall abgeschlossen ist. Durch   Im Gegensatz dazu müssen Sie in C eine explizite break-Anweisung einfügen   Ende jedes Schalters, um einen Fall zu vermeiden. Fehler vermeiden   Fallout bedeutet, dass Swift-Switch-Statements viel prägnanter sind   und vorhersagbarer als ihre Gegenstücke in C, und so vermeiden sie   Ausführung mehrerer Schalter fälschlicherweise.

das ist ungefähr so:

%Vor%

wenn man bedenkt, dass, wie Wikipedia uns erinnert, die Geräte aus dem Problem herauskommen

%Vor%

Was wäre die genaue Implementierung eines Duff-Geräts in Swift ?

Dies ist nur eine Sprache & amp; Coding Frage, es ist nicht beabsichtigt, in echten Swift-Anwendungen angewendet werden.

    
loretoparisi 25.01.2016, 15:34
quelle

1 Antwort

1

Sie drücken Ihre Absicht mit dem höchstmöglichen Code aus und vertrauen dem Swift-Compiler, um ihn für Sie zu optimieren, anstatt ihn selbst zu optimieren. Swift ist eine Hochsprache. Sie führen keine Low-Level-Schleife in einer High-Level-Sprache aus.

Und besonders in Swift müssen Sie sich keine Gedanken über das Kopieren von Arrays machen (die ursprüngliche Anwendung von Duffs Device), da Swift vorgibt, ein Array zu kopieren, wenn Sie es zuweisen, indem Sie "Kopieren beim Schreiben" verwenden. Dies bedeutet, dass das gleiche Array für zwei Variablen verwendet wird, solange Sie gerade von ihnen lesen, aber sobald Sie eine davon ändern, wird im Hintergrund ein Duplikat erstellt.

Zum Beispiel aus Ссылка     Ändern von Kopien von Arrays

%Vor%     
Glomek 16.12.2017 18:47
quelle