2015-07-06 10 views
5

In Swift haben die Elemente, die wir manipulieren, alle Typen. Wenn wir diese Typen verwenden, können wir eine 'hinzufügen! ',' ? 'oder nichts, um ihre NULL-Fähigkeit auszudrücken.Terminologie von Optionals in Swift oder anderen Sprachen

  1. Was soll ich 'nennen? 'oder' ! 'verwendet, um dieses Merkmal auszudrücken?

Ein Typ Dekorateur? Ein Dekorateur? Operator ? Etwas anderes ?

  1. Was soll ich den Typen erstellt rufen, wenn dieses Zeichen verwenden?

Ist es eine neue Art? Ist es ein dekorierter Typ? Eine Typenvariante?

Der schnelle Compiler, scheint sie als neue Typen zu betrachten, aber meine Frage ist nicht Implementierung oder Sprache abhängig und daher habe ich es als Sprache agnostisch getaggt.

Edit: Ich bin auf der Suche nach einer Sprache agnostischen Namen. Ich verstehe mit Pranjalsatija Kommentar Optionals sind definiert als compound type. Dies ist jedoch ein Sprachimplementierungsdetail. Ich konnte meine Fragen umformulieren:

Was Sie ein Zeichen mit besonderer Bedeutung nennen, wenn er eine Typdefinition verwendet wird, und wie der abgeleiteten Typen nennen.

Dieser Begriff sollte wahrscheinlich für Capital-Casing-Konstanten in Ruby gelten, da das Konzept ähnlich ist.

Antwort

0

Optionals in Swift sind technisch völlig verschiedene Typen, nicht Variationen des gleichen Typs. Für einen Entwickler scheinen sie jedoch Variationen zu sein, also behandeln wir sie als solche. Das ? und das ! Ich habe noch nicht wirklich einen Satz, einen bestimmten Namen, zumindest nicht, dass ich davon weiß. In gewissem Sinne sollten Sie sie nicht als Typ-Dekoratoren bezeichnen, da Optionals wirklich neue Typen sind. Also, um deine Frage zu beantworten, die? und das ! sind Teile des Namens eines Typs, mehr als alles andere. Und der neue Typ, der erstellt wird, wenn ein? oder ein! ist genau das. Ein brandneuer Typ.

+1

https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Types.html Klicken Sie auf diesen Link, um weitere Einzelheiten zur Funktionsweise von Optionals zu erfahren. Grundsätzlich sagt Apple, dass Optionals separat definiert werden und String schreiben? ist das gleiche wie Schreiben Optional . Wenn Sie das Dokument lesen, werden Sie sehen, was ich meine. Das ? und das ! sind eigentlich Syntax Zucker, um das Schreiben von Code einfacher zu machen, so dass sie nicht wirklich Typ-Dekoratoren oder Operatoren genannt werden. – pranjalsatija

+0

Der neu geschaffene Typ scheint eher eine Implementierung als ein Konzept zu sein, ich glaube nicht, dass dies die Terminologie beeinflussen sollte, da dies ein Swift-spezifisches Ding ist. Zeiger, Klassen, Aufzählungen sind alle Konzepte, auch wenn die tatsächliche Implementierung und das Verhalten sich von einer Sprache zur anderen verschiebt. – Antzi

6

? am Ende des Typs ist keine Dekorateur oder Betreiber. Es ist hartcodierter syntaktischer Zucker in Swift, der es ermöglicht, Optional<Thing> auf Thing? zu verkürzen.

Die ? hat nicht wirklich einen Namen (zumindest habe ich noch nie jemanden im Swift-Team gehört), in der Sprachreferenz wird es nur als "das Postfix ?" beschrieben. Die Sprachgrammatik enthält keine syntaktische Kategorie.

In ähnlicher Weise ist [Thing] eine Abkürzung für Array<Thing>, aber in diesem Kontext gibt es keinen Namen für die eckigen Klammern.

Beschreiben Option<Int> als "abgeleitet von" Int wäre, den Begriff "abgeleitet" zu missbrauchen. Sie können es als "Optional spezialisiert für Int" beschreiben.

In der Tat können Sie für die sprachunabhängig Begriff suchen, wie Swift ermöglicht es Ihnen, Typen zu bauen (wie Optional<T> oder Array<T>), die auf jede Art von Typ gelten T, ohne dass egal, was T tatsächlich ist. In diesem Fall wäre der Begriff wahrscheinlich generics.

! ist ein wenig anders. Wenn es auf einen Typnamen wie in Thing! angewendet wird, ist es eine Kurzschrift für ImplicitlyUnwrappedOptional<Thing>, in der gleichen Weise wie ?.

!, wenn auf eine Variable vom Typ angewandt Thing? entsprechen einen Postfix-Operator, der die optionalen Tests und wenn es nil ist, endet das Programm, so etwas wie diese:

postfix operator !<T>(value: T?) -> T { 
    if let unwrapped = value { 
     return unwrapped 
    } 
    else { 
     fatalError("unexpectedly found nil while unwrapping an Optional value") 
    } 
} 

so in diesem Zusammenhang ! kann als ein Operator beschrieben werden. Aber nicht im ersten Kontext.

Für die Terminologie, die eine gegebene Sprache verwendet, um Optionals zu beschreiben, siehe die Option type Wikipedia-Seite.

Verwandte Themen