Compartilhar via


Declarações de tipo

Q# dá suporte a tipos de struct definidos pelo usuário. tipos são semelhantes aos tipos de registro em F#; eles são imutáveis, mas dão suporte a um constructo de cópia e atualização .

Tipos de struct

struct tipos só podem conter itens nomeados e não dão suporte a itens anônimos. Há suporte para qualquer combinação de itens nomeados, embora os itens não possam ser aninhados.

A declaração a seguir, por exemplo, define um struct Complex que tem dois itens nomeados Real e Imaginary, ambos do tipo Double:

struct Complex {
    Real : Double,
    Imaginary : Double,
}

Você pode acessar os itens contidos por meio do nome ou de desconstrução (para obter mais informações, consulte de acesso ao item). Você também pode acessar uma tupla de todos os itens em que a forma corresponde à definida na declaração por meio do operador de unwrap .

struct tipos são úteis por dois motivos. Primeiro, desde que as bibliotecas e programas que usam os tipos definidos acessem itens por meio de seu nome e não por desconstrução, o tipo pode ser estendido para conter itens adicionais posteriormente sem quebrar nenhum código de biblioteca. Por isso, o acesso a itens por meio da desconstrução geralmente é desencorajado.

Em segundo lugar, Q# permite transmitir a intenção e as expectativas para um tipo de dados específico, pois não há conversão automática entre valores de dois tipos de struct, mesmo que seus tipos de item sejam idênticos.

Construtores de struct

Construtores para novos tipos de struct são gerados automaticamente pelo compilador quando ele lê uma definição de struct. Para o struct Complex no exemplo anterior, você pode criar uma instância com

let complexPair = Complex(1.4, 2.1);

As instâncias também podem ser definidas pelo usuário com a palavra-chave new, por exemplo

let complexPair = new Complex { Real = 1.4, Imaginary = 2.1 };

Você também pode copiar um struct existente com a sintaxe ...

let copyPair = new Complex { ...complexPair };

Ao copiar, você pode especificar campos individuais a serem alterados

let updatedPair = new Complex { ...complexPair, Real = 3.5 };