| |
 | Posted by Ali Çehreli in reply to Salih Dincer | Permalink Reply |
|
Ali Çehreli 
Posted in reply to Salih Dincer
| On 1/2/23 07:52, Salih Dincer wrote:
> On Monday, 2 January 2023 at 15:02:38 UTC, Salih Dincer wrote:
>> D çokuzluların (Tuples) ayrı ayrı her elemanına açılayıcı bildirimler
>> (Deconstructing Declaration) verebiliyor muyuz?
Hayır, D'de yok çünkü D'de diğer dillerdeki anlamda çokuzlu bile yok:
- std.typecons.Tuple var ama kütüphane olanağı olduğundan C# vs. dilde bulunan o olanak olamıyor. (Bunun karşıtı olan bildiğim tek örnek, elemanları Tuple olan aralıklarını (range) foreach değişkenlerine açılmasıdır; örneği aşağıda.)
- std.meta.AliasSeq, işlev parametre değerleri, vs. gibi farklı çokuzlular da vardır ama bunların becerileri birbirlerine tam uymaz.
> Alası varmış, büyüksün Dlang!
Evet, D güçlü ama böyle bir olanağın dilde bulunduğunu söyleyemiyoruz.
> alias personel = Tuple!(string, "firstName",
> string, "lastName");
İlgisiz olarak: Hem küçük harfle 'personel' bir tür...
> class Personel
... hem de büyük harfle 'Personel' bir tür. Kodu okumayı güçleştirecektir. (Başıma gelmese yazmazdım. ;) )
Bu olarak D'de bulunsaydı çokuzlunun üyeleri doğrudan değişkenlere açılabilirdi:
auto t = tuple("merhaba", 20);
// İşte bunlar D'de yok:
(auto str, auto yaş) = t;
(string str, int yaş) = t;
Bununlar ilgili olarak en az bir DIP hatırlıyorum.
Yukarıda bahsettiğim foreach özelliği de şu:
import std;
void main() {
auto dizi = [ tuple("merhaba", 20), tuple("dünya", 30) ];
// Bu örnek için anlamsız bir 'range':
auto aralık = dizi.filter!(t => true);
// İşte otomatik olarak 'ad' ve 'yaş' olarak açılır:
foreach (ad, yaş; aralık) {
writeln(ad, ": ", yaş);
}
}
Yanılmıyorsam, bu olanak dile Walter'ın bile tam haberi olmadan zamanında derleyiciye katkıda bulunan bir programcı tarafından eklenmiş.
Ali
|