Thread overview
Deconstructing Declaration
Jan 02, 2023
Salih Dincer
Jan 02, 2023
Salih Dincer
Jan 02, 2023
Ali Çehreli
Jan 02, 2023
Salih Dincer
January 02, 2023

Merhaba Ali hocam,

D çokuzluların (Tuples) ayrı ayrı her elemanına açılayıcı bildirimler (Deconstructing Declaration) verebiliyor muyuz?

Örneğin C# 7'den itibaren bu özellik şurada tanıtılmış:

https://devblogs.microsoft.com/dotnet/new-features-in-c-7-0/

Teşekkürler...

January 02, 2023

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?

Alası varmış, büyüksün Dlang!

// D 2.0.83

import std.stdio, std.typecons;

alias personel = Tuple!(string, "firstName",
                        string, "lastName");

struct Data { string ad, soyad; }

class Personel
{
  private Data data;

  auto get()
  {
    import std.uni;
    personel result;

    result.firstName = data.ad;
    result.lastName = toUpper(data.soyad);

    return result;
  }
}

void main()
{
  auto aşçı = new Personel;
  Data veri = {
         ad : "Fıstıkçı",
      soyad : "Şahap"
  };
  aşçı.data = veri;
  aşçı.get.firstName.write(" ");
  aşçı.get.lastName.writeln;
  // Fıstıkçı ŞAHAP
}

SDB@79

January 02, 2023
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

January 02, 2023

Tekrar Merhaba Hocam,

Örneği servisle eve dönüyorken hızlıca yazdığım bir şeydi aşağıda işaret ettiğim başka bir başlıkta birçok düzeltme yaptım. Aslında bu örneklerin ana sayfada rasgele gelen kodlar içinde yer almasını istiyorum. Yeni bir yıla girdik, bazı şeylerin güncellenmesi motivasyonu arttırabilir.

Örneklerin forum harici yayınlanması için kiminle iletişime geçebilirim?

On Monday, 2 January 2023 at 17:05:49 UTC, Ali Çehreli wrote:

>

Yukarıda bahsettiğim foreach özelliği de şu:

    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ş);
    }
}

Çokuzlu demetlerin, bu şekilde kullanılabilmesi çok güzel, bizi köşeli parantezden kurtarıyor ya da bu örnekteki gibi konumuz çerçevesinde tanımlamak da mümkün.

Acaba expand daha akıllıca kullanılarak bu kütüphane olanağının sanki dil olanağıymış gibi işlev dönüş parametreleri gibi kullanılablir mi?

Teşekkürler...