April 10, 2022

Merhaba,

Az önce farkettiğim ve bunu neden kitaplıklarımızdaki (örneğin "container" gibi) modüllere koymadığımıza hayret ettiğim bir kolaylık var. Tabi Ali hocadan veya başkasından "ben zaten bunu yapıyorum" ünlem cümlesi alabiliriz ama ben de (sanırım) çoğunluk gibi yapıyor ve köşeli parantezi şöyle usulca yerleştiriyordum:

string[] strArr;
strArr ~= "muz";
strArr ~= [ "karpuz", "avakado" ];
strArr.writefln!"%-(%s, %)";
typeid(strArr).writeln; /* ÇIKTISI:

muz, karpuz, avakado
immutable(char)[][]

*/

Buraya kadar tamam, janjanlı bir durum yok ama onun yerine şöyle bir alias kullanmak, işleri kolaylaştırmaz mı?

alias immutable(char[]) [] strings;

Sondaki s'ye dikkat! Tabi türü, nedense önceki standart tanımlamasından (immutable(char)[][]) farklı. Şimdilik oraya takılmayalım çünkü farklı görünen ama birbirinin aynısı tepkiler veren durumlar var; konuşcaz! Belki 11'deki toplantıda?

Neyse, bir de örneklere geçelim:

import std.array, std.stdio;
void main()
{
  strings s = ["beş", "dört"];
  typeid(s).writeln; // immutable(immutable(char)[])[]
  s ~= "bir";
  s ~= "iki";
  s.writefln!"%-(%s, %)"; // beş, dört, bir, iki

  auto a = appender(&s);
  typeid(a).writeln; // std.array.RefAppender!(immutable(string)[]).RefAppender
  a.put = "üç";
  immutable writeProtect = a.data;
  writeProtect.writefln!"%-(%s, %)"; // beş, dört, bir, iki, üç
  typeid(writeProtect).writeln; // immutable(immutable(immutable(char)[])[])
  //writeProtect ~= "test"; /*** DERLEME HATASI ***/
}

Appender'ı şu sebepten denedim: Acaba kendi sarmalamamızı yapabilir miyiz? Yani, örneğin auto writeProtect = a.rdata; şeklinde işimiz bitince veriyi bir yere güvenli şekilde gönderir ve customize appender nesnesini de sileriz. Bence akıllıca, deneyecem...

Başarılar...

April 09, 2022
On 4/9/22 19:56, Salih Dincer wrote:

> strArr ~= [ "karpuz", "avakado" ];

(İlgisiz konu: Galiba "avokado" diye yazılır.)

> Buraya kadar tamam, janjanlı bir durum yok ama onun yerine şöyle bir
> alias kullanmak, işleri kolaylaştırmaz mı?

Evet. Hem okumayı kolaylaştırır hem de ileride o türü uyumlu başka bir türle değiştirmek gerektiğinde kolaylık sağlar. Bazen tek noktayı değiştirmek yeter.

>
> ```d
> alias immutable(char[]) [] strings;
> ```
>
> Sondaki s'ye dikkat!

Programlarda biraz daha bilgi taşıyacak biçimde strings yerine örneğin 'Meyvalar', 'DosyaListesi', vs. de denebilir.

Ali