Deklarasi Jenis

Q# mendukung jenis struct yang ditentukan pengguna. jenis struct mirip dengan jenis rekaman di F#; mereka tidak dapat diubah tetapi mendukung konstruksi salinan dan pembaruan.

Jenis struktur

jenis struct hanya dapat berisi item bernama dan tidak mendukung item anonim. Kombinasi item bernama apa pun didukung, meskipun item tidak dapat ditumpuk.

Deklarasi berikut, misalnya, mendefinisikan Complex struct yang memiliki dua item bernama Real dan Imaginary, kedua jenis Double:

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

Anda dapat mengakses item yang terkandung melalui nama mereka atau dengan dekonstruksi (untuk informasi selengkapnya, lihat akses item). Anda juga dapat mengakses tuple semua item di mana bentuk cocok dengan yang ditentukan dalam deklarasi melalui operator unwrap .

jenis struct berguna karena dua alasan. Pertama, selama pustaka dan program yang menggunakan jenis item akses yang ditentukan melalui namanya daripada dengan dekonstruksi, jenis dapat diperluas untuk berisi item tambahan nanti tanpa merusak kode pustaka apa pun. Karena itu, mengakses item melalui dekonstruksi tidak disarankan.

Kedua, Q# memungkinkan Anda menyampaikan niat dan harapan untuk jenis data tertentu karena tidak ada konversi otomatis antara nilai dari dua jenis struct, bahkan jika jenis itemnya identik.

Konstruktor struct

Kompilator secara otomatis menghasilkan konstruktor untuk jenis struct baru saat membaca definisi struct. Untuk struktur Complex dalam contoh sebelumnya, Anda dapat membuat instans dengan

let complexPair = Complex(1.4, 2.1);

Anda juga dapat menentukan instans dengan kata kunci new, misalnya

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

Anda dapat menyalin struct yang ada dengan sintaks ...

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

Saat menyalin, Anda dapat menentukan bidang individual untuk diubah

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