Podmíněné větvení
Podmíněné větvení se vyjadřuje ve formě if
výrazů. Výraz if
se skládá z if
klauzule, za kterou následuje nula nebo více elif
klauzulí a volitelně blok else-block. Každá klauzule se řídí vzorem.
keyword condition {
<statements>
}
kde keyword
je nahrazena if
nebo elif
v uvedeném pořadí, condition
je výraz typu Bool
a <statements>
má být nahrazen nulou nebo více příkazů. Volitelný else
blok -block se skládá z klíčového slova else
následovaného nulou nebo více příkazů uzavřených ve složených závorkách, {
}
.
První blok, pro který condition
se vyhodnotí jako true
spuštěný. Blok else
, pokud je k dispozici, se spustí, pokud se žádná z podmínek nevyhodnotí jako true
. Blok se spustí ve svém vlastním oboru, což znamená, že všechny vazby vytvořené jako součást bloku se po skončení bloku nezobrazí.
Předpokládejme například, že qubits
je hodnota typu Qubit[]
a r1
r2
jsou typu Result
,
if r1 == One {
let q = qubits[0];
H(q);
}
elif r2 == One {
let q = qubits[1];
H(q);
}
else {
H(qubits[2]);
}
Můžete také vyjádřit jednoduché větvení ve formě podmíněného výrazu.
Omezení specifická pro konkrétní cíle
Úzká integrace mezi konstrukcemi toku řízení a kvantovými výpočty představuje výzvu pro aktuální kvantový hardware. Některé kvantové procesory nepodporují větvení na základě výsledků měření. Porovnání hodnot typu Result
proto vždy způsobí chybu kompilace pro Q# programy, které jsou cílem spuštění na tomto hardwaru.
Jiné kvantové procesory podporují specifické druhy větvení na základě výsledků měření. Obecnější if
výrazy podporované v Q# těchto procesorech jsou zkompilovány do vhodných instrukcí, které lze spouštět na těchto procesorech. Uložená omezení jsou, že hodnoty typu Result
lze porovnat pouze jako součást podmínky v rámci if
výrazů v operacích. Bloky podmíněného spuštění navíc nesmí obsahovat žádné return
výrazy ani aktualizovat proměnlivé proměnné deklarované mimo tento blok.