Partilhar via


Sistema de Tipos

Com o foco para o algoritmo quântico sendo mais voltado para o que deve ser alcançado do que para uma representação de problemas em termos de estruturas de dados, ter uma perspetiva mais funcional no design de linguagem é uma escolha natural. Ao mesmo tempo, o sistema de tipos é um mecanismo poderoso que pode ser usado para análise de programas e outras verificações em tempo de compilação que facilitam a formulação de código robusto.

No geral, o sistema de tipo Q# é bastante minimalista, no sentido de que não há uma noção explícita de classes ou interfaces como se pode estar acostumado a partir de linguagens clássicas como C# ou Java. Também adotamos uma abordagem um tanto pragmática fazendo progressos incrementais, de modo que certas construções ainda não estão totalmente integradas ao sistema tipo. Um exemplo disso são os functores, que podem ser usados dentro de expressões, mas ainda não têm uma representação no sistema de tipos. Correspondentemente, eles não podem ser atribuídos ou passados como argumentos, semelhante ao caso de chamadas parametrizadas do tipo. Esperamos fazer progressos incrementais na extensão do sistema de tipo para ser mais completo e equilibrar as necessidades imediatas com planos de longo prazo.

Tipos Disponíveis

Todos os tipos de Q# são imutáveis.

Tipo Descrição
Unit Representa um tipo singleton cujo único valor é ().
Int Representa um inteiro assinado de 64 bits. Os valores variam de -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807.
BigInt Representa valores de inteiros assinados de qualquer tamanho.
Double Representa um número de ponto flutuante de 64 bits de precisão dupla. Os valores variam de -1,79769313486232e308 a 1,79769313486232e308, bem como NaN (não um número).
Bool Representa valores de booleanos. Os valores possíveis são true ou false.
String Representa texto como valores que consistem em uma sequência de unidades de código UTF-16.
Qubit Representa um identificador opaco pelo qual a memória quântica virtual pode ser endereçada. Os valores do tipo Qubit são instanciados por meio de alocação.
Result Representa o resultado de uma medição projetiva nos espaços próprios de um operador quântico com autovalores ±1. Possíveis valores de são Zero ou One.
Pauli Representa uma matriz Pauli de qubit único. Possíveis valores de são PauliI, PauliX, PauliYou PauliZ.
Range Representa uma sequência ordenada de valores de Int igualmente espaçados. Os valores podem representar sequências em ordem crescente ou decrescente.
Matriz Representa valores que cada um contém uma sequência de valores do mesmo tipo.
Tupla Representa valores que cada um contém um número fixo de itens de tipos diferentes. As tuplas que contêm um único elemento são equivalentes ao elemento que contêm.
struct Representa um tipo definido pelo usuário que consiste em itens nomeados de diferentes tipos. Os valores são instanciados ao declarar uma nova instância.
Funcionamento Representa uma não determinística chamável que usa um argumento de entrada (possivelmente com valor de tupla) e retorna uma saída (possivelmente com valor de tupla). Chamadas para operação valores podem ter efeitos colaterais e a saída pode variar para cada chamada, mesmo quando invocada com o mesmo argumento.
Função Representa um determinístico chamável que usa um argumento de entrada (possivelmente com valor de tupla) e retorna uma saída (possivelmente com valor de tupla). Chamadas para funcionar valores não têm efeitos colaterais e a saída será sempre a mesma dada a mesma entrada.