D Programlama - Birlikler
Bir unionD'de bulunan ve farklı veri türlerini aynı bellek konumunda saklamanıza olanak tanıyan özel bir veri türüdür. Birçok üyesi olan bir birlik tanımlayabilirsiniz, ancak herhangi bir zamanda yalnızca bir üye bir değer içerebilir. Birlikler, aynı bellek konumunu birden çok amaç için kullanmanın verimli bir yolunu sağlar.
D'de Bir Birlik Tanımlamak
Bir birleşimi tanımlamak için, yapıyı tanımlarken yaptığınız gibi sendika ifadesini çok benzer şekilde kullanmalısınız. Union bildirimi, programınız için birden fazla üye içeren yeni bir veri türünü tanımlar. Union bildiriminin biçimi aşağıdaki gibidir -
union [union tag] {
member definition;
member definition;
...
member definition;
} [one or more union variables];
union tagisteğe bağlıdır ve her üye tanımı, int i gibi normal bir değişken tanımıdır; veya float f; veya başka herhangi bir geçerli değişken tanımı. Birleşimin tanımının sonunda, son noktalı virgülden önce, bir veya daha fazla birleşim değişkeni belirtebilirsiniz, ancak bu isteğe bağlıdır. Üç üyesi olan Data adlı bir birleşim türü tanımlamanın yolu şöyledir:i, f, ve str -
union Data {
int i;
float f;
char str[20];
} data;
Değişken Datatür, bir tamsayı, kayan nokta sayısı veya bir karakter dizesi saklayabilir. Bu, birden çok veri türünü depolamak için tek bir değişkenin (aynı bellek konumu) kullanılabileceği anlamına gelir. İhtiyaçlarınıza bağlı olarak bir birleşim içindeki herhangi bir yerleşik veya kullanıcı tanımlı veri türünü kullanabilirsiniz.
Bir sendikanın işgal ettiği hafıza, sendikanın en büyük üyesini tutacak kadar büyük olacaktır. Örneğin, yukarıdaki örnekte, Veri türü 20 bayt bellek alanı kaplayacaktır çünkü bu, karakter dizesi tarafından kullanılabilecek maksimum boşluktur. Aşağıdaki örnek, yukarıdaki birleşim tarafından kullanılan toplam bellek boyutunu gösterir -
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;
}
Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -
Memory size occupied by data : 20
Sendika Üyelerine Erişim
Bir sendikanın herhangi bir üyesine erişmek için, member access operator (.). Üye erişim operatörü, sendika değişken adı ile erişmek istediğimiz sendika üyesi arasındaki bir süre olarak kodlanır. Birleşim türü değişkenlerini tanımlamak için birleşim anahtar sözcüğünü kullanırsınız.
Misal
Aşağıdaki örnek, birleşimin kullanımını açıklamaktadır -
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);
}
Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -
size of : 16
data.i : 1917853764
data.f : 4.12236e+30
data.str : D Programming
Burada şu değerleri görebilirsiniz i ve f sendika üyeleri bozuldu çünkü değişkene atanan son değer bellek konumunu işgal etti ve bu, değerinin str üye çok iyi baskı alıyor.
Şimdi aynı örneğe bir kez daha bakalım, burada birleşmenin temel amacı her seferinde bir değişkeni kullanacağız -
Değiştirilmiş Örnek
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);
}
Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -
size of : 16
data.i : 10
data.f : 220.5
data.str : D Programming
Burada tüm üyeler çok iyi baskı alıyor çünkü aynı anda bir üye kullanılıyor.