条件分岐
条件分岐は式の if
形式で表されます。 式は if
句で if
構成され、その後に 0 個以上 elif
の句が続き、必要に応じて else-block が続きます。 各句は、次のパターンに従います
keyword condition {
<statements>
}
ここで、keyword
はそれぞれ if
または elif
に置き換えられ、condition
は型 Bool
の式であり、<statements>
は 0 個以上のステートメントに置き換えられます。 省略可能な else
ブロックは、キーワード else
と、それに続く中かっこ ({
}
) で囲まれた 0 個以上のステートメントで構成されます。
condition
が true
に評価される最初のブロックが実行されます。 どの条件も true
に評価されない場合は、else
ブロック (存在する場合) が実行されます。 ブロックは独自のスコープで実行されます。つまり、ブロックの一部として行われたバインドは、ブロックの終了後は表示されません。
たとえば、qubits
が型 Qubit[]
の値であり、r1
と r2
が型 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
めたり、そのブロックの外部で宣言されている変更可能な変数を更新したりすることはできません。
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示