Forum: D Programlama Dili RSS
immutable(char)[] ile immutable char[] Dizgesinin Farkı
canalpay (Moderatör) #1
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: immutable(char)[] ile immutable char[] Dizgesinin Farkı
Bu farkı ilk önce örnek vererek anlatacağım:

import std.stdio;
void main(){
    immutable char[] str = "Bir";
    str[0] = 'X' ; //Derleyici hata verir.
    str= "İki"; //Derleyici hata verir.
}

Bu örnekteki immutable bir tür niteleyicisi. Ve burada immutable char[] türünü niteliyor. Ve bu char[] türündeki değişenin değişmeyeceğini char[] yerine kullanılamayacağını belirtiyor. Ancak biz bunu şu şekilde tanımlar isek:

import std.stdio;
void main(){
    str[0] = 'X' ; //Derleyici hata verir.
    immutable (char)[] str = "Bir";
 
    str= "İki"; //Derleyici hata vermez. Çünkü str değişkeni yeniden inşa edildi.
}

Hata vermeden çalışacaktır. Çünkü burada immutable char[] türünü nitelemiyor. sadece char türünü niteliyor. Ve bu nitelenen türden yeni bir dizi yapıyor. Bu dizinin her bir elemanı immutable özelliğine sahip. Yani elemanlarını değiştirmeye çalışırsanız iki örnektede hata verecektir. Ancak İkinci örnekte str değişkenini elemanını değilde tamamını değiştirirseniz hata vermez.
canalpay (Moderatör) #2
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
String tanımlandığında da son örnekteki gibi kod örneği hata vermiyor:

void main(){
    string str = "Bir";
    str= "İki"; //Derleyici hata vermez.
}

Bu durumda string derslerde gösterildiği gibi immutable char[] değil gerçekte immutable (char)[]' belirtiminin takma adıdır.

Not : immutable char[] ile immutable(char[]) aynıdır.
acehreli (Moderatör) #3
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Açıklama için teşekkürler. :)

Yani immutable (char)[], değişmez karakterlerden oluşan ama kendisi değişebilen dizi.

immutable char[] ise, değişmez bir dizi. Ama burada ek bir şey daha var: D'de tür niteleyicileri derine doğru dallanıyor. O yüzden aslında o da immutable immutable(char)[] ile aynı şey.

Bunu görmek için şöyle bir deney yaptım:

void main()
{
    immutable(char)[] dizgi0;
 
    immutable char[] dizgi1;
    immutable immutable(char)[] dizgi2;   // üsttekiyle aynı
 
    assert(typeid(dizgi0) != typeid(dizgi1));
    assert(typeid(dizgi1) == typeid(dizgi2));
}

typeid türün kimliğidir. İkinci assert'e bakılırsa dizgi1 ve dizgi2'nin türleri aynı...

Ali
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-11-18, 03:57:30 (UTC -08:00)