Forum: D Programlama Dili RSS
D dilinde süslü parantezler kullanımı
cos00kun #1
Üye Kas 2014 tarihinden beri · 104 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: D dilinde süslü parantezler kullanımı
C++ Diliyle çok kullanışlı bir konuda süslü parantezlerin içindeki değişkenlerin süzlü parantez dışında bellekten yok olması olayı idi ( Static vesaire değişken tanımlarını hariç tutarak konuşuyorum) Ancak aynı şeyi D dilinde tam olarak uygulayamadım acaba D dilinde örneğin main bloğu içinde bir blok tanımlayıp main bloğunda tanımlanan int d=5 değişkenini yine bu yeni bloğun içinde int d=5 olarak tanımlarsak sanki  D dili hata veriyor gibi !! eğer bir yanlışlık yapmadıysam bu böyle ancak C++ ile aynı işi yaptığımda hangi blok işlem görüyosa ordaki değişken bellekte işlenip yine ona göre yaşam sürelerini tamamlamaktaydılar..
son bir kez code yazıp her iki dilde deneyeceğim umarım bu bir sorun değildir zira süslü parantez (Blok) lardaki bu değişken tanımlamaları ciddi bir avantajdır...
Ne kadar anlatabildim bilmiyorum ancak yarına code ilave edip anlatırsam daha net bir soru olacak sanırım :)
E=mc^2
Avatar
zekeriyadurmus #2
Kullanıcı başlığı: Talha Zekeriya Durmuş
Üye Eki 2012 tarihinden beri · 701 mesaj · Konum: Samsun/Türkiye
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Evet C de scope açıp aynı değişken isminde yeni bir değişken açabiliyorsun. Bunu d dilinde yapmaya çalışınca aşağıdaki gibi bir hata verir.

test.d(4): Error: variable x is shadowing variable test.main.x

http://dlang.org/deprecate.html#Variable shadowing inside …

Sadece aynı değişken isminin kullanılmasına izin vermiyor.

void myFun()
{
    int var, x;
    if (var)
    {
        int var; //Yukarıda da var adında bir değişken olduğu için tanımlamaya izin vermeyecektir. 
 
        int var2;
        var2 = 3;
    }
    var2 = 10; // Yukarıdaki if bloğunun içindeki var2 ye erişemeyecektir ve derleme hatası verecek.
}



Zekeriya
Bilgi meraktan gelir...
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ı
Burada iki konu var:

  • Değişkenlerin kapsam (scope) dışında geçerli olmamaları: Bu iyi bir olanak ve D ve başka bir çok dilde böyle

  • İç kapsamdaki isimlerin dış kapsamlardaki isimleri silmeleri. Bu bazen istenen bir şey olsa da bazen programcı farketmeden yanlışlıkla olur. D bunu bilerek yasaklar.

Ali

Not: cos00kun, Zekeriya'nın örneği olmasa anlamamıştım. Küçücük bir örnek her zaman yararlı oluyor. ;)
Avatar
zekeriyadurmus #4
Kullanıcı başlığı: Talha Zekeriya Durmuş
Üye Eki 2012 tarihinden beri · 701 mesaj · Konum: Samsun/Türkiye
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Aslında dün okuldaki C dersinde de bundan bahsediliyordu :)

Zekeriya
Bilgi meraktan gelir...
cos00kun #5
Üye Kas 2014 tarihinden beri · 104 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj #3
acehreli:
Ali

Not: cos00kun, Zekeriya'nın örneği olmasa anlamamıştım. Küçücük bir örnek her zaman yararlı oluyor. ;)

Valla ne yalan söyliim ben de anlamadım :) sağolasın zekeriya sayende örneği tamamlamış oldun.. iş güç derken unutmayayım diye kafa dolu olunca sanırım böyle oluyor.. bundan sonraki soruların mümkünse örnekli olmasına daha çok dikkat edeceğim..
E=mc^2
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ı
Yanıtlanan mesaj #3
acehreli on 2015-10-27, 11:40:
* İç kapsamdaki isimlerin dış kapsamlardaki isimleri silmeleri. Bu bazen istenen bir şey olsa da bazen programcı farketmeden yanlışlıkla olur. D bunu bilerek yasaklar.

Go'daki sorunlardan bahseden bir yazı bu konuya değiniyor. Go bunu yasaklamadığından (yani, shadowing'e izin verdiğinden) sorunlarla karşılaşılabiliyormuş. Şu yazının 3 numaralı bölümü:

  https://medium.com/@tucnak/why-go-is-a-poorly-designed-lan…

Ali
Avatar
zekeriyadurmus #7
Kullanıcı başlığı: Talha Zekeriya Durmuş
Üye Eki 2012 tarihinden beri · 701 mesaj · Konum: Samsun/Türkiye
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Harika bir yazı olmuş. Dildeki bu tarz şeyleri öğrenmek ileride karşılaşılabilecek hatalara karşı zaman kazandırabilir.

Scope ların ayrı bir fonksiyonmuş gibi farklı stack a sahip olması çok ilginç.

Go hakkında pek bir bilgim yoktu doğrusu biraz wikiden bakındım Ken Thompson dilin yapımcıları arasındaymış. (Bu arada geçen sene Ankara Üniversitesine konferansa gelmiş ve daha yeni haberim oldu :/ )

Zekeriya
Bilgi meraktan gelir...
nurullahisrgan #8
Üye Ock 2015 tarihinden beri · 76 mesaj · Konum: Mardin, Nusaybin
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
D dilinde bu olay gerçekten iyidir. Mobilden baglandigim icin kod gosteremeyecegim. Eğer, main içinde ayrı kapsamlarda iki aynı değişken mevcutsa derleyicinin hangisini kullanacağını kestirmek zor.. Bu yüzden C++ dilinde aduzaylarını seviyorum... Aduzayı demişken, D dilinde kullanabiliyor muyuz?
acehreli (Moderatör) #9
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ı
Aduzayı için özel bir anahtar sözcük yok. Her modül kendi aduzayına (ben "isim alanı" demişim) sahip oluyor; ondan sonra da içinde kullanılan struct, class, vs. aduzayları oluyor: modülüm.Yapım.İçYapım gibi...

Ali
nurullahisrgan #10
Üye Ock 2015 tarihinden beri · 76 mesaj · Konum: Mardin, Nusaybin
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Ben de öyle kullanmaya çalışacağım.. Sağolun.
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:
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, 08:10:28 (UTC -08:00)