January 02, 2023

Merhaba,

Bazen "demet", bazen "çok-öğeli" olarak karşılaşabileceğiniz tuple'lar birçok işinize yarayabilir. Aslında bu konu çok geniş ve kütüphanenin tüm olanakları şuradan okunabilir:

https://dlang.org/phobos/std_typecons.html#Tuple

Fakat örneklerle anlamayı kolaylaştırmak elimizde. Fıstıkçı Şahap ile başlayalım 😀

Aşağıda önce, sınıf içinde bir alias kullanarak Field Names(¹) tanımlanıyor ve tanımlanan isim alanları çerçevesinde 2 ayrı dizge işleniyor. Devamında son satırlarda Expand(²) ile bir çokuzlunun, ne kadar işleri kolaylaştırdığı görülüyor:

struct Data {
  string ad, soyad;

  string toString()
  {
    return ad ~ " " ~ soyad;
  }
}

class TupleNames
{
  import std.typecons;

  private Data data;
  alias Values = Tuple!(string, "adı",
                        string, "soyadı");
  void setNames()
  {
    import std.conv, std.uni;

    data.ad = data.ad.asCapitalized.to!string;
    data.soyad = data.soyad.toUpper;
  }

  Values getNames()
  {
    return Values(data.ad, data.soyad);
  }
}

import std.stdio;

void main()
{
  Data gidenVeri, gelenVeri = {    ad : "fıstıkçı",
                                soyad : "şahap" };
  with(new TupleNames)
  {
    data = gelenVeri;

    getNames.adı.write(" ");
    getNames.soyadı.writeln;
    // fıstıkçı şahap
    setNames(); // formatted name
    gidenVeri = Data(getNames.expand);
  }
  gidenVeri.writeln; // Fıstıkçı ŞAHAP
}

(DEVAMI GELECEK)

January 02, 2023

Burada da foreach ile nasıl kullanılacağı gösteriliyor. Aslında Ali hocanın şurada naklettiği bir başka özelliği karşılaştırmalı görmekteyiz.

Sizin bildiğiniz ve/veya güzel gördüğünüz örnekler varsa lütfen bu başlıkta paylaşın...

import std.typecons, std.stdio : writefln;

void main()
{
  alias Ş = Tuple!(  int, "plaka",
                  string, "şehir");

  auto şehirler = [ Ş(1, "Adana"),
                    Ş(10, "Balıkesir"),
                    Ş(15, "Burdur"),
                    Ş(34, "İstanbul"),
                    Ş(35, "İzmir") ];

  foreach(n, t; şehirler)
    n.writefln!"%d, %02d: %s"(t.plaka, t.şehir);

  import std.algorithm : filter;
  auto aralık = şehirler.filter!(t => true);

  foreach(plaka, şehir; aralık)
    plaka.writefln!"%02d: %s"(şehir);
} /* ÇIKTISI:

0, 01: Adana
1, 10: Balıkesir
2, 15: Burdur
3, 34: İstanbul
4, 35: İzmir

01: Adana
10: Balıkesir
15: Burdur
34: İstanbul
35: İzmir
*/

Başarılar...