http://www.digitalmars.com/d/2.0/changelog.html#new2_038
Benim ilginç bulduğum iki tanesi:
-
Kurucu işlevi tanımlanmış olan yapı nesneleri artık '{ }' yazımıyla kurulamıyorlar. Dersleri düzeltmek gerek... ;)
-
'auto ref' işlevler:
http://www.digitalmars.com/d/2.0/function.html#auto-ref-functions
Eğer döndürdüğü değer bir sol değer (lvalue) ise, onu referans olarak döndürüyor; değilse değer olarak. Normalde kopyalayarak döndüreceğine, referans olarak:
auto ref foo(ref int x)
{
return x; // referans olarak, x'in kopyası olarak değil
}
Aslında kurallar bayağı karışık; ben henüz yararını anlamadım...
Bu arada o başlığın öncesinde ve sonrasında başka işlev türleri de var: 'ref', 'auto', 'inout'...
'inout' ilginç: O sayfada gösterilen üç işlev yerine tek bir işlev yazabiliyoruz. Dönüşün türünü, döndürülen parametreden otomatik olarak anlıyor:
int[] foo( int[] a, int x, int y) { return a[x .. y]; }
const(int)[] foo( const(int)[] a, int x, int y) { return a[x .. y]; }
immutable(int)[] foo(immutable(int)[] a, int x, int y) { return a[x .. y]; }
Yukarıdaki üç işlev için derlenen kodlar tamamem aynı. Tek fark, erişim hakları. Artık tek bir işlev yazılabiliyor:
inout(int)[] foo(inout(int)[] a, int x, int y) { return a[x .. y]; }
Orada 'inout', "döndürdüğüm parametrenin erişim hakkı ne ise" anlamına geliyor, ve döndürülen değere göre otomatik olarak 'const', 'immutable', veya değişken olabiliyor.
Ali
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]