由於量子演算法的重點更著重於應該達成的目標,而不是在數據結構方面的問題表示,因此對語言設計採取更功能性的觀點是一種自然的選擇。 同時,類型系統是一種功能強大的機制,可用於程式分析和其他編譯時間檢查,以利制定健全的程序代碼。
整體而言,Q# 類型系統相當極簡,也就是說,類別或介面沒有明確的概念,因為從 C# 或 Java 等傳統語言使用類別或介面。 我們也採取一些務實的方法進行漸進式進展,使某些建構尚未完全整合到類型系統。 其中一個範例是 functors,可在表達式內使用,但類型系統中還沒有表示法。 相對地,它們目前無法指派或傳遞為自變數,就像類型參數化可呼叫者的情況一樣。 我們希望在擴充類型系統方面取得漸進式進展,並將立即需求與長期計劃平衡。
可用的類型
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 |
表示具有 eigenvalues ±1 之量子運算符的 eigenspaces 投影測量結果。
值 Zero 或 One。 |
Pauli |
表示單一量子位Pauli矩陣。
可能的 值為 PauliI、PauliX、PauliY或 PauliZ。 |
Range |
表示相同間距 Int 值的已排序序列。
值 可能會以遞增或遞減順序表示序列。 |
| 陣列 | 表示 值,每個值都包含相同類型的值序列。 |
| 元 | 表示 值,每個值都包含不同類型的固定項目數。 包含單一元素的 Tuple 相當於其所包含的專案。 |
struct |
表示 用戶定義型別, 由不同類型的具名專案所組成。 宣告新實例時,值 具現化。 |
| 行動 | 表示不具決定性的 可呼叫,其接受一個 (可能為 Tuple 值) 輸入自變數,並傳回一個 (可能為 Tuple 值) 輸出。 對作業的呼叫 值 可能會有副作用,而且即使使用相同的自變數叫用,輸出也可能因每個呼叫而有所不同。 |
| 功能 | 表示具決定性 可呼叫,接受一個(可能為 Tuple 值)輸入自變數,並傳回一個(可能為 Tuple 值)輸出。 函式 值的呼叫 沒有副作用,而且在輸入相同的情況下,輸出一律會相同。 |