条件分岐

条件分岐は、 if 式の形式で表されます。 if式は、if句の後に 0 個以上のelif句と、必要に応じて else-block で構成されます。 各句は、次のパターンに従います

keyword condition {
    <statements>
}

ここで、keyword はそれぞれ if または elif に置き換えられ、condition は型 Bool の式であり、<statements> は 0 個以上のステートメントに置き換えられます。 省略可能な else ブロックは、キーワード else の後に、中かっこで囲まれた 0 個以上のステートメント ( { }) で構成されます。

conditiontrue に評価される最初のブロックが実行されます。 どの条件も true に評価されない場合は、else ブロック (存在する場合) が実行されます。 ブロックは独自のスコープで実行されます。つまり、ブロックの一部として行われたバインドは、ブロックの終了後は表示されません。

たとえば、qubits が型 Qubit[] の値であり、r1r2 が型 Result の値であるとします。

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

条件式の形式で単純な分岐を表すこともできます。

ターゲット固有の制限

制御フロー コンストラクトと量子計算の間の緊密な統合によって、現在の量子ハードウェアの課題が提起されます。 特定の量子プロセッサは、測定結果に基づく分岐をサポートしていません。 そのため、このようなハードウェアでの実行を目的とした Q# プログラムの場合、型 Result の値の比較は常にコンパイル エラーになります。

他の量子プロセッサは、測定結果に基づく特定の種類の分岐をサポートしています。 Q#でサポートされるより一般的なif式は、そのようなプロセッサで実行できる適切な命令にコンパイルされます。 適用される制限は、 Result 型の値は、操作の式内の条件の一部としてのみ比較 if 。 さらに、条件付き実行ブロックには、 return 式を含めたり、そのブロックの外部で宣言されている変更可能な変数を更新したりすることはできません。