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.) Každá klauzule se řídí vzorem.

keyword condition {
    <statements>
}

kde keyword se nahradí ifconditionelif nebo , je výraz typu Boola <statements> má být nahrazený nulou nebo více příkazy. Volitelný elseblok -se skládá z klíčového slova else , za kterým následuje nula nebo více příkazů uzavřených ve složených závorkách {}.

První blok, pro který se condition vyhodnotí jako true , se spustí. Blok else , pokud existuje, se spustí, pokud se žádná z podmínek nevyhodnotí jako true. Blok se provádí ve vlastním oboru, což znamená, že žádné vazby vytvořené v rámci bloku nejsou po skončení bloku viditelné.

Předpokládejme například, že qubits je hodnota typu Qubit[] a r1 a 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 cíl

Úzká integrace mezi konstrukcemi řízení a tokem a kvantovými výpočty představuje pro současný kvantový hardware výzvu. 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 určené pro 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 nástroji Q# jsou zkompilovány do vhodných instrukcí, které lze spustit na těchto procesorech. Vynucená omezení jsou, že hodnoty typu Result lze porovnávat 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 nemohou obsahovat žádné return výrazy ani aktualizovat měnitelné proměnné, které jsou deklarovány mimo daný blok.