Littéraux
Littéral Unit
Le seul littéral existant pour le type Unit
est la valeur ()
.
La valeur Unit
est couramment utilisée comme argument pour des callables (soit parce qu’aucun autre argument n’a besoin d’être transmis, soit pour retarder l’exécution). Elle est également utilisée comme valeur de retour quand aucune autre valeur n’a besoin d’être retournée, ce qui est le cas pour les opérations unitaires (opérations prenant en charge le foncteur Adjoint
et/ou Controlled
).
Littéraux Int
Les littéraux de valeur pour le type Int
peuvent être exprimés en représentation binaire, octale, décimale ou hexadécimale. Les littéraux sont préfixés par 0b
pour la représentation binaire, par 0o
pour la représentation octale et par 0x
pour la représentation hexadécimale. Il n’y a pas de préfixe pour la représentation décimale couramment utilisée.
Représentation | Littéral de valeur |
---|---|
Binary | 0b101010 |
Octal | 0o52 |
Decimal | 42 |
Valeur hexadécimale | 0x2a |
Littéraux BigInt
Les littéraux de valeur pour le type BigInt
sont toujours suffixés avec L
et peuvent être exprimés en représentation binaire, octale, décimale ou hexadécimale. Les littéraux sont préfixés par 0b
pour la représentation binaire, par 0o
pour la représentation octale et par 0x
pour la représentation hexadécimale. Il n’y a pas de préfixe pour la représentation décimale couramment utilisée.
Représentation | Littéral de valeur |
---|---|
Binary | 0b101010L |
Octal | 0o52L |
Decimal | 42L |
Valeur hexadécimale | 0x2aL |
Littéraux Double
Les littéraux de valeur pour le type Double
peuvent être exprimés en notation standard ou scientifique.
Représentation | Littéral de valeur |
---|---|
standard | 0.1973269804 |
Scientifique | 1.973269804e-1 |
Si rien ne suit le séparateur décimal, vous pouvez omettre le chiffre après le séparateur. Par exemple, 1.
est un littéral Double
valide qui équivaut à 1.0
.
Littéraux Bool
Les littéraux existants pour le type Bool
sont true
et false
.
Littéraux de chaîne
Un littéral de valeur pour le type String
est une séquence de longueur arbitraire de caractères Unicode entre guillemets doubles.
À l’intérieur d’une chaîne, le caractère de barre oblique inverse (\
) peut être utilisé pour échapper un guillemet double ou pour insérer une nouvelle ligne (\n
), un retour chariot (\r
) et une tabulation (\t
).
Voici des exemples de littéraux de chaîne valides :
"This is a simple string."
"\"This is a more complex string.\", she said.\n"
Q# prend également en charge les chaînes interpolées.
Une chaîne interpolée est un littéral de chaîne qui peut contenir n’importe quel nombre d’expressions d’interpolation. Ces expressions peuvent être de types arbitraires.
Lors de la construction, les expressions sont évaluées et leur représentation String
est insérée à l’emplacement correspondant dans le littéral défini. L’interpolation est activée en ajoutant le caractère spécial $
juste avant le guillemet initial, sans aucun espace blanc entre eux.
Par exemple, si res
est une expression qui prend la valeur 1
, la deuxième phrase du littéral String
suivant affiche « The result was 1. » :
$"This is an interpolated string. The result was {res}."
Littéraux Qubit
Il n’existe aucun littéral pour le type Qubit
, car la mémoire quantique est gérée par le runtime. Les valeurs de type Qubit
ne peuvent donc être obtenues que par allocation.
Les valeurs de type Qubit
représentent un identificateur opaque par lequel un bit quantique, ou qubit, peut être adressé. Le seul opérateur pris en charge est la comparaison d’égalité. Pour plus d’informations sur le type de données Qubit
, consultez Qubits.
Littéraux Result
Les littéraux existants pour le type Result
sont Zero
et One
.
Les valeurs de type Result
représentent le résultat d’une mesure quantique binaire.
Zero
indique une projection sur l’espace propre +1, One
indique une projection sur l’espace propre -1.
Littéraux Pauli
Les littéraux existants pour le type Pauli
sont PauliI
, PauliX
, PauliY
et PauliZ
.
Les valeurs de type Pauli
représentent l’une des quatre matrices de Pauli à qubit unique, PauliI
représentant l’identité.
Les valeurs de type Pauli
sont couramment utilisées pour désigner l’axe des rotations et spécifier la base par rapport à laquelle les mesures sont effectuées.
Littéraux Range
Les littéraux de valeur pour le type Range
sont des expressions de la forme start..step..stop
, où start
, step
et end
sont des expressions de type Int
. Si la taille du pas est 1, elle peut être omise. Par exemple, start..stop
est un littéral Range
valide qui équivaut à start..1..stop
.
Les valeurs de type Range
représentent une séquence d’entiers, où le premier élément de la séquence est start
et où les éléments suivants sont obtenus en ajoutant step
au précédent (jusqu’à ce que stop
soit passé).
Les valeurs Range
sont inclusives aux deux extrémités, c’est-à-dire que le dernier élément de la plage est stop
si la différence entre start
et stop
est un multiple de step
.
Une plage peut être vide si, par exemple, step
est positif et que stop < start
.
Voici des exemples de littéraux Range
valides :
-
1..3
est la plage 1, 2, 3. -
2..2..5
est la plage 2, 4. -
2..2..6
est la plage 2, 4, 6. -
6..-2..2
est la plage 6, 4, 2. -
2..-2..1
est la plage 2. -
2..1
est la plage vide.
Pour plus d’informations, consultez Expressions contextuelles.
Littéraux de tableau
Un littéral de tableau est une séquence de zéro ou plusieurs expressions, séparées par des virgules et placées entre crochets [
et ]
; par exemple, [1,2,3]
.
Toutes les expressions doivent avoir un type de base commun, qui est le type d’élément du tableau. Si un tableau vide est spécifié avec []
, une annotation de type peut être nécessaire pour que le compilateur détermine le type approprié de l’expression.
Des tableaux de longueur arbitraire peuvent être créés à l’aide d’une expression de tableau de taille.
Une telle expression est de la forme [expr, size = s]
, où s
peut être n’importe quelle expression de type Int
et expr
est évaluée à une valeur qui sera les éléments du tableau répétés s
fois. Par exemple, [1.2, size = 3]
crée le même tableau que [1.2, 1.2, 1.2]
.
Littéraux de tuple
Un littéral de tuple est une séquence entre parenthèses (
et )
d’une ou plusieurs expressions de n’importe quel type, séparées par des virgules. Le type du tuple inclut les informations sur chaque type d’élément.
Littéral de valeur | Type |
---|---|
("Id", 0, 1.) |
(String, Int, Double) |
(PauliX,(3,1)) |
(Pauli, (Int, Int)) |
Les tuples contenant un seul élément sont considérés comme identiques à l’élément lui-même, à la fois en type et en valeur, ce qui porte le nom d’équivalence de tuple singleton.
Les tuples sont utilisés pour regrouper des valeurs en une seule valeur pour faciliter leur passage. Cela permet à chaque callable de prendre exactement une entrée et de retourner exactement une sortie.
Littéraux pour les types définis par l’utilisateur
Les valeurs d’un type défini par l’utilisateur sont construites en appelant leur constructeur. Un constructeur par défaut est généré automatiquement lors de la déclaration du type. Il est actuellement impossible de définir des constructeurs personnalisés.
Par exemple, si IntPair
a deux éléments de type Int
, IntPair(2, 3)
crée une instance en appelant le constructeur par défaut.
Littéraux d’opération et de fonction
Des opérations et fonctions anonymes peuvent être créées à l’aide d’une expression lambda.