January 31, 2012

Alıntı (acehreli):

>

D o konuda bana garip gelmişti ama düşündükçe D'nin yaklaşımını daha çok sevdim. D'nin söylediği şu: Aynı modülün içindeki kodlar aynı programcı(lar) tarafından yazılmaktadırlar ve aynı modüldeki kodlar birbirlerine gerçekleştirim açısından çok yakındırlar. Modüldeki sınıfları birbirlerinden sakınmaya gerek yoktur.

D dili her nekadar farklıda olsa mantıklı bir açıklama getirmiş ve bir açıdan düşününce belki güzel bir yaklaşım bile denilebilir ama genel sınıf yaklaşımını baya bir esnetmiş :)

static değişkenlerin tek olduğunu Ali zaten mesajında gayet güzel anlatmıştı. Nesne yönelimli dillerde static tanımının bir diğer özelliği static ile işaretlenen üye veya metodlara bir nesne örneği oluşturmadan direk ulaşılabilmesidir. D gibi bir dilde bu fark pek anlaşılmasada C# dilinde bu fark senin denemende bariz bir şekilde ortaya çıkmaktadır.

Kısaca bellek sınıfının d değişkenine erişmek için (tabi sınıf izin vermişse) C# veya D ile aşağıdaki gibi bir kod yazarsın.

void main ()
{
	bellek b = new bellek();
	b.d = 1;
}

Ancak bellek sınıfının static s değişkenine erişmek istersen D için aşağıdaki kod geçerli olurken C# için durum biraz farklıdır.

void main ()
{
	bellek b = new bellek();
	bellek.s = 1;
}

void main ()
{
	bellek.s = 1
}

C# kullanıyorsan ise yazman gereken kod şöyle olmalı

static void Main(string[] args)
{
      bellek.s = 1;
}

Yalnız burada dikkat etmek gereken bir nokta daha yakaladım. C# ile bir sınıf tanımladığında üye değişken veya metodları public ile işaretlemediğin sürece private olarak tanımlanırlar. Yani bellek sınıfını c# ile oluşturursan bu hali ile hiçbir üye değişkene ulaşamasın, ulaşmak istediğin üye değişkenleri ve metodları public olarak işaretlemelisin.

D dilinde gördüğüm durum ise bunun tam tersi yani private olarak işaretlemediğin sürece üye değişkenlere direk ulaşabiliyorsun. Küçük ama değerli bir bilgi olarak bunuda eklemek istedim.

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

January 31, 2012

Alıntı (Salih Dinçer):

>

Alıntı:

>

/home/salih/Projects/bellek/bellek/Main.cs(27,27): Error CS0176: Static member `Application.bellek.s' cannot be accessed with an instance reference, qualify it with a type name instead (CS0176) (bellek)

Yani yalnızca türün ismi ile erişilebiliyormuş. Bu konuda C++ da D gibidir ve hem türün ismiyle hem de nesne üzerinden eriştirir:

// C++ kodu
class C
{
public:
   static int s;
};

int C::s = 42;

int main()
{
   C c;
   // Nesne uzerinden
   c.s = 0;

   // TUrUn ismiyle
   C::s = 1;
}

Alıntı:

>

Private ise tıpkı diğerleri gibi davranıyor.

D o konuda bana garip gelmişti ama düşündükçe D'nin yaklaşımını daha çok sevdim. D'nin söylediği şu: Aynı modülün içindeki kodlar aynı programcı(lar) tarafından yazılmaktadırlar ve aynı modüldeki kodlar birbirlerine gerçekleştirim açısından çok yakındırlar. Modüldeki sınıfları birbirlerinden sakınmaya gerek yoktur.

Sakınmak gerektiğinde sınıf kendi modülüne taşınır ve private'ları kendisine kalır. :)

Alıntı:

>

Bu kadar anahtar sözcük benim çok kafamı karıştırıyor ki bu D'de sanki çok (is, in, out, this, body, ref, pure, nothrow, throw, final switch vb.) var

Çok anahtar sözcük olduğu doğru. Kimisi tarihsel nedenlere dayalı, kimisi ifade gücü getireceği düşünülmüş, vs.

Ali

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

February 01, 2012

Teşekkürler Zafer Hocam,

Sayenizde D forumunda C# bilgimi de arttırdım...:)

Dediklerinizi aynen (neredeyse cümle cümle) Mono ile uyguladım. Hakkaten de private özelliği otomatik tanımlanıyormuş. Hep de bu yüzden tam olarak anlayamadığım bir şeyler dönüyor diyordum ben. Neyse ki bu vesileyle bunu da öğrenmiş olduk.

namespace uygulama {
	class bellek	{
		public static int s;
		public int d;
	}
	class uygulama{
		static void Main (string[] args)	{
			bellek a = new bellek();
			bellek b = new bellek();
			b.d=1;
			Console.WriteLine ("dinamik (a.d) bellek: {0}", a.d);
			Console.WriteLine ("dinamik (b.d) bellek: {0}", b.d);
			bellek.s=1;
			Console.WriteLine ("statik (bellek.s) bellek: {0}", bellek.s);
}}}

Her ne kadar D forumunda C# konuşmak abes gibi görünse de kusura bakmayınız. Bu sayede C#'ın acımasızlığını ve de D'nin esnekliğini görüyoruz. Hoş bir tartışma oldu, herkese teşekkür ederim.

Sevgiler, saygılar...

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

February 01, 2012

Alıntı (acehreli:1327965705):

>

Son olarak, eğer bütün dizi baştan oluşturulması gerekmiyorsa diziyi hep sonuna ekleyerek de oluşturabilirsin:

> class bellek {
>     int d;
>     static int s;
>
>     this(int d) { this.d = d; }
>     override string toString() const { return format("%s", d); }
> }
>
> void main () {
>     bellek[] dizi;
>
>     foreach (i; 0 .. 10) dizi ~= new bellek(i);
>     writeln(dizi);
> }
> ```

Ali Ağabey,

Bu örnek çok güzel; görmüştüm fakat dizi konusunu tam hazmedeğim için cevabımı saklı tutuyordum...:)

Aslında yapmak istediğim hafızayı daha verimli kullanmak. O yüzden işlem gücünü düşüren ve hafızayı yiyen kolay kaçamaklardan kendimi kurtarmaya karar verdim. Çünkü hafızadan alıkoyulan her bayt, aynı oranda uygulamayı yavaşlatıyor. Sanki HDD'den veri okuyormuş gibi bir his uyandırıyor!

Şu sıralar uc uca eklenen veriler yerine baştaki veri ile işim bitince index'leri (birden fazlalar!) evirip çevirip dizinin başına doğru yönelteceğim. Biraz zor oluyor benim için ama basit bir mantığı var gibi, çok yaklaştım...

**Dip Not:** Bir de 'override' varmış...:)

Başarılar...

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

Alıntı (Salih Dinçer):

>

Ali Ağabey

O da çok uzun oluyormuş! Kısaca Ali olsun. :)

Alıntı:

>

Şu sıralar uc uca eklenen veriler yerine baştaki veri ile işim bitince index'leri (birden fazlalar!) evirip çevirip dizinin başına doğru yönelteceğim.

Evet, daha önce de söylemiştin. Baş tarafta işi biten elemanlardan kurtulmak D'de çok kolay. Dilimi başından eksiltebilirsin. Aşağıdaki program son tarafa ekliyor ve baş taraftan çıkartıyor:

import std.stdio;

void main()
{
   int[] dizi;

   foreach (i; 0 .. 20) {
       dizi ~= i;

       if (dizi.length > 5) {
           dizi = dizi[1 .. $];
       }

       writefln("%s: %s", i, dizi);
   }
}

Artık erişim sağlanmayan baştaki elemanların yaşadıkları bellek sayfaları çöp toplayıcı tarafından geri alınırlar. Ben gerçekten yavaş olduğu kanıtlanana kadar yukarıdaki gibi yöntemleri yeğlerim. Ama tabii programın doğası gereği başka yöntemler gerektiğini de düşünebilirsin.

Salt bellek ayırma kısmıyla ilgili olarak reserve() var:

http://ddili.org/makale/d_dilimleri.html

Aynı makaledeki "Dilim Üyeleri ve Appender" başlığı altında anlatılan yöntemler de hızlı eleman ekleme konusunda önemli. İngilizce forumlarda hep "Appender kullan" dendiği oluyor.

Belgesi (ve örneği):

http://d-programming-language.org/phobos/std_array.html#Appender

Şuradaki Appender'ın geçtiği yerde de bir kullanım örneği var:

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

Alıntı:

>

Bir de 'override' varmış...:)

O da C++'tan farklı bir özellik. D'nin iyi eklemelerinden birisi. Üst sınıf işlevinin belki de yanlışlıkla bastırmak yerine açıkça override demek gerekiyor.

Ali

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

February 02, 2012

Peki Ali Hocam...

Neyse ki ismin üç harfli. Benim bir arkadaşım vardı ve belki şimdi ismini buraya yazınca (bir gün arama motorunda karşılaşınca) dadanacaktır. D için bir nefer daha kazanacağız...:)

Arkadaşımın ismi Abdurrahman Karaahmetoğlu idi. O yüzdendir ki dünyada sadece iki kişinin kullandığı "aptrik" takma ismini kullanırdı. Düşünsenize kısaltmayıp bu isimde bir e-posta adresi tanımladığınızı. Domain uzantıları ve @ işareti ile çok uzun olacaktır. Neyse, şahsımızı temsil ettiği için isimler güzeldir, Ali'de öyle. Hepsinden önemlisi, saygı, sevgi ve emek de...

Sadece ders notları ile değil; cevaplayarak da emek verdiğin için teşekkür ederim. Hemen dilim olaylarına giriyor ve diziler ile nasıl anlaştığını irdelemeye çalışacağım. Belki de yukarıda yazdığınız gibi çok güzel bir çözüm olacaktır.

Sevgiler, saygılar...

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

February 02, 2012

Alıntı (acehreli):

>

Alıntı (Salih Dinçer):

>

Peki Ali Hocam...

Neyse ki ismin üç harfli.

Aslında bir yöntem daha var: Nasıl olsa herkesin bir forum ismi var. Bence o da kullanılabilir. Şöyle:

Alıntı:

>

acehreli, dilimler çok karışık! :)

Ali

ali reyiz bizi diskoya gotur! :-)

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

February 02, 2012

Alıntı (Salih Dinçer):

>

Peki Ali Hocam...

Neyse ki ismin üç harfli.

Aslında bir yöntem daha var: Nasıl olsa herkesin bir forum ismi var. Bence o da kullanılabilir. Şöyle:

Alıntı:

>

acehreli, dilimler çok karışık! :)

Ali

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

February 02, 2012

Alıntı (Mengu):

>

ali reyiz bizi diskoya gotur! :-)

Şimdi baktım; varmış öyle bir şey; komikmiş; ama anlamadım. Sonra anlatırsınız. :)

Ali

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

1 2 3
Next ›   Last »