2014-09-26 2 views
7

Der Titel sagt alles ... Warum wird in Swift eine Konstante mit dem Schlüsselwort "Let" deklariert?Warum wird in Swift eine Konstante mit dem Schlüsselwort "Let" deklariert?

Wahrscheinlich gibt es eine einfache Antwort auf diese Frage Noob, aber ich konnte es nicht auf SO finden.

EDIT: OK, nur um die Frage klarer zu machen. Ich weiß, dass es mit EINEM Namen initialisiert werden muss, aber ich dachte, dass es vielleicht eine tiefere Bedeutung gibt, eine Quelle, woher es stammt? Andere Sachen wie "func" erscheinen mir sehr logisch, also frage ich mich, was die tiefere Bedeutung von "let" ist.

+1

Ich mag Ihre Frage, aber ich glaube, dass Sie die Antwort hier nicht finden werden, da es mehr von ... CS Philosophie und Apples Magie ist :) – Michal

+1

Die 'Let' Bezeichnung, die die Erstellung einer Konstante explizit macht. Dies bietet gegenüber Sprachen mit impliziter Deklaration von Variablen pragmatische Vorteile (z. B. Sprachen mit impliziter Deklaration von Variablen machen es viel zu einfach, alle Arten von Fehlern einzuführen). Die Begründung für Konstanten vs Variablen wird am Anfang des WWDC 2014 Video [Einführung in Swift] (https://developer.apple.com/videos/wwdc/2014/?id=402) diskutiert, in dem sie diskutieren, wie die Verwendung von Konstanten sind sicherer, Code kann optimiert werden und macht die Absicht des Programmierers klarer. – Rob

+2

Als Antwort auf Ihre überarbeitete Frage, hat 'Let' eine [reiche Geschichte in Programmiersprachen] (http://programmers.stackexchange.com/questions/194227/in-what-programming-language-did-let-first-appear) – Rob

Antwort

11

Eigentlich in Swift gibt es kein Konzept der konstanten Variablen.

Eine Konstante ist ein Ausdruck, der zur Kompilierungszeit aufgelöst wird. Zum Beispiel in Objective C diesem Code:

const NSString *string = [[NSString alloc] init]; 

führt zu einem Übersetzungsfehler, die besagt, dass Initializer element is not a compile-time constant. Der Grund dafür ist, dass NSString zur Laufzeit instanziiert wird, also keine Kompilierzeitkonstante ist.

In schnell ist die nächste unveränderliche Variable. Der Unterschied ist möglicherweise nicht offensichtlich, aber eine unveränderliche ist keine Konstante, es ist eine Variable, die dynamisch einmal initialisiert werden kann und danach nicht geändert werden kann. So wird die Kompilierung Auswertung nicht noch erforderlich erforderlich - auch wenn es häufig wir immutables als Konstanten verwenden passieren wird:

let url = "http://www.myurl.com" 

let maxValue = 500 

let maxIntervalInSeconds = 5 * 60 *60 

Aber immutables kann auch mit Ausdrücken zur Laufzeit ausgewertet initialisiert werden:

let url = isDebug ? "http://localhost" : "http://www.myservice.com" 

let returnCode: Int = { 
    switch(errorCode) { 
    case 0: return 0 
    default: return 1 
    } 
}() 

Die Letztes Beispiel ist interessant: Verwenden einer unmittelbar ausgeführten Closure zum Initialisieren einer unveränderlichen Variablen (anders als var unterstützen die unveränderbaren Dateien keine verzögerte Initialisierung, daher ist dies die einzige Möglichkeit zur Initialisierung mit einem mehrzeiligen Ausdruck)

+0

Danke Antonio. Aber warum ist es mit "Let" und nicht mit "Foo" oder "Cheesecake" initialisiert? Entschuldigung, aber ich glaube, ich habe den Teil verpasst, der meine erste Frage beantwortet hat. – theremin

+1

Es muss etwas sein, oder? "Let" wird oft auf diese Weise in der Mathematik verwendet: Lassen Sie x = 5, lassen Sie y = x * 2, usw. –

+0

Ich denke "let" wurde ursprünglich in BASIC verwendet, am Anfang der Zeiten ... – Leandro

Verwandte Themen