February 08, 2010

(ghetto, kusura bakma başka konulara kayıyoruz. :) Umarım en azından kulak dolgunluğu olur. Çünkü örneğin 'değer türü' ve 'referans türü' ayrımı D'de önemli.)

Can, evet, şu çöküyor:

   string gez;
   din.readf(&gez);

çünkü string değiştirilemez. (Boş olarak oluşturulmuş bir string'in hemen hemen hiç kullanımı olmadığını da anlıyoruz.)

Bir işlevin dönüş değeri olsa, gez'i ilklemek daha kullanışlı olabilir:

import std.stdio;
import std.cstream;

string yanıtAl(string soru)
{
   write(soru);
   char[] yanıt;
   din.readf(&yanıt);
   return yanıt.idup;
}

void main()
{
   string gez = yanıtAl("Gezelim mi?");

   if (gez == "evet")
   {
       writeln("Gir koluma");
   }
}

İşlevin sonundaki .idup gerekli tabii: değişebilenden değişemeyene dönüştürüyor.

İşin ilginci, şimdi o işlevi kullanarak boş bir string'i de değiştirebiliriz:

   string boş;
   boş = yanıtAl("hello");

Yani şimdi ikinci satırda readf değil, başka bir string ile atama yaptığımız için bu çalışıyor. Çünkü string bir 'referans türü' olduğu için, atama işlemi başka bir dizgiyi göstermesini sağlıyor ve o çökmeden çalışıyor.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

February 08, 2010

Can, ben de zaten sana yanıt olarak yazmadım; daha çok sesli düşünüyorum. :)

Çünkü immutable'ın neyi değiştirmediği konusu benim de kafama tam oturmuş değildi.

Şimdi daha iyi anladım: erişim sağladığı şeyi değiştirmeye izin vermiyor. Başka şeylere erişim sağlamaya başlamasında bir sakınca yok. O da bir işlevin dönüş türü ile olabiliyor.

(Yine sesli düşünmeye başladım... :) )

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

1 2
Next ›   Last »