Forum: Ders Arası RSS
D sınıfları hakkında
Sayfa:  önceki  1  2 
Avatar
Salih Dinçer #16
Üye Ock 2012 tarihinden beri · 1912 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj ID 9254
Şimdi oldu ama if() ile...:)

Sanırım öncesinde bir hata var ama tespit edemedim. Aslında kapsam dışı kalan bir şey yoktu. Çünkü uygulamanın başında 2 nesne A ve B türünde ama null olarak kuruluyordu. Sonuçta seçime göre bunlar bir değer almalıydı. Şu şekilde bir sıkıntı yok ve beklenen sonuçları ekranda alabiliyorum. Ama neden switch case ile olmuyor?
void main(string[] arg) {
  A bir;
  B iki;
  
  char seçenekler = arg.length > 1 ? arg[1][0] : 0;
 
  if(seçenekler == '1') bir = new A();
  else if(seçenekler == '2') iki = new B();
  else if(seçenekler == '3') {
    bir = new A();
    iki = new B();
  } else printf("PARAMETRE KULLANILMALI\n");
}
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
acehreli (Moderatör) #17
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ı
Yanıtlanan mesaj ID 9253
Salih Dinçer:
assembly kodlarına da baktım

Orada bir fark göremeyiz çünkü erişim hakları derleme zamanında denetlenir. (const, immutable, shared, vs. de öyle.)

(Not: Pardon, o konuyu geçmişiz. ;) )

    case 3:
      bir = new A();
    case 2:
      iki = new B();

Hangi derleyiciyi kullanıyorsun? Ne yapmak istediğini goto kullanarak belirtmen şart. Bu kural sonradan değişmişti. (En azından 2.062'de öyle.) Şu bölümü değiştirmişim bile:

  http://ddili.org/ders/d/switch_case.html

Ali
Avatar
Salih Dinçer #18
Üye Ock 2012 tarihinden beri · 1912 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Evet Ali hocam, 2.062 sürümünde denedim ve çok şaşırdım...:)

Yani dili, 1 seneden fazladır öğrenmeye çalışırken, hatta 20 yıldır program yazdığımı düşünürken hala switch case'i tam olarak bilmediğimi ve/veya D diline özel gelişmeler kaydedildiğini görüyorum ya 1 yaşıma daha girdim diyesim geliyor...

( Aslında bu ay başında 7 nisanda bir yaşıma daha girmiştim. Artık yaşım trafik koduna göre İstanbul oldu...:D )

Gerçi OOP konusunda cahilim, hatta hayatımın büyük kısmı boyunca uzak kaldım diyebilirim. Bütün bunların D sayesinde olduğunu da itiraf etmeliyim; ve elbette senin sayende, teşekkür ederim...

Konumuza dönersek:

D.ershane'ye baktığımda "case değerleri derleme zamanında bilinmelidir" başlığı ile biraz üstündeki şu not konumuzla ilgili olabilir mi?

Not: Yukarıdaki kod hiçbir case'e uymayan durumda bir hata atmaktadır. Hataları ilerideki bir derste göreceğiz.

Belki bu konuyu switch case ile ilgili şu başlıkta tartışabiliriz: http://ddili.org/forum/thread/1062

Çünkü gerçekten case: kümelerinde garip bir şeyler dönüyor gibi...:)
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
acehreli (Moderatör) #19
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 switch deyimi üstü örtülü bir grup goto deyiminden başka bir şey değildir. Koşula uyan case'e goto ile gidilmesi gibidir. Zaten C ve C++'ta (ve bir kaç sürüm önceki D'de) bundan başka bir şey de değildir. C ve C++'ta gidilen case'in altındaki kodlar işletilir, bir break ile karşılaşılmamışsa da bir sonraki case'in altına devam edilir. Aynı goto gibi...

Ne yazık ki hatalara açık bir durumdur çünkü bazen devam edilmesi istenmediği halde break deyimi unutulduğu için devam edilir. Güvenliğe önem veren D bu durumu değiştirdi ve ne istediğini programcının açıkça belirtmesini şart koşmaya başladı.

Sanırım hiç kimsenin itiraz etmediği olumlu bir değişiklik oldu...

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:  önceki  1  2 
Forum: Ders Arası RSS
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, 00:38:44 (UTC -08:00)