Alıntı (darkofpain):
> C dilini örnek alırsak kurucular ve fonksiyonlar mevcut sınıflar olmadığı için kendi standartın da yazılıyor
O cümle(ler)i pek anlayamadım. C dilinde kurucular yok aslında ama ben şöyle düşünüyorum: "C'nin yapılarının keşke kurucuları olsaydı." Doğru. O yüzden D'nin yapıları süper.
Alıntı:
> o yüzden sorun yok C++ baktığımız da sınıf kavramı daha ağırlıklı
C++'ta yapıyla sınıfı ayıramıyoruz çünkü bir kaç erişim hakkı dışında tamamen aynı yeteneklere sahipler.
Alıntı:
> bu sefer fonksiyonlar ile yazıldığı zaman hor görülüyor.
Tabii, hiçbir konuda öyle fanatik olmamak gerek. NYP'nin ilk zamanlarında "herşey nesnedir" gibi yanlış bir takıntı vardı; artık pek duyulmuyor. Verilen sayının iki katını döndüren işlevi neden zorlayarak sınıf yapalım? Sonuçta, hiç değişken saklaması gerekmeyen basit bir algoritmadır.
Alıntı:
> D dili sınıfları,kurucuları,fonksiyonları ve şablonları destekleyen bir dil hal böyle olunca biraz karmaşaya yol açıyor
C++ gibi D de multi-paradigm'dır. Elimizdeki soruna hangisi uygunsa onu kullanalım gibi...
Alıntı:
> sınıfları çok seven biri değilim
Özellikle yüksek performans gerektiren durumlarda sorun yaratıyorlar:
-
Her nesnenin kendi üyelerine ek olarak iki tane de fazladan üyesi var: Çok şekilliliği sağlayan vtbl göstergesi ve her nesnenin kilit olarak kullanılabilmesini sağlayan monitor denen göstergesi. Bu, 64 bitlik bir ortamda fazladan 16 bayt demektir.
-
Her üye işlev varsayılan olarak sanal olduğundan normalde her çagrı vtbl üzerinde geçtiği için daha masraflı oluyor. (Ara not: Alt sınıflar tarafından tekrar tanımlanması düşünülmeyen sınıf üyelerini açıkça 'final' olarak belirtin. O zaman vtbl üzerinden geçmez.)
-
Sınıf nesneleri C++'ta olduğu gibi doğrudan değil, Java'da olduğu gibi sınıf değişkeni üzerinden kullanılıyorlar. Sınıf değişkenleri perde arkasında gösterge olarak gerçekleştirildiklerinden her sınıf kullanımı bellek üzerinde bir de öyle zıplamaya neden oluyor. Bu gibi zıplamalar mikro işlemcinin ara belleğinin dışına düşülme şansını arttırdığından performansa kötü etki ediyorlar.
Alıntı:
> ama örnek veriyorum bir "HTTP Parser" yaptınız bu kurucular ve fonksiyonlar ile yaptığınız sonra paylaştınız akabin de hemen şu sözler gelmeye başlıyor sınıf olarak niye yazmadın bu ne kadar ilkel yapı filan gibi
İlkel olduğunu düşünenler yukarıdaki maddeleri göze alarak mı konuşuyorlar acaba?
Benim kuralım çok basit: Gerçekten sınıf gerekene kadar sınıf kullanma.
Sınıf da çok şekillilik kullanılacağı zaman gerekiyor. Klasik Hayvan sıradüzeninde olduğu gibi. Asıl türleri beni ilgilendirmeyen hayvanlar topluluğunu bir Hayvan dizisi olarak yazabilmek çok yararlı.
C dilinde de gördüğümüz gibi, sınıf kullanmadan ya yapılabilir ama çok külfetli.
Alıntı:
> Siz ne düşünürsünüz neden bu kadar sınıflar la yazma baskısı var
Her zaman için bıyık altından gülüp geçme hakkımız var. ;)
Alıntı:
> ayrıca D dilinde katı kurallar yok olmasını isterdim mesela C gibi sadece fonksiyonlar,kurucular ve şablonlar
Onu anlayamadım. (Aşağıdakine bakılırsa galiba D'nin katı kuralları olmasını istiyorsun.)
Burada kafamın neden karıştığını anladım: Sanırım "yok"tan sonra bir nokta olmasını düşünüyorsun. Ama dikkat edersen okuyucular senin ne düşündüğünü bilemiyoruz. Zaten yazı sistemleri ve yazım kuralları bunun için var: Senin düşündüklerini bize doğru olarak aktarabilmek. Hocam, bir noktayı esirgeme lütfen! ;)
Alıntı:
> bknz: Go dili kurucular,nesneler,fonksiyonlar kabul ediyor ayrıca katı kuralları var.
C, C++, ve D de katı kural yok gibi görünüyor ama hepsinin değişken isminden parantezlerin yerlerine kadar bir sürü kuralı var. Fark, bu kurallar programcılar tarafından getiriliyor. Haklısın, dil de uygulayabilirdi ama C'den ve C++'tan gelen programcılar herhalde garipserlerdi. Ne yapalım demekten başka çare yok. Bu noktadan sonra değişemez. :-/
Ali
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]