Değişik sırada yanıtlıyorum.
Alıntı (canalpay):
> Ayrıca şu satır çok dikkatimi çekti :
> return içTablo ? mevcut(*içTablo, anahtar1) : null;
> ```
>
> içTablo auto olarak belirtmişsiniz ama içTablonun türü bool.
Aslında bool değil. :D Orada içTablo'nun türü, veri göstergesidir.
Eşleme tablolarını tanıttığım derste tabii ki göstergelere bulaşmayacaktım. O yüzden in'in dönüş türünün gerçeğini sonraya bırakmıştım.
in'in veri göstergesi döndürmesinin hızla ilgisi var. Eğer bool döndürseydi, bazı durumlarda gereksizce iki kere aranmış olurdu:
if (anahtar in tablo) { // <-- birinci arama
writeln(tablo[anahtar]); // <-- ikinci arama
}
Anahtar'ın tabloda bulunup bulunmadığının anlaşılması da, o anahtara ait verinin bulunması da bir arama gerektirir.
Ama in'in dönüş türü veri göstergesi olunca:
string * veri = anahtar in tablo; // <-- tek arama
if (veri) {
writeln(*veri); // gösterdiğine erişerek
}
Eşleme tablolarında arama çok hızlı olduğu için fazla önemli olmadığı düşünülebilir ama bir sistem dili olabilen bütün performansı vermek zorundadır.
Alıntı:
> Ama gösterge sayesinde sanırım anahtar0 değerine erişiyor.
Doğru.
Alıntı:
> Ve sanırsam auto yerine bool yazmış olsaydınız erişemezdi.
Evet, bool yazsaydım erişemezdi. auto yazmak, string* ile aynı anlama geliyor. içTablo'nun türünü 'typeof(içTablo).stringof' diye yazdırmayı dene...
Alıntı:
> Ama dkvG için bu kodu kullancağım ; dkvG'yi ilgilendirmeyen bir kodu boşuna koymaya gerek yok.
Doğru karar! :) Olabildiğine az kod, ve ancak gerçekten gerekiyorsa...
Alıntı:
>
> dkvG için şöyle bir kod yazdım:
>
> bool mevcut_mu(string ilk,string ikinci,string üçüncü)
{
if((ilk in değiştirildi_mi)&&(ikinci in değiştirildi_mi[ilk])
&&(üçüncü in değiştirildi_mi[ilk][ikinci])){
return true;
}else {
return false;
}
}
>
Yukarıda performans ile ilgili olarak söylediklerimi kullanarak daha hızlısını yazabilirsin. ;)
Alıntı:
> Alıntı:
> null olmayan göstergeler de mantıksal ifadelerde true değerini aldıkları için çalışıyor.
diğer türler içinde geçerli değil mi bu ?
örneğin int 0, double 0.0 , string "0".. gibi
Sıfırın false olması çok genel bir kural. Gösterge veya referans türlerinde null olmak da false'a dönüştürür. Yukarıda verdiğin string örneği doğru değil. Derleyici string'in içindeki karakterlerin bir tamsayı anlama gelip gelmediğine bakmaz. O string, null olmadığı için, mantıksal ifadelerde true değerini alacaktır. (Denemedim ama. :D)
Alıntı:
> Eğer geçerli ise ne için gösterge kullandınız ?
Hem in'in dönüş değeri ile uygun olmak, hem de ufak bir hız kazancı sağlamak için.
Ali
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]