Compartilhar via


Sistema de tipo

Com o foco para o algoritmo quântico sendo mais para o que deve ser alcançado em vez de em uma representação de problema em termos de estruturas de dados, tomar uma perspectiva mais funcional sobre o design de linguagem é uma escolha natural. Ao mesmo tempo, o sistema de tipos é um mecanismo poderoso que pode ser usado para análise de programa e outras verificações de 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 poderia usar em linguagens clássicas como C# ou Java. Também tomamos uma abordagem um tanto pragmática fazendo progressos incrementais, de modo que certas construções ainda não estejam totalmente integradas ao sistema de tipos. Um exemplo disso são os functors, que podem ser usados em expressões, mas ainda não têm uma representação no sistema de tipos. Correspondentemente, no momento, eles não podem ser atribuídos ou passados como argumentos, como é o caso de callables parametrizados do tipo. Esperamos fazer progressos incrementais na extensão do sistema de tipos para ser mais completo e equilibrar as necessidades imediatas com planos de longo prazo.

Tipos disponíveis

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

Tipo Descrição
Unit Representa um tipo singleton cujo único valor é ().
Int Representa um inteiro com sinal de 64 bits. Valores intervalo de -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807.
BigInt Representa valores inteiros com sinal de qualquer tamanho.
Double Representa um número de ponto flutuante de precisão dupla de 64 bits. Valores intervalo de -1,79769313486232e308 a 1,79769313486232e308, bem como NaN (não um número).
Bool Representa valores boolianos . Os possíveis valores são true ou false.
String Representa o 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 tratada. Valores do tipo Qubit são instanciados por meio da alocação.
Result Representa o resultado de uma medida projetiva nos eigenspaces de um operador quântico com eigenvalues ±1. Os possíveis valores de são Zero ou One.
Pauli Representa uma matriz Pauli de qubit único. Os possíveis valores de são PauliI, PauliX, PauliYou PauliZ.
Range Representa uma sequência ordenada de valores de Int igualmente espaçados. 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 diferentes tipos. Tuplas que contêm um único elemento são equivalentes ao elemento que contêm.
struct Representa um tipo definido pelo usuário consistindo em itens nomeados de diferentes tipos. valores são instanciados ao declarar uma nova instância.
Operação Representa um não determinístico que usa um argumento de entrada (possivelmente com valor de tupla) e retorna uma saída (possivelmente com valor de tupla). As chamadas para a 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 que usa um argumento de entrada (possivelmente com valor de tupla) e retorna uma saída (possivelmente com valor de tupla). As chamadas para funcionar valores não têm efeitos colaterais e a saída sempre será a mesma dada a mesma entrada.