Diramazione condizionale

La diramazione condizionale è espressa sotto forma di if espressioni. Un'espressione if è costituita da una if clausola, seguita da zero o più elif clausole e facoltativamente da un blocco else. Ogni clausola segue il modello

keyword condition {
    <statements>
}

dove keyword viene sostituito rispettivamente con if o elif , condition è un'espressione di tipo Boole <statements> deve essere sostituita con zero o più istruzioni. Il blocco facoltativo elseè costituito dalla parola chiave else seguita da zero o più istruzioni racchiuse tra parentesi graffe, { }.

Primo blocco per il quale l'oggetto condition restituisce true verrà eseguito. Il else blocco, se presente, viene eseguito se nessuna delle condizioni restituisce true. Il blocco viene eseguito nel proprio ambito, ovvero tutte le associazioni effettuate come parte del blocco non sono visibili dopo la fine del blocco.

Si supponga, ad esempio, che qubits sia il valore di tipo Qubit[] e che r1 e r2 siano di tipo Result,

if r1 == One {
    let q = qubits[0];
    H(q);
} 
elif r2 == One {
    let q = qubits[1];
    H(q);
} 
else {
    H(qubits[2]);
}

È anche possibile esprimere la diramazione semplice sotto forma di espressione condizionale.

Restrizioni specifiche della destinazione

La stretta integrazione tra costrutti del flusso di controllo e calcoli quantistici rappresenta una sfida per l'hardware quantistico corrente. Alcuni processori quantistici non supportano la diramazione basata sui risultati delle misurazioni. Di conseguenza, il confronto dei valori di tipo Result genererà sempre un errore di compilazione per Q# i programmi destinati all'esecuzione su tale hardware.

Altri processori quantistici supportano tipi specifici di diramazione basata sui risultati delle misurazioni. Le espressioni più generali if supportate in Q# sono compilate in istruzioni appropriate che possono essere eseguite su tali processori. Le restrizioni imposte sono che i valori di tipo Result possono essere confrontati solo come parte della condizione all'interno if delle espressioni nelle operazioni. Inoltre, i blocchi di esecuzione condizionale non possono contenere espressioni return o aggiornare variabili modificabili dichiarate all'esterno di tale blocco.