Forum: D Programlama Dili RSS
Sınıf kullanımı nasıl
Sayfa:  1  2  sonraki 
erdem (Moderatör) #1
Üye Tem 2009 tarihinden beri · 978 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: Sınıf kullanımı nasıl
Deneme amacıyla şu bildik öğrenci sınıfını :) d ile yazmaya çalışıyordum.

#include <string>
using std::string;
 
class Ogrenci
{
public:
    Ogrenci (string const & ad, short numara)
        :
        ad_ (ad),
        numara_ (numara)
    {}
 
    /* .. */
 
private:
    string ad_;
    short numara_;
};
 
 
int main ()
{}

d versiyonu da bu şekilde:

import std.string;
 
class Öğrenci
{
    
    string ad_;
    short numara_;
 
public:
    this (string const & ad, short numara)
    : ad_ (ad), numara_ (numara)
    {}  
 
}
 
 
void main ()
{}

ama derlerken bir sürü hata alıyorum:

dmd ogrenci.d
ogrenci.d(10): found 'const' when expecting ')'
ogrenci.d(10): semicolon expected following function declaration
ogrenci.d(10): Declaration expected, not '&'
ogrenci.d(20): } expected following member declarations in aggregate

D dilinde const (değişmez) referans kullanmamıza gerek var mı? string const & ad gibi .. Bir de D dilinde sınıf bildiriminden hemen sonra ; kullanmaya artık gerek yok mu?
class BirŞeyler {} ; <-- burdaki noktalı virgül

gibi. Teşekkürler..

erdem
acehreli (Moderatör) #2
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Ben de uğraşayım. const ve immutable'ı anlatan makaleyi gördünüz mü:

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

Ya da genel olarak RSS beslemesinden yararlanıyor musunuz:

  http://ddili.org/rss.xml

Her yeni sayfayı RSS'e ekliyorum...

Ali
acehreli (Moderatör) #3
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Şu çalıştı:

import std.string;
 
class Öğrenci
{
   
    string ad_;
    short numara_;
 
public:
 
    this (string ad, short numara)
    {
        ad_ = ad;
        numara_ = numara;
    }
}
 
void main ()
{}

Herhalde string 'immutable char[]'ın eşdeğeri olmalı...

Ayrıca noktalı virgüle gerek olmayan yerler olduğunu biliyorum; nereleri olduğunu tam söyleyemem :)

Ali
acehreli (Moderatör) #4
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Tabii D'de public'e gerek yok: modül (kaynak dosya), kendi içindeki her şeye erişebiliyor. Hatta oradaki 'public:' belki de bir etiket olarak kabul edilmiştir... (?) (Öğrenecek çok şey var! :p)

import std.stdio;
import std.string;
 
class Öğrenci
{
    string ad_;
    short numara_;
 
    this (string ad, short numara)
    {
        ad_ = ad;
        numara_ = numara;
    }
}
 
void main ()
{
    auto öğrenci = new Öğrenci("ayşe", 0) ;
    öğrenci.ad_ = "ali";
    writeln(öğrenci.ad_);
}

Ali
erdem (Moderatör) #5
Üye Tem 2009 tarihinden beri · 978 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Teşekkürler. Bu arada ben bir mesaj yazana kadar siz iki mesaj yazmışsınız  :-) O zaman : dan sonra kullanılan ilklendirme listelerini D'de kullanamıyoruz. Ben de tam bu mealde bir şeyler yazıyordum.

Bir de dizgi farkları makalesini de inceledim. Anladığım kadarıyla D dilinde hem
string birŞeyler
hem de
char[] birŞeyler
şeklinde dizgi tanımlayabiliyoruz. Yani ikisi de teorik olarak birbirinin aynısı ..
acehreli (Moderatör) #6
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Aslında 'string' 'immutable char[]'ın bir 'alias'ı olmalı. Oradaki 'immutable'ın önemi var! Çünkü 'char[]' onlarla uyumsuz ve başka bir tür.

Ali
erdem (Moderatör) #7
Üye Tem 2009 tarihinden beri · 978 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Pardon immutable kavramı programlamada biraz farklıymış.
In object-oriented and functional programming, an immutable object is an object whose state cannot be modified after it is created. This is in contrast to a mutable object, which can be modified after it is created. An object can be either entirely immutable or some attributes in the object may be declared immutable; for example, using the const member data attribute in the C++ programming language.
O zaman C++'de kullandığımız doğal std::string'in yerini D dilinde char[] almış oluyor. Yani D'de doğal dizgi türümüz char[] olmuş oluyor yanlış anlamadıysam..
acehreli (Moderatör) #8
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Evet öyle... Ayrıca D'de string'ler de diziler gibi dilin iç olanakları... Kütüphane olanağı değil...

D'deki immutable ve const kavramlarının karşılığı C++'da const'tır. O makalenin sonunda güzel bir karşılaştırma tablosu var:

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

Ali
erdem (Moderatör) #9
Üye Tem 2009 tarihinden beri · 978 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Peki giriş çıkış operatörlerine nasıl farklı görev yükleyeceğiz:

class Ogrenci
{
public:
    Ogrenci (string const & ad, short numara)
        :
        ad_ (ad),
        numara_ (numara)
    {}
 
    /* .. */
    friend istream & operator>> (istream & giris, Ogrenci const &);
    
private:
    string ad_;
    short numara_;
};
 
istream & operator>> (istream & giris, Ogrenci const & ogrenci)
{
    ogrenci = ogrenciOku(giris);
    return giris;
}

D'nin örneklerinde sadece bir sayıyla karşılaştırılması olarak düşünmüş. Tabi burada giriş >> ve çıkış << operatörleri yok ama..
acehreli (Moderatör) #10
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
writeln() ve arkadaşları zaten şablon oldukları için istediğimiz kadar parametreyle çağırabiliyoruz. Gönderdiğimiz türleri string'e dönüştüren toString() üye fonksiyonlarını yazmamız yeterli:

import std.stdio;
import std.conv;
 
class BirÜye
{
    int değer_;
 
    this(int değer)
    {
        değer_ = değer;
    }
 
    string toString()
    {
        return to!(string)(değer_);
    }
};
 
class C
{
    int a_;
    int b_;
    int c_;
    BirÜye üye_;
 
    this (int a, int b)
    {
        a_ = a;
        b_ = b;
    }
 
    this (int a, int b, int c)
    {
        üye_ = new BirÜye(123);
        this (a,b);
        c_ = c;
    }
 
    string toString()
    {
        return "C{a:" ~ to!string(a_) ~
                " b:" ~ to!string(b_) ~
                " c:" ~ to!string(c_) ~
                "}";
    }
}
 
void main ()
{
    auto c = new C(7, 42, 1000);
 
    writeln("Merhaba", c, " - ", 1.2);
}

Ali
Avatar
esatarslan52 (Moderatör) #11
Üye Haz 2009 tarihinden beri · 142 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
"c" nesnesini writeln içinde kullanırken c.toString() şeklinde bir çağırma yapmadık. Ozaman writeln, içinde kullanılan bir nesnenin toString() adında bir fonksiyonu varsa bunu otomatik olarak mı çağırıyo. Yoksa ben mi saçmaladım :)
acehreli (Moderatör) #12
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
D, C++'nın kesinlikle karşı olduğu bir şey yapıyor... :) Bütün sınıf sıradüzeninin en tepesinde Object isimli bir sınıf var.

Her sınıf o yolla bir toString() ediniyor ama o toString()'in gerçekleştirmesi pek kullanışlı değil: sınıfın ismini yazıyor. Kod bloklarını açıklama olarak kaldırmanın yolu D'd /+ ... +/ açıklamaları kullanmak. Öyle yapınca:

...
/+
    string toString()
    {
        return "C{a:" ~ to!string(a_) ~
                " b:" ~ to!string(b_) ~
                " c:" ~ to!string(c_) ~
                "}";
    }
+/

çıktı C nesneleri için deneme.C oluyor:

Merhabadeneme.C - 1.2

Bu arada, Digital Mars'ın belgeleri bana o kadar da kullanışlı gelmedi. Henüz Object'in bütün üye fonksiyonlarını öğrenebilmiş değilim... :(

Ali
Bu mesaj acehreli tarafından değiştirildi; zaman: 2009-07-16, 08:54.
acehreli (Moderatör) #13
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
acehreli:
Bu arada, Digital Mars'ın belgeleri bana o kadar da kullanışlı gelmedi. Henüz Object'in bütün üye fonksiyonlarını öğrenebilmiş değilim... :(

Buldum! :)

    http://www.digitalmars.com/d/2.0/phobos/object.html

Sol taraftaki menüde isimleri std. ile başlayan listenin üstündeki std başlığının üstündeki küçücük object'e tıklamak gerekiyormuş! :D

Ali
erdem (Moderatör) #14
Üye Tem 2009 tarihinden beri · 978 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
acehreli:
acehreli:
Bu arada, Digital Mars'ın belgeleri bana o kadar da kullanışlı gelmedi. Henüz Object'in bütün üye fonksiyonlarını öğrenebilmiş değilim... :(

Buldum! :)

    http://www.digitalmars.com/d/2.0/phobos/object.html

Sol taraftaki menüde isimleri std. ile başlayan listenin üstündeki std başlığının üstündeki küçücük object'e tıklamak gerekiyormuş! :D

Ali

Saklamışlar galiba!  :-) Bana zaten oldum olası dökümantasyon belgeleri anlaşılmaz  :nuts:  gelmiştir ..

Ben de Alexandrescu'nun kitabını bekliyorum ama sanırım 1/3'ü tamamlanmış. Bir de açıkcası şimdiye kadar Alexandrescu'nun hiç bir kitabını okumadım (bakmak hariç). Umarım en az bir Josuttis ya da Koenig gibi anlaşılır, akıcı bir üslubu vardır. Kitaba da şablon olayına yaklaştığı gibi yaklaşmaz. Demek istediğim umarım Loki'nin, ya da Boost kütüphanelerin kaynak kodları gibi bir şey çıkmaz karşımıza  :huh:

Bu arada kitabın ilk üç bölümü üyelik yöntemiyle çalışan bir sitede yayınlanmaya başlamış.  Ve daha ilk konu için çok ilginç bir başlık seçmiş : "D"iving In

Not: Koddaki a:" ~ to!string(a_) kısımları da parantezli olarak a:" ~ to!(string)(a_) olacak sanırım. Artık D kodunu da derleyici olmadan yazmaya başlamışsınız :)
Bu mesaj erdem tarafından değiştirildi; zaman: 2009-07-16, 16:48.
acehreli (Moderatör) #15
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Doğrusu, Alexandrescu'nun üslubu zordur. :) Kendisi aslen Romen ve İngilizce'yi oldukça ağdalı kullanıyor. Hatta kesin günlük hayatta geçmeyen kelimeleri de thesaurus'tan bulup çıkartıyor. :) Ama çok şakacı olarak yazar. O açıdan zevklidir.

Ben de bir şeylere isim vermeyi düşünürken hep 'D' ile başlayanlar bulmaya çalışıyorum. Şu sıralarda o sanal makinayı kurmaya çalışıyorum... Onun ismini "de..." gibi birşey yapmaya çalıştım. Ama bulamadım. :)

to!string(a_) doğru, çünkü şablon parametresi tek ise parantezlere gerek olmuyor.

Ali
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Sayfa:  1  2  sonraki 
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-11-19, 04:32:37 (UTC -08:00)