March 03, 2011

Başka dillerde de bulunan bir olanak Phobos'ta da desteklenmeye başlamış. Tamamen atlamışım! :)

Düzen dizgisinde % karakterinden hemen sonra artık parametre 1$ numarası verilebiliyormuş. Bu numaralar POSIX standardındaki gibiymiş. Örneğin "%s" yerine "%1$s" yazılabiliyor ve "birinci parametreyi buraya yerleştir" anlamına geliyor:

import std.stdio;

void main()
{
   writefln("%2$s %1$s", 42, 7);
}

Oradaki düzen karakteri önce 2 numaralı, sonra 1 numaralı parametreyi yazdırdığı için çıktısı şöyle oluyor:

'7 42'

Bunun bir yararı, örneğin İngilizce ve Türkçe çalışabilen bir programda görülebilir. "Drive %s has %s free space" gibi bir İngilizce mesaj olsa:

import std.stdio;

void main()
{
   auto sürücü = "C";
   auto boşYer = "10G";
   writefln("Drive %s has %s free space", sürücü, boşYer);
}

ama sonradan o mesajı değiştirsek:

   writefln("There is %s free space on drive %s", sürücü, boşYer);

yanlış olur! Çünkü parametrelerin yerlerini değiştirmeyi unuttuk! Parametrelerin yerlerini değiştirince düzelir:

   writefln("There is %s free space on drive %s", boşYer, sürücü);

Aynı sorun mesajı şimdi Türkçeleştirdiğimizde de görülür:

   writefln("%s sürücüsünde %s boş yer var", boşYer, sürücü);

Şimdi parametrelerin yerlerini yine değiştirmek gerekecek. Uzattım... :)

Düzen dizgisinde parametre numaraları kullanınca sorun kalmaz. İlk program:

import std.stdio;

void main()
{
   auto sürücü = "C";
   auto boşYer = "10G";
   writefln("Drive %1$s has %2$s free space", sürücü, boşYer);
}

İngilizce mesajı değiştirdiğimizde yalnızca düzen dizgisinde numaralı parametrelerin yerlerini değiştiririz:

   writefln("There is %2$s free space on drive %1$s", sürücü, boşYer);

Türkçeleştirince de:

   writefln("%1$s sürücüsünde %2$s boş yer var", sürücü, boşYer);

Numaralı parametrelerin bir başka yararı da belirli bir parametrenin birden fazla tekrarlanabilmesi:

   int yıl = 2011;
   int ay = 2;
   int gün = 28;
   char ayraç = '.';
   writefln("%3$02s%4$s%2$02s%4$s%1$s", yıl, ay, gün, ayraç);

İyice karışık olsun diye boşlukları 0 ile doldurmak için, ve günü ve ayı iki hanede yazdırmak için 02 de kullandım. :D Çıktısı:

'28.02.2011'

Gördüğünüz gibi 4 numaralı parametre olan ayracı iki kere kullanabildim.

Ali

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