Type Alias

Kerim Fırat
3 min readAug 3, 2022

Mevcut bir türe yeni bir ad vermek,yani takma ad vermek için kullanılan bazı anahtar kelimeler-komutlar mevcut.
C++11 sürüm öncesi,mevcut bir türe yeni bir ad vermek için typedef anahtar kelimesi kullanılıyordu. Ancak C++11 ile birlikte “using” ismiyle yeni bir anahtar kelime geldi.
Yeni gelen ile birlike iki adet anahtar kelimeye sahibiz ve hangisini tercih edeceğimiz yine bize bağlı. Ancak kesin olan bir şey var ki “using” kullanmak çok daha avantajlıdır.
Ayrıca bazı durumlarda “using” kullanmak dışında başka bir seçeneğimiz olmayacak. Örneğin template programlama ile birlikte alias kullanacak isek,bu durumda “using” tek seçenektir.Bu makalede her iki anahtar kelimeyi örneklerle inceleyeceğiz.

typedef Syntax

Bu anahtar kelime C++11 öncesi var olan ve dolayısıyla alias kavramı için kullanılan ilk anahtar kelimedir.
Bununla ilgili syntax,kullanım ve tanımlama biçimini gösteren aşağıdaki örnekleri inceleyelim. Alias tanımlama biçimi:

typedef tür_tip takma_ad; //tür_tip(int,char,bool,double,…)

Örnek tanımlamalar:

Yukarıdaki tanımlamalarda “int” veri türüne yönelik değişken ve alias tanımlamalarına yer verildi. Şimdi bu tanımlamaların gerçek hayattaki kullanımlarını inceleyelim.
Örnek:

Yukarıda verilen örnekte “my_int” artık “int” yerine kullanılabilir bir alias’dır.
Örnek:

Output:
my_array_size: 10
my_array_size: 10
0 2 4 6 8 10 12 14 16 18

Yukarıdaki örnekte ilk olarak typedef anahtar kelimesiyle int türünden 10 elemanlı bir dizi tanımı yapılmıştır.
Bu tanımlamadan sonra “A” artık int türünden 10 elemanlı bir dizi tanımı için kullanılabilir. Nitekim “A array10” diyerek bir değişken tanımlıyoruz ve “array10” bu noktada 10 elemanlı bir dizidir. Bu bölümü kısa tutarak,asıl olan typedef ve using anahtar kelimesinin birlikte kullanımını inceleyelim. Böylece iki anahtar kelimeyi karşılaştırmak çok daha kolay olacaktır.

using vs typedef

Alias kavramı için her iki anahtar kelimeyi birlikte kullanmadan evvel “using” tanımlama biçimini görelim. using alias tanımlama biçimi:

using takma_ad = tür_tip; //tür_tip(int,char,bool,double,…)

Örnek tanımalamalar:

Şimdi bu tanımlamaların gerçek hayattaki kullanımlarını inceleyelim.
Örnek:

Her iki tanımlamayı ve basit örnekleri gördükten sonra,iki anahtar kelimeyi de birlikte karşılaştırmalı kullanalım.
Örnek:

Aşağıda alias kavramı fonksiyonlar için kullanılıyor.
Örnek:

Output:
x: 25.8,y: 66.7
x: 44.3,y: 26.6

Aşağıdaki bir başka alias örneği verilmiştir:

Peki alias kavramını template programlamada nasıl kullanacağız? Aşağıdaki örnekte typedef ve using anahtar kelimelerinin template programlamada kullanımı gösteriliyor.
Örnek:

Output:
i type is: i,value:434
ptrString type is: NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE,value is: hello world zamazingo
ptrPerson type is: P6Person
Person id:14,Name:Ezelcan

Yukarıda verilen örnekte template kullanımında “typedef” anahtar kelimesi hataya sebep olmaktadır. Çünkü “typedef” anahter kelimesi template programlamaya özelliğine göre oldukça eskidir. Dolayısıyla “typedef” anahtar kelimesini bu şekilde direkt olarak kullanmak mümkün değildir.Ancak bir wrapper(sarmalayıcı) ile kullanmak mümkün olur.
Örnek:

Sonuç

Alias kavramı özellikle uzun tanımlamalar için oldukça kullanışlıdır ve tekrar tekrar uzun satırlar yapmaktan bizi kurtarır. Ve en önemli asıl mesele ise okunabilir kod yazmamızı sağlar.Örneğin en basit haliyle aşağıdaki gibi bir yapıya sahip collection kullandığımızı düşünelim.
Bu tanımlamayı daha küçük parçalara bölerek veya bu haliyle bir alias tanımlayarak daha temiz bir görünüm elde edebiliriz.

Bir başka örnek tanımlama:

Bu makalede alias kavramını barındıran iki adet anahter kelime tanıdık ve kullanımlarını karşılaştırdık. Alias kavramı için iki adet anahtar kelimeye gerek var mı tartışılır. Aynı işi yapan birden fazla komut olması C++ dilini biraz karmaşık hale getirebilir. Yani “using” özellikleri “typedef” komutunda birleştirebilirlerdi.
Ancak dil tasarımcı gözünden baktığımızda bu aslında gereklidir.
Dolayısıyla programcının hangisini seçeceğini ve buna bağlı olarak C++ versiyon karmaşıklığını ortadan kaldırmak için bu yaklaşım gereklidir.
Aksi halde örneğin C++11 sürümünde güncel “typedef” kullanımını öğrenmiş bir junior programcı daha alt-eski sürümde çalıştığında kafa karmaşıklığına yol açacaktı.

KAYNAKLAR:
https://en.cppreference.com/w/cpp/language/type_alias
https://en.cppreference.com/w/cpp/language/typedef
https://en.cppreference.com/w/cpp/keyword/using

-end of

--

--

Kerim Fırat

Senior C++,Android Platform(AOSP,AAOS) Developer,Performance Architect,Open Source Contributor | Turkey Java User Group Vice Chairman | Author