Thread overview
with deyiminin switch ile kullanımı
May 01, 2012
Salih Dinçer
May 03, 2012
zafer
May 03, 2012
zafer
May 04, 2012
zafer
April 30, 2012

Hem yararını anlamadığımdan hem de C++'ta da onsuz yaşanabildiğinden with deyimini hiç kullanmıyorum. Hatta kitapta hiçbir yerde geçmiyor. :blush: Yararlı bir kullanımını öğrendim.

Şu kodda fazla laf kalabalığı var:

enum FutbolMaçıSonucu { berabere, birinciKazandı, ikinciKazandı }

void main()
{
   FutbolMaçıSonucu sonuç;

   // ...

   final switch (sonuç) {
   case FutbolMaçıSonucu.berabere:
       // ...
       break;

   case FutbolMaçıSonucu.birinciKazandı:
       // ...
       break;

   case FutbolMaçıSonucu.ikinciKazandı:
       // ...
       break;
   }
}

with deyimi kodu daha temiz yapıyor:

   final switch (sonuç) with (FutbolMaçıSonucu) {
   case berabere:
       // ...
       break;

   case birinciKazandı:
       // ...
       break;

   case ikinciKazandı:
       // ...
       break;
   }

Bilmeyenler için: with, "bu blokta bilmediğin isimleri şununla dene" gibi bir anlama geliyor. Sonuçta tek başına 'birinci' yazmak yasal olmadığından derleyici bir de 'FutbolMaçıSonucu.birinci' olarak deniyor ve derleniyor.

with'e bir nesne bile verilebiliyor. O zaman derleyicinin bilmediği isimler o nesnenin üzerinde de deneniyorlar:

struct S
{
   int üye;

   void işlev()
   {}
}

void main()
{
   auto nesne = S();

   with (nesne) {
       üye = 42;   // nesne.üye anlamında
       işlev();    // nesne.işlev() anlamında
   }
}

Ali

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

May 01, 2012

İyimiş, bu 'with{}' kümesini sevdim! Bilgilendirme için teşekkürler.

Özellikle JSON'da çok işe yaracağı kesin...:)

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

May 03, 2012

C# dilinde using() blogu var acaba ona benzer bir kullanım şekline mi sahip?

** with kapsamından çıkıldığında nesne ömrü sona erer mi?
** with ile modül isimleri kullanılabilr mi? Örneğin ;

with(std.conv)
{
   int sayisalDeger = to!int(birSayi);
}

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

May 03, 2012
import std.cstream;
import std.stdio;

void main()
{
   int birSayi;

   with(std.conv) // <-- Ancak modül eklenmişse işe yarıyor. (std.conv
                  //     diğer ikisi tarafından dolaylı olarak eklendiği
                  //     için burada hata almıyoruz.)
   {
       int sayisalDeger = to!int(birSayi);
   }

   sayisalDeger = 42; // <-- HATA: Burada geçerli değil.

   with (std.stdio) { // <-- İşe yarıyor. Yoksa std.cstream.File ile
                      //     karışıyor ve derlenmiyor.
       File f;
   }
}

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

May 04, 2012

Kullanışlı bir özellik, paylaştığın iyi oldu Ali.

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

May 04, 2012
import std.cstream;
import std.stdio;

class BirSinif
{
	private string birDeger;

	public this()
	{
		this.birDeger = "Zafer";
	}

	@property string BirDeger() const
	{
		return birDeger;
	}
}

void main()
{
	// Çalışmıyor
	with (BirSinif ornekSinif = new BirSinif())
   {
   	writeln(BirDeger);
   }


	BirSinif ornekSinif = new BirSinif();
   with (ornekSinif)
   {
   	writeln(BirDeger);
   }
}

Anladığım kadarıyla **with **şimdilik sadece uzun isimlerin yazımında bize kolaylıklar sağlıyor. Umarım ileride biraz daha becerikli hale gelir. Çok gerekmesede kullanışlı bir özellik.

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