Forum: Ders Arası RSS
"import" hakkında
import edilen dosyalarda kullanılan değişkenlerin durumu
zafer #1
Üye Tem 2009 tarihinden beri · 700 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: "import" hakkında
Merhaba,

Elimde şöyle bir yapı var. "main.d" ve "islem.d" isimli iki dosyadan oluşan bir projem var. Programın temeli main.d dosyası üzerine kurulu islem.d dosyası ise dosyalama ile ilgili gerekli işlemleri yapan yardımcı kodları içeriyor. Bu durumda bende

     import islem;

diyerek islem.d dosyasını main.d dosyası içine ekledim ve islem.d dosyasındaki işlemleri kullanmaya başladım. Buraya kadar bir sorun yok. Ardından bu sefer main.d içinde tanımladığım bir metodu islem.d dosyası içinde kullanmam gerekti bende aynı şekilde bu sefer islem.d dosyası içinde main.d dosyasının tanımını yaptım,

     import main;

Ancak bu biraz tuhaf oldu gibi yani main.d içine islem.d dosyasını aldım tamam ama tekrar islem.d içindede main.d dosyasını çağırdım burada bir sorun var mı? Doğru kullanım bu mudur? Konu hakkında daha fazla bilgisi olan var mı?
https://github.com/zafer06 - depo
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ı
zafer:
islem.d dosyasını main.d dosyası içine ekledim ... bu sefer islem.d dosyası içinde main.d dosyasının

Bu, kaçınılması gereken bir durumdur. Alt düzey işlemler içeren islem.d'nin üst düzey main.d'yi kullanması yanlış olur. Buna 'cyclic dependency' deniyor.

Bir çözüm, main.d'nin içindeki ortak kodu main.d'den başka bir dosyada tanımlamaktır. Duruma göre ya islem.d olabilir, ya da kavramsal olarak ondan daha alt düzey bir modül.

Öte yandan, burada D'nin modül kavramının bir yararını görüyoruz. C ve C++ gibi başlık dosyası eklenen dillerde başlık dosyalarını #ifndef/#endif'ler arasına almak ve eklenme sıralarına dikkat etmek gerekir.

Modüllerde öyle sorunlar yok. Her modül "ben şu modülleri kullanıyorum" der ve derleyici gerisini halleder.

Ali
zafer #3
Üye Tem 2009 tarihinden beri · 700 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
acehreli:
Bu, kaçınılması gereken bir durumdur. Alt düzey işlemler içeren islem.d'nin üst düzey main.d'yi kullanması yanlış olur. Buna 'cyclic dependency' deniyor.

Bu ciddi bir sorun olmasına rağmen böyle bir kullanımda derleyici herhangi bir uyarı veya hata mesajı vermdi. Böyle bir mesaj verse daha doğru olmaz mıydı?

Sanırım bu gibi durumlar tamamen bizim dikkatimize kalmış durumda, küçük projelerde sorun olmaz ama bir sürü dosyanın olduğu büyük projelerde çok tehlikeli durumlar oluşabilir diye düşünüyorum. Umarım bu durumu daha güzel bir çözüm bulurlar. Mesela ben diğer dillerdeki tecrübemden dolayı bu tuhaflığı hissetmemiş olsam kullanımda hiç bir sorun görünmüyordu.
https://github.com/zafer06 - depo
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ı
zafer:
Bu ciddi bir sorun olmasına rağmen böyle bir kullanımda derleyici herhangi bir uyarı veya hata mesajı vermdi.

Yanlış derken, derleyicinin karışacağı kadar ciddi bir sorun değil aslında. Genellikle tasarım daha iyi düşünülebilir ve bağımlılık olabildiğince yukarıdan aşağıya doğru kurulabilir.

Ali
zafer #5
Üye Tem 2009 tarihinden beri · 700 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Amann Ali sende D derleyicisine hiç toz kondurmuyorsun :)
https://github.com/zafer06 - depo
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ı
Gerçekten, bir derleme hatası değil yani. :)

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:
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-18, 07:33:18 (UTC -08:00)