Branchement conditionnel
La branche conditionnelle est exprimée sous la forme d’expressions if
. Une if
expression se compose d’une if
clause, suivie de zéro ou plusieurs elif
clauses et éventuellement d’un autre bloc. Chaque clause suit le modèle
keyword condition {
<statements>
}
où keyword
est remplacé par if
ou elif
respectivement, condition
est une expression de type Bool
, et <statements>
doit être remplacé par zéro, une ou plusieurs instructions. Le bloc facultatif else
se compose du mot clé else
suivi de zéro ou plusieurs instructions placées entre accolades. {
}
Le premier bloc pour lequel la condition
a la valeur true
est exécuté. Le bloc else
, s’il est présent, est exécuté si aucune des conditions n’a la valeur true
. Le bloc est exécuté dans sa propre étendue, ce qui signifie que toutes les liaisons effectuées dans le cadre du bloc ne sont pas visibles après la fin du bloc.
Par exemple, supposons que qubits
est une valeur de type Qubit[]
, et r1
et r2
sont de type Result
,
if r1 == One {
let q = qubits[0];
H(q);
}
elif r2 == One {
let q = qubits[1];
H(q);
}
else {
H(qubits[2]);
}
Vous pouvez également exprimer une branche simple sous la forme d’une expression conditionnelle.
Restrictions propres à la cible
L’intégration étroite entre les constructions de flux de contrôle et les calculs quantiques constitue un défi pour le matériel quantique actuel. Certains processeurs quantiques ne prennent pas en charge la création de branche à partir des résultats de mesure. Par conséquent, la comparaison des valeurs de type Result
entraîne toujours une erreur de compilation pour les programmes Q# ciblés pour s’exécuter sur ce matériel.
D’autres processeurs quantiques prennent en charge des types spécifiques de création de branche à partir des résultats de mesure. Les expressions plus générales if
prises en Q# charge sont compilées dans des instructions appropriées qui peuvent être exécutées sur de tels processeurs. Les restrictions imposées sont que les valeurs de type Result
peuvent uniquement être comparées dans le cadre de la condition dans les if
expressions dans les opérations. En outre, les blocs d’exécution conditionnelle ne peuvent pas contenir d’expressions return
ou mettre à jour des variables mutables déclarées en dehors de ce bloc.