January 08, 2010

Eğer bir sınıf şablonuyla ilgileniyorsak, o sınıfın üyelerinin türü dışarıdan belirleniyor demektir.

Örneğin x,y koordinatlarını tutmak için çeşitli türler kullanabiliriz. Bunu kullanıcıya bırakırsak:

class Nokta(T)
{
   T x;
   T y;

   this(T x, T y)
   {
       this.x = x;
       this.y = y;
   }
}

void main()
{
   auto hassasNokta0 = new Nokta!double(1.1, 2.2);

   // Üsttekiyle aynı şey:
   auto hassasNokta1 = new Nokta!(double)(1.1, 2.2);
   // Yani tek bir şablon parametresi varsa, türün etrafına
   // parantez yazmak gerekmiyor.

   // Bu da int kullandığı için noktayı düzlemde diğerleri
   // kadar hassas olarak tutamıyor
   auto tamsayıNokta = new Nokta!int(3, 4);
}

Yani sınıfın tanımı içinde x,y koordinatlarının geçtiği yerlerde özel bir sınıf belirtmek yerine T diyoruz. Sınıf hangi türle oluşturulmuşsa, T o tür anlamına geliyor. Tabii temel türler kullanmak zorunda da değiliz. Örneğin 'Nokta!BigInt' diye bir kullanıcı türüyle de kullanabiliriz.

D'de ne kadar önemli olduğunu daha bilmiyorum ama C++'da şablonların kullanımı hoş olmadığı için, sınıf şablonlarının yanında bir de işlev şablonu verilir.

Bunu 'pair' ve 'make_pair' gösterebilirim:

foo(pair<double, double>(0.25, 0.35));

yerine, tür otomatik olarak çıkarsanabilsin diye 'make_pair' işlevi kullanılır:

foo(make_pair(0.25, 0.35));

D kodlarında da böyle bir kolaylık istersek, 'make_pair''in benzerini 'Nokta' için aşağıdaki gibi yazabiliriz.

'main' içinde artık 'Nokta' şablonunun türünü açıkça belirlemek zorunda kalmıyoruz. Biz 'double' veya 'int' kullanıyoruz, gerisi otomatik olarak hallediliyor:

class Nokta(T)
{
   T x;
   T y;

   this(T x, T y)
   {
       this.x = x;
       this.y = y;
   }
}

// Kolaylık işlevi
Nokta!T Nokta_yap(T)(T x, T y)
{
   return new Nokta!T(x, y);
}

void main()
{
   auto hassasNokta0 = Nokta_yap(1.1, 2.2);

   auto tamsayıNokta = Nokta_yap(3, 4);
}

Ama bunun D'de ne kadar yararlı olduğundan emin değilim. 'new' anahtar sözcüğünün işlevin içinde gizli kalması iyi mi kötü mü karar veremiyorum. :)

Ali

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

January 08, 2010

Söylemeyi unuttum: Eğer sınıfın üyelerinin türünü dışarıdan almak gibi bir serbesti düşünmüyorsak, sınıf şablonundan yararlanamayız.

'inout''u daha önce işlev parametresi olarak konuşmuştuk. 'inout''un yeni anlamını, şablon olarak da gerçekleştirebiliyoruz. Yukarıdaki 'Nokta_yap' işlevinin dönüş değerinin türü, parametresiyle aynı olabilirdi...

'inout' da benzer olduğu için, ben "onun yerine şablon da kullanabiliriz" demiştim.

'inout', değiştirilebilen, 'const', ve 'immutable' yerine geçen bir anahtar sözcük.

Ali

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

January 08, 2010

Sorunun ucunu kaçırdım... :) Amacımız neydi?

Ama öncelikle, bütün 'inout''ları kaldır. 'dchar[]''lar referans türleri oldukları için zaten anladığım kadarıyla asıl nesneleri değiştiriyorsun.

Ali

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

January 17, 2010

Bugün büyük bir güncelleme yapmış bulunmaktayım.

Bu güncelleme sınıfın işleyişini hiç bozmasa da bence çok önemli ve büyük bir güncelleme.

Bunu svn'ye not düştüğüm mesaj : Açıklama satırlarının taslak hali eklendi.

Bu olayı bu kadar büyütmüş olmamın nedeni yazdığım kodlardan daha fazla açıklama satırı eklememdir. :-D
Kendime buradan bir not -> Yazdığın her işlevin açıklama satırlarınıda beraberinde yaz. ;-) Yoksa olay işkenceye dönüşüyor.

Ama ne yazık ki html çıktısı almayı başaramadım. belge.ddoc dosyası trilerinki ile aynı. Html dosyalarını oluşturmak için konsola yazdığım kod ise bu :

dmd deneme.d dkv.d   belge.ddoc -D -Ddhtml

Bunda problem yok çünkü html adlı dizin ve dizinin içinde dkv.html ile deneme.html oluşturuluyor.(İçinde açıklama satırlarında yazdığım yazılar yok.)
Ya belge.ddoc'da düzenlenecek bir şey var.
Ya da açıklama satırlarımda.

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

January 17, 2010

Alıntı (acehreli):

>

(Bu arada, ben D.ershane'de "parametre"de karar kılmış durumdayım. Türkçe'ye çok yerleşmiş olduğunu düşündüm. Tabii "değiştirge"ye ısınamamamın da katkısı var. :) )

Şuanki söyleyeceklerim parametrenin kökenini Türkçe kabul etmemem ile alası yoktur:
Evet parametre Türkçeye girmiş bir sözcük. Ve oldukça da kullanılıyor. Ama ne yazık ki kullanmayan kişilerde var. Eğer matematik ile çok alakalı değilse(en erken 2.dereceden denklemlerde parametre sözcüğü ortaya çıkıyor. Anadolu liselerin 10.sınıf konusu) ve programlama bilmiyorsa(D.ershane'nin hedefi sanırım :-) ) ne yazık ki parametre ne olduğu bilmiyor. Ve ne yazık ki anlamınıda tahmin edemiyor. Parametre => parabirimi en fazla çıkarılacak anlam :-) Ama değiştirge dense -tirge yapım ekini tam anlamasada en azından oraya değişken konulduğunu anlamından çıkarıyor. Bu da yeterli bence. Ve ayrıca ben Eğer terim sözcüklerin Türkçe sözcükler kullanılırsa daha kolay öğrenildiğini yazan bir yazı okumuştum. Ne kadar doğru olduğu tartışılır ? Ama parametre kullanılacak ise en azından sözcükten başka derste de anlamı verilmeli. Yoksa dersi okuyan kişi sözcüğü okumadıysa derslerden hiç bir şey anlamaz.

Alıntı:

>

Projeye belge.ddoc'u sen eklersin diye bıraktım.

Daha önce açıklama satırları olmadığından şimdi ise html çıktısını doğru üretemediği için koymamıştım. Artık koyabilirim.

Alıntı:

>

Eğer istersen projeye şunu içeren bir Makefile ekle:

Bunu yapacağım.

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

January 17, 2010

Makefile konusunuda dediğiniz gibi yaptım ama ./make komudunu verince dosya bulunamadı diyor ?
Ama ./Makefile deyince buluyor. (Yani gerçekte makefile diye dosya var :-) )

Acaba nereyi atlıyorum?

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

January 17, 2010

Windows'u D kodu yazarken kullanmıyorum. (Hatta normalde de kullanmıyorum. :-) )

Şuan trileri'de denedim onda da sorun var. Normalde yoktu. Bugün güncelleme yapmıştım ve bilgisayarı yeniden başlatmadım. Belki yeniden başlatınca çözülür. (Windows yöntemi :-) )

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

January 17, 2010

Sorun çok basit bir şeymiş. Ben önceden './make' diye Makefile dosyasını açardım. Artık ./make deyince linux dizin yada dosya bakıyor. Şimdi 'make ' demek gerekiyor.

Her ne kadar bizimle çok ilgisi olmasa da bana çok garip geldi :-)

Artık Makefile dosyasını yazmaya başlayabilirim. Ama ondan önce Makefile ile ilgili bir kaç yazı okusam çok iyi olur :-)

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

January 17, 2010

Alıntı (canalpay):

>

Yazdığın her işlevin açıklama satırlarınıda beraberinde yaz. ;-) Yoksa olay işkenceye dönüşüyor.

Belgeleme başlıbaşına bir sorundur. Kod değiştikçe açıklamaların da değişmesini unutmamak gerekir. Hiç olmazsa belgenin kod içinde çıkartılması hata şansını da azaltıyor. Apayrı bir dosyada dursalar "gözden ırak" olurlardı. :)

Alıntı:

>

Ama ne yazık ki html çıktısı almayı başaramadım.

dmd hatası mı bilmiyorum ama dkv sınıfın başına bir açıklama yerleştirince içindekiler de belirdi. Ya hata, ya da "kendisi belgelenmeyen sınıfın işlevleri de belgelenmez" gibi bir mantık vardır belki.

Alıntı:

>

belge.ddoc dosyası trilerinki ile aynı.

Projeye belge.ddoc'u sen eklersin diye bıraktım. (Bu arada, ben D.ershane'de "parametre"de karar kılmış durumdayım. Türkçe'ye çok yerleşmiş olduğunu düşündüm. Tabii "değiştirge"ye ısınamamamın da katkısı var. :) )

Alıntı:

>

Html dosyalarını oluşturmak için konsola yazdığım kod ise bu :

> dmd deneme.d dkv.d   belge.ddoc -D -Ddhtml
> ```

>

Eğer istersen projeye şunu içeren bir Makefile ekle:


dkv:
dmd deneme.d dkv.d
dmd deneme.d dkv.d belge.ddoc -D -Ddhtml



Tabii ki o şimdilik öyle; sonra gelişir. Ben tek make diyerek oluşturabiliyorum.

Ali

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

Bilgilendirme için teşekkürler. Ben ./make diye kullandığımı hatırlıyorum da. Sorun ondanmış.

Ama böylesi daha iyi oldu. Hem nasıl Makefile dosyası yazılacağını öğrendim. Hem de artık svn'yi konsoldan kullanmaya karar verdim :-)
Ben guiye gönderme diyorum o mesajsız gönderiyor. Var mı konsol gibisi :-)

Ayrıca son makefile dosyasına bakarsanız iyi olur. Ne eksik ne fazla değerlendirirsiniz.

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