Literale
Literal vom Typ „Unit“
Das einzige vorhandene Literal für den Typ Unit
ist der Wert ()
.
Der Wert Unit
wird häufig als Argument für aufrufbare Komponenten verwendet – entweder, weil keine anderen Argumente übergeben werden müssen, oder um die Ausführung zu verzögern. Er wird auch als Rückgabewert verwendet, wenn kein anderer Wert zurückgegeben werden muss, was bei unitären Vorgängen (also bei Vorgängen, die das Funktionselement Adjoint
und/oder das Funktionselement Controlled
unterstützen) der Fall ist.
Literale vom Typ „Int“
Wertliterale für den Typ Int
können in binärer, oktaler, dezimaler oder hexadezimaler Darstellung ausgedrückt werden. Binär ausgedrückte Literale sind mit dem Präfix 0b
versehen. Bei oktaler Darstellung wird 0o
und bei hexadezimaler Darstellung 0x
verwendet. Für die üblicherweise verwendete Dezimaldarstellung gibt es kein Präfix.
Darstellung | Wertliteral |
---|---|
Binary | 0b101010 |
Oktal | 0o52 |
Decimal | 42 |
Hexadezimal | 0x2a |
Literale vom Typ „BigInt“
Wertliterale für den Typ BigInt
sind immer mit dem Postfix L
versehen können in binärer, oktaler, dezimaler oder hexadezimaler Darstellung ausgedrückt werden. Binär ausgedrückte Literale sind mit dem Präfix 0b
versehen. Bei oktaler Darstellung wird 0o
und bei hexadezimaler Darstellung 0x
verwendet. Für die üblicherweise verwendete Dezimaldarstellung gibt es kein Präfix.
Darstellung | Wertliteral |
---|---|
Binary | 0b101010L |
Oktal | 0o52L |
Decimal | 42L |
Hexadezimal | 0x2aL |
Literale vom Typ „Double“
Wertliterale für den Typ Double
können in Standardschreibweise oder in wissenschaftlicher Schreibweise ausgedrückt werden.
Darstellung | Wertliteral |
---|---|
Standard | 0.1973269804 |
Wissenschaftlich | 1.973269804e-1 |
Wenn nach dem Dezimalpunkt kein Wert mehr folgt, kann die Ziffer nach dem Dezimalpunkt weggelassen werden.
1.
ist beispielsweise ein gültiges Literal vom Typ Double
und entspricht 1.0
.
Literale vom Typ „Bool“
Vorhandene Literale für den Typ Bool
sind true
und false
.
Zeichenfolgenliterale
Ein Wertliteral für den Typ String
ist eine beliebig lange Sequenz von Unicode-Zeichen, die in doppelte Anführungszeichen eingeschlossen sind.
Innerhalb einer Zeichenfolge kann der umgekehrte Schrägstrich (\
) als Escapezeichen für ein doppeltes Anführungszeichen verwendet werden. Des Weiteren kann der umgekehrte Schrägstrich zum Einfügen eines Zeilenumbruchs (\n
), eines Wagenrücklaufs (\r
) oder eines Tabulators (\t
) verwendet werden.
Im Anschluss finden Sie Beispiele für gültige Zeichenfolgenliterale:
"This is a simple string."
"\"This is a more complex string.\", she said.\n"
Q# unterstützt auch interpolierte Zeichenfolgen.
Eine interpolierte Zeichenfolge ist ein Zeichenfolgenliteral, das eine beliebige Anzahl von Interpolationsausdrücken enthält. Hierbei kann es sich um Ausdrücke beliebiger Typen handeln.
Zum Zeitpunkt der Konstruktion werden die Ausdrücke ausgewertet, und ihre String
-Darstellung wird an der entsprechenden Position innerhalb des definierten Literals eingefügt. Zur Aktivierung der Interpolation wird das Sonderzeichen $
direkt (ohne Leerzeichen) vor dem ersten Anführungszeichen platziert.
Wenn es sich also beispielsweise bei res
um einen Ausdruck handelt, dessen Auswertung 1
ergibt, lautet der zweite Satz im folgenden Literal vom Typ String
„The result was 1.“:
$"This is an interpolated string. The result was {res}."
Literale vom Typ „Qubit“
Da Quantenarbeitsspeicher von der Runtime verwaltet wird, gibt es keine Literale für den Typ Qubit
. Werte vom Typ Qubit
können somit nur per Zuordnung abgerufen werden.
Werte vom Typ Qubit
stellen einen nicht transparenten Bezeichner dar, über den ein Quantenbit (Qubit) adressiert werden kann. Der einzige unterstützte Operator ist der Übereinstimmungsvergleich. Weitere Informationen zum Datentyp Qubit
finden Sie unter Qubits.
Literale vom Typ „Result“
Vorhandene Literale für den Typ Result
sind Zero
und One
.
Werte vom Typ Result
stellen das Ergebnis einer binären Quantenmessung dar.
Zero
gibt eine Projektion auf den Eigenraum +1 an; One
gibt eine Projektion auf den Eigenraum -1 an.
Literale vom Typ „Pauli“
Vorhandene Literale für den Typ Pauli
sind PauliI
, PauliX
, PauliY
und PauliZ
.
Werte vom Typ Pauli
stellen eine der vier Ein-Qubit-Pauli-Matrizen dar, wobei PauliI
die Identität darstellt.
Werte vom Typ Pauli
werden häufig verwendet, um die Achse für Drehungen sowie die Basis für Messungen anzugeben.
Literale vom Typ „Range“
Wertliterale für den Typ Range
sind Ausdrücke im Format start..step..stop
, wobei start
, step
und end
Ausdrücke vom Typ Int
sind. Wenn die Schrittgröße 1 ist, kann die Angabe weggelassen werden.
start..stop
ist beispielsweise ein gültiges Literal vom Typ Range
und entspricht start..1..stop
.
Werte vom Typ Range
stellen eine Sequenz von ganzen Zahlen dar, wobei das erste Element in der Sequenz start
ist und für die nachfolgenden Elemente jeweils step
zum vorherigen Element hinzugefügt wird, bis stop
übergeben wird.
Bei Werten vom Typ Range
sind die Werte an beiden Enden eingeschlossen. Das bedeutet, dass das letzte Element des Bereichs stop
ist, wenn die Differenz zwischen start
und stop
ein Vielfaches von step
ist.
Ein Bereich kann leer sein – etwa, wenn step
positiv und stop < start
ist.
Im Anschluss finden Sie Beispiele für gültige Literale vom Typ Range
:
-
1..3
ist der Bereich 1, 2, 3. -
2..2..5
ist der Bereich 2, 4. -
2..2..6
ist der Bereich 2, 4, 6. -
6..-2..2
ist der Bereich 6, 4, 2. -
2..-2..1
ist der Bereich 2. -
2..1
ist der leere Bereich.
Weitere Informationen finden Sie unter Kontextbezogene und ausgelassene Ausdrücke.
Arrayliterale
Ein Arrayliteral ist eine Sequenz von 0 oder mehr Ausdrücken, die durch Kommas getrennt und in Klammern [
]
und eingeschlossen sind, [1,2,3]
z. B. .
Alle Ausdrücke müssen einen allgemeinen Basistyp besitzen. Hierbei handelt es sich um den Elementtyp des Arrays. Wenn ein leeres Array mit []
angegeben wird, ist möglicherweise eine Typanmerkung erforderlich, damit der Compiler den geeigneten Typ des Ausdrucks bestimmen kann.
Arrays beliebiger Länge können mithilfe eines Größenarrayausdrucks erstellt werden.
Ein solcher Ausdruck hat das Format [expr, size = s]
, wobei s
ein beliebiger Ausdruck des Typs Int
sein kann und expr
zu einem Wert ausgewertet wird, der die Elemente des Arrays wiederholt s
wiederholt. Erstellt beispielsweise [1.2, size = 3]
dasselbe Array wie [1.2, 1.2, 1.2]
.
Literale vom Typ „Tupel“
Ein Literal vom Typ Tupel ist eine Sequenz mit einem oder mehreren Ausdrücken eines beliebigen Typs, die durch Kommas getrennt und in Klammern ((
und )
) eingeschlossen sind. Der Typ des Tupels enthält die Informationen zu den einzelnen Elementtypen.
Wertliteral | type |
---|---|
("Id", 0, 1.) |
(String, Int, Double) |
(PauliX,(3,1)) |
(Pauli, (Int, Int)) |
Tupel, die ein einzelnes Element enthalten, werden im Hinblick auf Typ und Wert auf die gleiche Weise behandelt wie das eigentliche Element. Dies wird als Äquivalenz für Singleton-Tupel bezeichnet.
Tupel werden verwendet, um Werte zu einem einzelnen Wert zu bündeln, was die Weitergabe vereinfacht. Dadurch kann jede aufrufbare Komponente genau eine Eingabe akzeptieren und genau eine Ausgabe zurückgeben.
Literale für benutzerdefinierte Typen
Die Werte eines benutzerdefinierten Typs werden durch Aufrufen des zugehörigen Konstruktors erstellt. Beim Deklarieren des Typs wird automatisch ein Standardkonstruktor generiert. Derzeit ist es nicht möglich, benutzerdefinierte Konstruktoren zu definieren.
Wenn IntPair
beispielsweise über zwei Elemente vom Typ Int
verfügt, erstellt IntPair(2, 3)
durch Aufrufen des Standardkonstruktors eine neue Instanz.
Vorgangs- und Funktionsliterale
Anonyme Vorgänge und Funktionen können mithilfe eines Lambdaausdrucks erstellt werden.