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 Bool
e <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.