August 12, 2011

std.conv.to dizgiden bool'a dönüştürebiliyor. Mantıksal ifadeler bölümünün 4 numaralı probleminde girişten_bool_oku() diye bir işlev var:

http://ddili.org/ders/d/mantiksal_ifadeler.html

bool girişten_bool_oku(string mesaj)
{
   // Mesajı yazdır
   writef(mesaj);

   // Girilen kelimeyi bir dizgiye oku
   char[] giriş;
   readf("%s\n", &giriş);

   /*
     Şimdi girilen dizgi "true" ise true değerini, "false"
     ise false değerini döndürmek istiyoruz. Yani burada bir
     dönüşüm yapıyoruz: örneğin "true" dizgisini görünce
     true değerini döndürüyoruz.

     Not: "true" dizgisi ile true değerinin aynı şey
          olmadıklarına dikkat edin: Birisi 't', 'r' gibi
          karakterlerden oluşur, diğeri ise bir bool
          değeridir.
   */

   // Sonuç olarak döndüreceğimiz değişken:
   bool dönüştürülen_değer;

   // "false"tan false'a ve "true"dan true'ya dönüşüm
   if (giriş == "false") {
       dönüştürülen_değer = false;

   } else if (giriş == "true") {
       dönüştürülen_değer = true;

   } else {
       /*
         Bilmediğimiz bir kelime geldi. Bu durumda ne
         yapacağımız belli olmadığı için işlemden
         vazgeçip hata atmaktan başka hiçbir çaremiz yok.
       */
       throw new Exception(
           ("Bu kelimeyi anlamadım: " ~ giriş ~
            ". Lütfen false veya true yazın.").idup);
   }

   return dönüştürülen_değer;
}

Onu şöyle değiştireceğim:

bool girişten_bool_oku(string mesaj)
{
   // Mesajı yazdır
   writef(mesaj ~ "(false veya true) ");

   // Girilen kelimeyi bir dizgiye oku
   string giriş;
   readf("%s\n", &giriş);

   // O dizgiden bir bool değer üret
   bool dönüştürülen_değer = to!bool(giriş);

   // Üretilen değeri işlevi çağırana döndür
   return dönüştürülen_değer;
}

Ali

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