Bu anahtar sözcüğü yanlış anlamışım... :/ Düşündüğüm gibi çalıştığı halde, "sağ tarafın türü" demek değilmiş. D.ershane'yi de düzelteceğim...
Önce biraz tarihçe:
C: Bu sözcük C'de "yerel değişken" gibi bir anlama gelir. Daha doğrusu, "bu işlevden çıkılırken sonlandır"... Ama C'de zaten özel bir şey belirtilmediğinde bir işlevin parametreleri ve yerel değişkenleri yereldir. O yüzden bu sözcük C'de gereksizdir.
C++: C'den aynı şekilde alınmıştır. Aynı şekilde gereksizdir.
C++0x: Sonunda sözcüğün anlamını değiştirmiştir: "ilklemek için kullanılan değerin türü" anlamına gelir:
// C++0x kodu
auto x = 42; // int
auto y = foo(); // foo'nun dönüş türü
Ali'nin kafasındaki D: C++0x gibi modern bir dil olduğu için, 'auto''yu C++0x ile aynı anlamda kabul ettim ve üstelik kafamdaki kullanıma da uydu:
// D kodu:
auto x = 42; // int
auto y = foo(); // foo'nun dönüş türü
D: 'auto', D'de hâlâ C'deki anlamındaymış. Her ne kadar gereksiz olsa da, türün yazılmadığı yerde tekrar ön plana çıkmış. Çünkü D'de türün otomatik olarak çıkarsanabilmesi, ancak ve ancak bir depolama türü (storage class) belirtildiğinde mümkünmüş.
Depolama türleri şunlar (hepsini denemedim):
StorageClass:
abstract
auto
const
deprecated
extern
final
immutable
shared
nothrow
override
pure
scope
static
synchronized
Yani sonuçta, eğer elimizde değişebilen bir değişken varsa, ve türünün otomatik olarak çıkarsanmasını istiyorsak, başka bir depolama türü olmadığı için mecburen 'auto' kullanıyoruz.
Sonuçta aynı çalışıyor, ama olayın temeli başkaymış. :)
Ali
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]