Partager via


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>
}

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 elsese 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.