Declarações de Tipo

Q# suporta tipos definidos pelo utilizador. Os tipos definidos pelo utilizador são semelhantes aos tipos de registo em F#; são imutáveis, mas suportam uma construção de cópia e atualização .

Tipos definidos pelo utilizador

Os tipos definidos pelo utilizador podem conter itens nomeados e anónimos. A seguinte declaração num espaço de nomes, por exemplo, define um tipo Complex que tem dois itens nomeados Real e Imaginary, ambos do tipo Double:

    newtype Complex = (Real: Double, Imaginary : Double);

Qualquer combinação de itens nomeados e sem nome é suportada e os itens internos também podem ser nomeados. Por exemplo, o tipo Nested, definido como

newtype Nested = (Double, (ItemName : Int, String)); 

contém dois itens anónimos do tipo Double e String , respetivamente, e um item ItemName com nome do tipo Int.

Pode aceder aos itens contidos através do respetivo nome ou por desconstrução (para obter mais informações, consulte acesso ao item). Também pode aceder a uma cadeia de identificação de todos os itens em que a forma corresponde à que está definida na declaração através do operador de desembrulhar.

Os tipos definidos pelo utilizador são úteis por dois motivos. Em primeiro lugar, desde que as bibliotecas e programas que utilizam os tipos definidos acedam aos itens através do respetivo nome e não por desconstrução, o tipo pode ser expandido para conter itens adicionais mais tarde sem quebrar qualquer código de biblioteca. Por este motivo, o acesso aos itens através da desconstrução é geralmente desencorajado.

Em segundo lugar, permite-lhe transmitir a intenção e as expectativas de um tipo de dados específico, Q# uma vez que não existe uma conversão automática entre valores de dois tipos definidos pelo utilizador, mesmo que os tipos de itens sejam idênticos.

Construtores definidos pelo utilizador

Os construtores para tipos definidos pelo utilizador são gerados automaticamente pelo compilador. Atualmente, não é possível definir um construtor personalizado, embora este possa ser uma adição ao idioma no futuro.