September 17, 2018

D'yi sevme sebebim genelde benim kafa yapima uymasi ve ilk denedigim seyin o konu hakkinda birsey bilmesem bile kafamdaki gibi ilk denemede calismasi.

Dun boyle olmayan bir durumla karsilastim ve biraz okuma yapmak zorunda kaldim.

Konu opEquals https://dlang.org/spec/operatoroverloading.html#equals

Eger soz konusu sinif ise

<bool opEquals(Object a, Object b)
{
}>

Bende bunu denemistim kodumdaki bir yapinin icinde fakat kod derlenmedi. Dokumantastona goz attim yanlis yaptigimi ilk bakista anlamadim.
Bir 10 dakka ugrastikdan sonra dokumani gercekten okumak zorunda kaldim ve soyle bir not gordum :

struct S
{
bool opEquals(const S s) { ... }
}

Boyle bir farkin olmasinin geregi ne acaba ? Bu konuda siniflar ve yapilar degisik mi davraniyor gercekten ? Eger oyleyse bunun gerekcesi ne?

Sizin genel olarak D 'nin operator yuklemeleri konusundaki dusunceleriniz nelerdir?(Ben cok basarili buluyorum)

Erdemdem

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

September 17, 2018

Bunun nedeni, yapılarla sınıfların temel farkından kaynaklanıyor. Yapılar değer türü olduklarından null olmuyorlar, sınıflar referans türü olduklarından null olabiliyorlar.

Gösterdiğin iki Object parametreli işlev, D'nin katkısı; üye opEquals işlevini nesnelerin null durumlarını göz önüne aldıktan sonra çağırıyor:

http://ddili.org/ders/d/object.html#ix_object.opEquals

(İngilizcesi: http://ddili.org/ders/d.en/object.html#ix_object.opEquals )

Evet, D'nin işleç yükleme olanakları çok güçlü ama bazı durumlar çok çok çok :) karmaşık olabiliyor:

http://ddili.org/ders/d/sablonlar_ayrintili.html#ix_sablonlar_ayrintili.y%C3%BCkleme,%20i%C5%9Fle%C3%A7

Ali

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