April 14, 2011

Merhaba.

Ben show kodunun işlevden çıkılınca bir satır atlamasını istiyordum.Şu şekilde yaptım:

   void show(){
       write("<",tag);
       for( int i = 0 ; i < attributes.length ; i++ ) {
           write(" ",attributes.keys[i],"=","\"",attributes.values[i],"\"");
       }
       write(">");
       write(context);
       for( int j = 0 ; j < elements.length ; j++ ) {
           elements[j].show();
       }
       write("<\\",tag,">");
       scope (exit) writeln();
   }

Burdaki scope kullanımı amacına uygun mu olmuş,yoksa yerine başka bir şey mi kullanmak lazım?

NOT:İşlev istediğim görevi yerine getiriyor ve işlevden çıkılınca writeln(); gerçekleştiriyor.

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

April 14, 2011

scope (exit)'in anlamı "hata atılarak bile çıkılsa işlet". Eğer amacımız oysa doğru olmuş ama onun yerine RAII denen yöntem de uygulanır. C++'da scope bulunmadığı için zaten RAII'den başka çare de yoktur. O yüzden benim deneyimim fazla değil.

Burada kapama tag'inin de mutlaka yazdırılması gerektiği için şöyle de olabilir:

   scope (exit) {
       write("<\\",tag,">");
       writeln();
   }

Ve tabii hepsi birden writeln de olabilir:

   scope (exit) writeln("</", tag, ">");

(Not: Tag'i kapatırken ters bölü değil, düz bölü olması gerekiyor.)

Ama scope'un mantığına iyice uymak için aslında onu eşleştiği kod parçasının hemen altına yazmak en iyisi:

       write(">");
       scope (exit) writeln("</", tag, ">");

Bence en doğrusu o.

Ali

Ek not: i++ yerine her zaman için ++i öneririm. Çünkü i++'nın anlamı çok gereksizce karmaşıktır. Nedenini "Önceki değerli arttırma: ++" başlığında anlatıyorum:

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

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