Dichiarazioni di tipi

Q# supporta i tipi definiti dall'utente. I tipi definiti dall'utente sono simili ai tipi di record in F#; non sono modificabili, ma supportano un costrutto di copia e aggiornamento.

Tipi definiti dall'utente

I tipi definiti dall'utente possono contenere elementi denominati e anonimi. La dichiarazione seguente all'interno di uno spazio dei nomi, ad esempio, definisce un tipo Complex con due elementi denominati, Real e Imaginary, entrambi di tipo Double:

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

È supportata qualsiasi combinazione di elementi denominati e anonimi e anche gli elementi interni possono essere denominati. Ad esempio, il tipo Nested, definito come

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

contiene due elementi anonimi di tipo Double e String rispettivamente e un elemento denominato ItemName di tipo Int.

È possibile accedere agli elementi contenuti tramite il nome o la decostruzione. Per altre informazioni, vedere Accesso agli elementi. È anche possibile accedere a una tupla di tutti gli elementi in cui la forma corrisponde a quella definita nella dichiarazione tramite l'operatore unwrap.

I tipi definiti dall'utente sono utili per due motivi. In primo luogo, purché le librerie e i programmi che usano i tipi definiti accedono agli elementi tramite il nome anziché tramite decostruzione, il tipo può essere esteso per contenere elementi aggiuntivi in un secondo momento senza interrompere il codice della libreria. Per questo, l'accesso agli elementi tramite decostruzione è in genere sconsigliato.

Inoltre, Q# consente di comunicare la finalità e le aspettative per un tipo di dati specifico poiché non esiste alcuna conversione automatica tra i valori di due tipi definiti dall'utente, anche se i relativi tipi di elemento sono identici.

Costruttori definiti dall'utente

I costruttori per i tipi definiti dall'utente vengono generati automaticamente dal compilatore. Attualmente non è possibile definire un costruttore personalizzato, anche se questa opzione potrebbe essere aggiunta al linguaggio a breve.