Forum: D Programlama Dili RSS
immutable(char)[] ile immutable char[] Dizgesinin Farkı
canalpay (Moderator) #1
User title: Can Alpay Çiftçi
Member since Jul 2009 · 1032 posts · Location: İzmir
Group memberships: Genel Moderatörler, Üyeler
Show profile · Link to this post
Subject: 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 (Moderator) #2
User title: Can Alpay Çiftçi
Member since Jul 2009 · 1032 posts · Location: İzmir
Group memberships: Genel Moderatörler, Üyeler
Show profile · Link to this post
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 (Moderator) #3
User title: Ali Çehreli
Member since Jun 2009 · 1981 posts
Group memberships: Genel Moderatörler, Üyeler
Show profile · Link to this post
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
Close Smaller – Larger + Reply to this post:
Verification code: VeriCode Please note the verification code from the picture into the text field next to it.
Smileys: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Special characters:
Not logged in. · Lost password · Register
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Current time: 2012-02-05, 11:18:31 (UTC -08:00)