May 30, 2012

Alıntı (acehreli):

>

Alıntı (Salih Dinçer):

>

UCFS'yi deneyim dedim de bir terslik var bu işte...:)

Evet, ters olmuş; UFCS olacak. ;)

Tabii ki bahsettiğim terslik bu değildi ve bir daha unutmayacağım, çünkü UFFF olmuş oradan hatırlarım...:)

Alıntı (acehreli):

>

@property, opCastJSONValue(T)() işlev şablonunu parantezsiz olarak çağırabilmemizi sağlıyor. @property yapmasaydık sonuna boş olan işlev parantezlerini de eklememiz gerekirdi:

Ama gerekmiyor...:)

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

May 30, 2012

Ali'nin notu: Bu mesajı bozdum ama sonra biraz kurtardım.

salih@salih-NB:~/d.ders/JSON$ cat mixin.d
string foo(T)()
{
return "";
}

void main()
{
mixin(foo!int());
mixin(foo!int ); // <-- derleme hatası
}
salih@salih-NB:~/d.ders/JSON$ dmd mixin -v
binary dmd
version 'v2.059'
: : :
salih@salih-NB:~/d.ders/JSON$ ls mixin -al*
-rwxr-xr-x 1 salih salih 249340 2012-05-30 18:28 mixin
-rw-r--r-- 1 salih salih 121 2012-05-30 18:26 mixin.d
-rw-r--r-- 1 salih salih 2864 2012-05-30 18:28 mixin.o
Derleme hatası vermiyor!

Sanırım artık ön tanımlı olarak @property varsayılıyor?

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

May 29, 2012

Alıntı (Salih Dinçer):

>

std.json ile alakalı dersi artık hep birlikte yazalım mı?

Bence başladığın JSON makalesine sen devam et ve bitir işte.

Ayrıca ben kitaba fazla Phobos veya başka kütüphane karıştırmak istemiyorum çünkü hangi birisine yetişilebilir? Şu anda kitapta iki modül var: std.parallelism ve std.concurrency. Onları da kendime şöyle açıklıyorum: Kitabın diğer bölümleri programların tek mikro işlemci üzerinde çalıştırılmalarını sağlıyorlar. Bir anlamda, mikro işlemci üzerinde çalışmak bu işin özü. O yüzden, programların günümüzdeki çok çekirdekli ortamlarda nasıl çalıştıkları ile ilgili olduğundan std.parallelism ve std.concurrency'ye ayrıcalık yaptım.

Hmmm... Aslında std.range de biraz geçiyor. Ama ben bunları gerçekten dile çok bağlı olan kavramlar olarak görüyorum. JSON, regex, vs. bir sürü konu da çok önemli ama onlar özel uygulamalar için... gibi geliyor...

O yüzden kitabı boşver; JSON makalesini bitirmeni bekleyelim. ;)

Ali

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

May 30, 2012

Alıntı (acehreli):

>

En son ne zaman uyudun? ;) Yukarıda "ÖNEMLİ" diye belirttiğim konu yalnızca önemli değil, çok önemli. -v ile derle demek istemedim; -property diye derle demek istedim.
Onu okudum ve anladım da sürüm numarası çıksın diye öyle yapmıştım. Anladığım kadarıyla -property parametresi verdiğimiz zaman da bu özellik disable oluyor.

Alıntı (acehreli:1338394191):

>

Bugün: Her zaman için -property seçeneği ile derleyin.

Ya da parantezli kullanıma devam ama UFCS içinde hiç hoş görünmüyor...

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

May 30, 2012

Alıntı (zafer):

>

scope hatanın atılmasını engellemiyor sadece bize program akışı sonlanmadan önce son bir imkan sunuyor. Bir nevi köprüden önceki son çıkış gibi sanırım.

Tabii "program akışı sonlanmadan önce" deyince bütün programın sonlanması anlaşılmasın. Yoksa hata bizi çağıran katmanlar tarafından da yakalanıyor olabilir, ve zaten biraz da o yüzden temizlik işlemlerini bu kapsamda halletmek istiyoruz; program işine düzgün devam edebilsin diye.

Ali

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

May 30, 2012

Alıntı (Salih Dinçer):

>

UCFS'yi deneyim dedim de bir terslik var bu işte...:)

Evet, ters olmuş; UFCS olacak. ;)

Alıntı:

>

Çünkü 'opCastJSONValue(T)()' işlevinin sağından itibaren devam etmem (öyle ya, parantez içinde kalıyor) gerekirken soluna koyduğumda hata vermiyor.

Anlamadım. :( Neyi sağına ve soluna koyuyorsun? UFCS'i hatırlayalım: Eğer tek parametre alan normal bir işlev varsa o işlev sanki o parametrenin üye işleviymiş gibi çağrılabilir:

double yarısı(double i)
{
   return i / 2;
}

void main()
{
   auto y = 42.yarısı();  // <-- int bile nesne gibi kullanılabiliyor!
}

Alıntı:

>

Sanki 'mixin()' özelliği parantez içine giriyor.

UFCS işlevleri ilgilendiren bir konu ama mixin() bir işlev değil, bir ifade. Şurada "Mixin Expressions" başlığı altında bir dil olanağı olarak geçiyor:

http://dlang.org/expression.html

(Yakın ama farklı bir kavram olarak "Template Mixins" de var: http://dlang.org/template-mixin.html)

Alıntı:

>

[ Hadi benim bildiğim ters, peki 'writeln()' de mi ters?

>     toJSON(&belge).writeln;
> }
> ```


O doğru işte çünkü writeln() bir işlevdir. writeln(), ilk parametresinin üye işleviymiş gibi çağrılmış.

Alıntı:
> Her zaman ki gibi @property'nin hiç bir etkisi de yok. Ne iş?

@property, opCastJSONValue(T)() işlev şablonunu parantezsiz olarak çağırabilmemizi sağlıyor. @property yapmasaydık sonuna boş olan işlev parantezlerini de eklememiz gerekirdi:


// @proprety olmasaydı opCastJSONValue!Öğrenci() diye işlev çağırma parantezleri gerekirdi:
mixin(opCastJSONValue!Öğrenci());



Bu arada opCastJSONValue kısa bir isim ama fazla genel değil mi? Sanki opCast()'in tek bir gerçeklemesi varmış gibi oluyor; sanki "bu, Öğrenci sınıfının opCast() işlevidir" gibi... Ama nasıl bir opCast() olduğunu söylemiyor. Ben o yüzden bütün üyelerini sırayla dönüştürdüğünü bildirmek için BütünÜyelerİçin_opCastJSONValue demiştim. Daha önce Standart_opCastJSONValue'yu da düşünmüştüm. Çünkü bazı üyeler geçici değerlerdir örneğin dikdörtgenin hazırda bekleyen uzunluk değeridir ve belki de dosyaya yazılması gerekmiyordur. O zaman başka opCast() kullanılabilir ve onun başka ismi olur: şakayla karışık olarak:


mixin(BazıÜyeleriEksik_opCastJSONValue!Öğrenci("gereksizÜye"));



Ali

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

Alıntı (Salih Dinçer):

>

Alıntı (acehreli):

>

@property, opCastJSONValue(T)() işlev şablonunu parantezsiz olarak çağırabilmemizi sağlıyor. @property yapmasaydık sonuna boş olan işlev parantezlerini de eklememiz gerekirdi:

Ama gerekmiyor...:)

Neden anlaşamadık acaba? Hâlâ eski bir dmd mi kullanıyorsun?

Şunu dener misin:

string foo(T)()
{
   return "";
}

void main()
{
   mixin(foo!int());
   mixin(foo!int  );  // <-- derleme hatası
}

ÖNEMLİ: Bir kaç mesajda geçtiği gibi, -property seçeneği ile derle. Doğrusu o. dmd gelecek sürümlerden herhangi birisinde habersizce onu öntanımlı yapabilir.

Parantezsiz çağırabilmen için @property olması şart. dmd geçici olarak göz yumuyor.

Ali

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

May 30, 2012

Alıntı:

>

Derleme hatası vermiyor!

En son ne zaman uyudun? ;) Yukarıda "ÖNEMLİ" diye belirttiğim konu yalnızca önemli değil, çok önemli. -v ile derle demek istemedim; -property diye derle demek istedim.

Alıntı:

>

Sanırım artık ön tanımlı olarak @property varsayılıyor?

Artık? Eskiden öyleydi, bugün de öyle, ama yakında kalkacak.

Kural: Parantezsiz çağırabilmek için @property olarak işaretlemek şart.

Sorun: Eski kurala göre zaten parantezsiz çağrılabiliyordu. Eski kodlar bozulmasın diye yukarıda "Kural" dediğim kural henüz işletilmiyor.

Gelecek: Kural etkili olacak.

Bugün: Her zaman için -property seçeneği ile derleyin.

Ali

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

June 04, 2012

Ali Hocam,

Bu sabaha 'to!JSONValue()' işlevine açıklamalar ekleyerek küçük bir değişiklik yaptım. Sanırım eşleme tablosu içindeki 'to!string()' işlevine ihtiyaç yok. Çünkü bir çok şekilde çalışıyor. Peki sence de öyle mi; sorayım istedim? Ayrıca izninle kodu tek satır olacak şekilde sadeleştirebilirsek makale için gerçekten okunabilirliliği arttırıyor. İlgili dizi bölümleri aşağıda:

   :    :    :
   }                                 // Dizi ise ARRAY
   else static if (isArray!T) {
       json.type = JSON_TYPE.ARRAY;

       foreach (eleman; değer) json.array ~= to!JSONValue(eleman);
   }                                 // Eşleme tablosu ise OBJECT
   else static if (isAssociativeArray!T) {
       json.type = JSON_TYPE.OBJECT; /* Nesne (OBJECT) olması gerekiyor çünkü
                                        yeniDeğer yeniden değerlendirilecek! */
       JSONValue[string] aar;
       foreach (i, yeniDeğer; değer) aar[i] = to!JSONValue(yeniDeğer);

       json.object = aar;
   }                                 // yeniDeğer ise içeri döndür!
   else static if (__traits(compiles, cast(JSONValue)değer)) {
       json = cast(JSONValue)(değer);
   }
   :    :    :

Sevgiler, saygılar...

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

June 04, 2012

Alıntı (Salih Dinçer):

>

Sanırım eşleme tablosu içindeki 'to!string()' işlevine ihtiyaç yok. Çünkü bir çok şekilde çalışıyor.

Emin misin? Ben onu kaldırdığımda birim testlerini bile geçemiyorum. Şöyle bir eşleme tablosu ile kullanmayı dene:

string[double]

Alıntı:

>

Ayrıca izninle kodu tek satır olacak şekilde sadeleştirebilirsek makale için gerçekten okunabilirliliği arttırıyor.

Kodu istediğin gibi düzenleyebilirsin tabii ki ama benim hiç alışık olmadığım biçimde olduğu için bana okuması zor geliyor. Açıklaması kolay: İnsanlar olarak belirli desenler arıyoruz. Örneğin döngü satırını görür görmez gözlerim bir alt satıra atlıyor ve şaşırıyorum. Benim gözüm şu desene alışmış:

   foreach (eleman; topluluk) {
       işlemler();
   }

Belki zamanla alışırım ama şu anda çok garipsiyorum.

Belki sen alışmış olduğun için tek satırlı kod sana daha okunaklı geliyordur. İstersen başkalarının fikirlerini de al.

Ali

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