Neyse ki D'de global değişken yok. En dışarıda, modül düzeyinde tanımlanmış olan değişkenler oluyor. Böyle değişkenlerin farklı modüllerde bulunmaları ile hepsinin aynı modüle taşınmış olmaları arasında fark göremiyorum.
Eğer karşılaşırsan, asıl sorun, herkesin elinin herkesin cebinde olmasından kaynaklanacak. Değişkenlerin sahiplikleri gibi bir kavramdan söz edilemeyecek ve değişkenlerin mutlak değişmezlikleri sağlanamayacak. ("Mutlak değişmez"i invariant'ın karşılığı olarak kullanıyorum.)
Örneğin, programdaki bir dörtgenin enini ve boyunu tutan iki değişken olsun ve bu iki değişkene onlarca modül tarafından erişilebiliyor olsun:
// Bir modül içindeyiz
import dortgen;
/* ... */
dortgen.en = 100;
dortgen.boy = 200;
writeln(dörtgeninAlanı()); // dortgen modülü tarafından en * boy diye
// hesaplanıyor olsun. (Tabii çok daha
// karmaşık da olabilir.)
İlerideki bir zamanda dörtgeninAlanı() işlevinin programda farkedilecek kadar yavaşlık oluşturduğunu varsayalım. Artık o her çağrıldığında en*boy hesabının yapılması yerine, en'in veya boy'un değiştiği her yerde alanın bir kere hesaplanması ve dortegen.alan değişkenine yazılması düşünülsün.
Eğer her modül dortgen.en ve dortgen.boy değişkenlerine erişmişse her birisine gidip en veya boy değiştiğinde bir de onun değiştirilmesi gerekir:
dortgen.en = 100;
dortgen.boy = 200;
dortgen.alan = dortgen.en * dortgen.boy;
Tabii bu sefer de alan'ı herkese açmış olduğumuz için o değişkenin değiştirilmesinin sonuçlarına da dikkat etmek gerekir:
dortgen.alan /= 2;
// mutlak değişmezi korumak için diğer ikisini nasıl değiştirsek acaba?
dortgen modülünün en, boy, ve alan değişkenleri arasındaki ilişkiye o modülün bir mutlak değişmezi denir. Mutlak değişmezler genel erişime açılamazlar. Modül tarafından sahiplenilmeli ve korunmalıdır.
Not: Yukarıda modül için söylediklerim sınıf ve yapılar için de aynen geçerli. Her tür kendi mutlak değişmezini korur.
Bu konu şu bölümde Dörtgen isimli bir yapı üzerinde geçiyor:
http://ddili.org/ders/d/nitelikler.html
Ama asıl şu bölüme ait olan bir kavram:
http://ddili.org/ders/d/invariant.html
Tabii o iki bölümde anlatılan olanakları kullanmak şart değil. Amacım, mutlak değişmez kavramını anlatabilmekti. Bir de şurada:
http://ddili.org/ders/d/sarma.html
Herkesin erişebildiği değişkenlerin başka bir sorunu da birden fazla iş parçacığı gibi durumlarda ortaya çıkabilir. Eğer bir değişkene yapılan yazma erişimi denetim altına alınacaksa, yani aynı anda tek iş parçacığının yazması garanti edilecekse bunun için kilit gibi olanaklar kullanmak gerekebilir. Değişkene erişim herkese açıksa kilitlenmesi de ayrıca sorun olur.
Aslında bu gibi kavramları anlamanın en iyi yolu deneyerek görmektir. :) Ne yazık ki kadar söz edilse boş oluyor. Ayrıca senin programında bunların hiç önemi bile bulunmayabilir. Bunlar genel kavramlar. Senin özel durumun için bütünüyle gereksiz olabilir ve senin tasarımını gereksizce etkileyebilir.
Ek olarak, tabii ki bu kaygılar her dildeki tasarımları etkiler; D'ye özgü değil...
Ali
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]