型システム

量子アルゴリズムの焦点が、データ構造の観点から問題表現ではなく、実現すべき内容に向いているため、言語設計をより機能的な視点でとらえるのが自然な選択です。 同時に、型システムは、プログラム分析や、堅牢なコードの作成を容易にするその他のコンパイル時チェックに利用できる強力なメカニズムです。

一般的に、Q# 型のシステムは、C# や Java などの従来の言語で慣れているようなクラスやインターフェイスの明示的な概念は存在しない、という意味で、最小限に抑えられます。 また、特定のコンストラクトが型システムにまだ完全に統合されないように、段階的に進行するやや現実的なアプローチを取ることもあります。 例としては、式の中では使用できるものの、型システムにまだ表示されないファンクタがあります。 それに応じて、型パラメーター化された callable の場合と同様に、現時点では引数として割り当てたり、渡したりすることはできません。 型システムを拡張してより完成度が高くなるように段階的に進め、長期的な計画と即時のニーズのバランスを取る予定です。

使用可能な種類

Q# のすべての型は変更できません

説明
Unit 値が () のみであるシングルトン型を表します。
Int 64 ビット符号付き整数を表します。 の範囲は -9,223,372,036,854,775,808 から 9,223,372,036,854,775,807 です。
BigInt 任意のサイズの符号付き整数を表します。
Double 倍精度 (64 ビット) 浮動小数点数を表します。 の範囲は、-1.79769313486232e308 から 1.79769313486232e308、および NaN (非数) です。
Bool ブールを表します。 指定できる値は true または false です。
String テキストを、一連の UTF-16 コード単位で構成されるとして表します。
Qubit 仮想量子メモリをアドレス指定できる不透明な識別子を表します。 Qubit 型のは、割り当てによってインスタンス化されます。
Result 固有値 ±1 を持つ量子演算子の固有空間に対する射影測定の結果を表します。 指定できるZero または One です。
Pauli 単一量子ビットのパウリ行列を表します。 指定できるPauliIPauliXPauliY、または PauliZ です。
Range 順序付けられた一連の等間隔の Int 値を表します。 は、昇順または降順のシーケンスを表すことができます。
Array それぞれが同じ型の一連の値を含むを表します。
タプル それぞれが型が異なる固定数の項目を含むを表します。 1 つの要素を含むタプルは、それに含まれている要素と同等です。
ユーザー定義型 型が異なる名前付き項目と匿名項目で構成されるユーザー定義型を表します。 は、コンストラクターを呼び出すことによってインスタンス化されます。
Operation 1 つ (おそらくタプル値) の入力引数を受け取り、1 つ (おそらくタプル値) の出力を返す非決定的な callable を表します。 操作を呼び出すと、副作用が生じる可能性があり、同じ引数で呼び出された場合でも、呼び出しごとに出力が異なる可能性があります。
関数 1 つ (おそらくタプル値) の入力引数を受け取り、1 つ (おそらくタプル値) の出力を返す決定的な callable を表します。 関数への呼び出しには副作用がなく、入力が同じであれば出力は常に同じになります。