Diramazione condizionale

Il ramo condizionale è espresso 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 rispettivamente, 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 qualsiasi associazione effettuata come parte del blocco non è visibile 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 una semplice diramazione sotto forma di un'espressione condizionale.

Restrizioni specifiche della destinazione

L'integrazione stretta tra costrutti di 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 per i valori di tipo Result genera sempre un errore di compilazione per Q# i programmi destinati all'esecuzione in tale hardware.

Altri processori quantistici supportano tipi specifici di diramazione basata sui risultati delle misurazioni. Le espressioni più generali if supportate in sono compilate in Q# 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 di espressioni nelle operazioni. Inoltre, i blocchi di esecuzione condizionale non possono contenere espressioni return o variabili modificabili dichiarate all'esterno del blocco.