Pemrograman D - Serikat pekerja
SEBUAH unionadalah tipe data khusus yang tersedia di D yang memungkinkan Anda menyimpan tipe data berbeda di lokasi memori yang sama. Anda dapat menentukan serikat dengan banyak anggota, tetapi hanya satu anggota yang dapat berisi nilai pada waktu tertentu. Serikat pekerja menyediakan cara yang efisien untuk menggunakan lokasi memori yang sama untuk berbagai tujuan.
Mendefinisikan Serikat di D
Untuk mendefinisikan serikat, Anda harus menggunakan pernyataan serikat dengan cara yang sangat mirip seperti yang Anda lakukan saat mendefinisikan struktur. Pernyataan serikat mendefinisikan tipe data baru, dengan lebih dari satu anggota untuk program Anda. Format pernyataan serikat adalah sebagai berikut -
union [union tag] {
member definition;
member definition;
...
member definition;
} [one or more union variables];
Itu union tagbersifat opsional dan setiap definisi anggota adalah definisi variabel normal, seperti int i; atau float f; atau definisi variabel valid lainnya. Di akhir definisi gabungan, sebelum titik koma terakhir, Anda dapat menentukan satu atau lebih variabel gabungan tetapi ini opsional. Berikut adalah cara Anda mendefinisikan tipe gabungan bernama Data yang memiliki tiga anggotai, f, dan str -
union Data {
int i;
float f;
char str[20];
} data;
Variabel dari Datatype dapat menyimpan integer, bilangan floating-point, atau string karakter. Ini berarti satu variabel (lokasi memori yang sama) dapat digunakan untuk menyimpan berbagai jenis data. Anda dapat menggunakan tipe data bawaan atau yang ditentukan pengguna di dalam serikat berdasarkan kebutuhan Anda.
Memori yang ditempati oleh serikat pekerja akan cukup besar untuk menampung anggota serikat terbesar. Sebagai contoh, pada contoh di atas, tipe Data akan menempati ruang memori 20 byte karena ini adalah ruang maksimum yang dapat ditempati oleh karakter string. Contoh berikut menampilkan ukuran memori total yang ditempati oleh gabungan di atas -
import std.stdio;
union Data {
int i;
float f;
char str[20];
};
int main( ) {
Data data;
writeln( "Memory size occupied by data : ", data.sizeof);
return 0;
}
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
Memory size occupied by data : 20
Mengakses Anggota Serikat
Untuk mengakses anggota serikat mana pun, kami menggunakan member access operator (.). Operator akses anggota dikodekan sebagai periode antara nama variabel serikat dan anggota serikat yang ingin kita akses. Anda akan menggunakan kata kunci union untuk mendefinisikan variabel tipe union.
Contoh
Contoh berikut menjelaskan penggunaan union -
import std.stdio;
union Data {
int i;
float f;
char str[13];
};
void main( ) {
Data data;
data.i = 10;
data.f = 220.5;
data.str = "D Programming".dup;
writeln( "size of : ", data.sizeof);
writeln( "data.i : ", data.i);
writeln( "data.f : ", data.f);
writeln( "data.str : ", data.str);
}
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
size of : 16
data.i : 1917853764
data.f : 4.12236e+30
data.str : D Programming
Di sini, Anda dapat melihat nilai dari i dan f anggota serikat rusak karena nilai akhir yang ditetapkan ke variabel telah menempati lokasi memori dan ini adalah alasan mengapa nilai str anggota dicetak dengan sangat baik.
Sekarang mari kita lihat contoh yang sama sekali lagi di mana kita akan menggunakan satu variabel pada satu waktu yang merupakan tujuan utama memiliki penyatuan -
Contoh Modifikasi
import std.stdio;
union Data {
int i;
float f;
char str[13];
};
void main( ) {
Data data;
writeln( "size of : ", data.sizeof);
data.i = 10;
writeln( "data.i : ", data.i);
data.f = 220.5;
writeln( "data.f : ", data.f);
data.str = "D Programming".dup;
writeln( "data.str : ", data.str);
}
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
size of : 16
data.i : 10
data.f : 220.5
data.str : D Programming
Di sini, semua anggota dicetak dengan sangat baik karena satu anggota digunakan pada satu waktu.