Udostępnij za pośrednictwem


System typów

Skupienie się na algorytmie kwantowym jest bardziej ukierunkowane na to, co należy osiągnąć, a nie na reprezentacji problemu w zakresie struktur danych, biorąc bardziej funkcjonalną perspektywę projektowania języka jest naturalnym wyborem. Jednocześnie system typów jest zaawansowanym mechanizmem, którego można użyć do analizy programu i innych testów czasu kompilacji, które ułatwiają tworzenie niezawodnego kodu.

W sumie Q# system typów jest dość minimalistyczny, w tym sensie, że nie ma jawnego pojęcia klas lub interfejsów, ponieważ można ich używać z języków klasycznych, takich jak C# lub Java. Podejmujemy również nieco pragmatyczne podejście do przyrostowego postępu, tak aby niektóre konstrukcje nie zostały jeszcze w pełni zintegrowane z systemem typów. Przykładem są funktory, które mogą być używane w wyrażeniach, ale nie mają jeszcze reprezentacji w systemie typów. W związku z tym nie można ich obecnie przypisać ani przekazać jako argumenty, podobnie jak w przypadku typu parametryzowanych obiektów wywołujących. Spodziewamy się, że przyrostowy postęp w rozszerzeniu systemu typów będzie bardziej kompletny i zrównoważymy natychmiastowe potrzeby z długoterminowymi planami.

Dostępne typy

Wszystkie typy w programie Q# są niezmienne.

Typ Opis
Unit Reprezentuje pojedynczy typ, którego jedyną wartością jest ().
Int Reprezentuje 64-bitową liczbę całkowitą ze znakiem. Wartości wahają się od -9 223 372 036 854 775 808 do 9 223 372 036 854 775 807.
BigInt Reprezentuje podpisane wartości całkowite dowolnego rozmiaru.
Double Przedstawia liczbę zmiennoprzecinkową o podwójnej precyzji 64-bitowej. Wartości wahają się od -1,79769313486232e308 do 1,79769313486232e308, a także NaN (a nie liczba).
Bool Reprezentuje wartości logiczne. Możliwe wartości to true lub false.
String Reprezentuje tekst jako wartości składające się z sekwencji jednostek kodu UTF-16.
Qubit Reprezentuje nieprzezroczysty identyfikator, za pomocą którego można rozwiązać problem z wirtualną pamięcią kwantową. Wartości typu Qubit są tworzone za pośrednictwem alokacji.
Result Reprezentuje wynik miary projektowej w przestrzeniach generacyjnych operatora kwantowego z wartościami eigenvalue ±1. Możliwe wartości to Zero lub One.
Pauli Reprezentuje macierz Pauli z jednym kubitem. Możliwe wartości to PauliI, PauliX, PauliYlub PauliZ.
Range Reprezentuje uporządkowaną sekwencję równomiernie rozmieszczonych Int wartości. Wartości mogą reprezentować sekwencje w kolejności rosnącej lub malejącej.
Tablica Reprezentuje wartości , z których każda zawiera sekwencję wartości tego samego typu.
Krotki Reprezentuje wartości , z których każda zawiera stałą liczbę elementów różnych typów. Krotki zawierające pojedynczy element są równoważne elementowi, który zawierają.
Typ zdefiniowany przez użytkownika Reprezentuje typ zdefiniowany przez użytkownika składający się z nazwanych i anonimowych elementów różnych typów. Wartości są tworzone przez wywołanie konstruktora.
Operacja Reprezentuje niedeterministyczne wywołanie , które przyjmuje jeden (prawdopodobnie wartość krotki) argument wejściowy zwraca jeden (ewentualnie wartość krotki) danych wyjściowych. Wywołania wartości operacji mogą mieć skutki uboczne, a dane wyjściowe mogą się różnić w przypadku każdego wywołania nawet w przypadku wywołania z tym samym argumentem.
Funkcja Reprezentuje deterministyczną metodę wywołującą , która przyjmuje jeden (prawdopodobnie wartość krotki) argument wejściowy zwraca jeden (prawdopodobnie wartość krotki) danych wyjściowych. Wywołania do wartości funkcji nie mają skutków ubocznych, a dane wyjściowe będą zawsze takie same, biorąc pod uwagę te same dane wejściowe.