April 01, 2023

Belki lazım olur...

Kod içinde zaten alışık olduğumuz versiyonu da yer alıyor ama işte bir alternatif diyebiliriz :)

import std.stdio;

alias strings = immutable(char)[][];
alias aBir = ayraçlıBirleştir;

auto ayraçlıBirleştir(string ayraç = "-", R)(R[] str ...)
{
  import std.array : join;
  return join(str, ayraç);
}

strings meyveler = [
    "ayva", "elma", "kavun"
];

void main()
{
  aBir!", "("karpuz", "armut").writeln;
  meyveler.writefln!"%-(%s-%)";
  meyveler.aBir.writeln;
}
/* ÇIKTISI:
karpuz, armut
ayva-elma-kavun
ayva-elma-kavun
*/
April 02, 2023

On Saturday, 1 April 2023 at 15:27:31 UTC, Salih Dincer wrote:

>

işte bir alternatif diyebiliriz :)

Python'a alternatif, D'yi öğrenmeye gelenler için ekrana yazma işlevini de pekala kodlayabiliriz. İşlevin tek sakıncası, Python'da şablon parametresi yerine işlev parametresine sep değişkeni ile yönlenlendirme yapılması. Bunu taklit etmek için de değerli bir kısaltmayı başka yerde kullanamayacağımız manasına gelir!

module sdb.python;

//package
string sep = ", ";

void print(R)(R[] str ...)
{ // v1
  import std.array : join;
  import std.stdio : writeln;
  enum defaultSep = ", ";
  if(sep == defaultSep)
  {
    str.join(defaultSep).writeln;
  } else {
    str[0..$-1].join(sep).writeln;
    sep = defaultSep;
  }
}

unittest {
  print("ayva", "elma", sep = "-");
  print("bıçak", "çatal", "kaşık");
  print("A","B", "C", "D", sep = " < ");
  assert(sep == ", ");
} /* ÇIKTISI:
ayva-elma
bıçak, çatal, kaşık
A < B < C < D
*/

Yoksa gelmez mi! Mesela package kullanmak akıllıca olur muydu?

Teşekkürler...