std.cstream (ve başka akımlar) Phobos'tan emekliye ayrılacaklarına göre standart giriş/çıkış akımı olarak std.stdio'nun stdin ve stdout'unu kullanmak gerek; değil mi? Bu akımlar C'de de aynı isimdeler.
Aslında serbest olarak yazdığımız writeln ve readln zaten stdout ve stdin'i kullanıyorlar. Örneğin readln'in tanımı şöyle:
string readln(dchar terminator = '\n')
{
return stdin.readln(terminator);
}
D.ershane'de girişten bilgi almak için henüz aşağıdakindan daha temiz bir şey bulamadım:
import std.stdio;
import std.string;
import std.conv;
void main()
{
write("İsminiz: ");
auto isim = to!string(strip(readln()));
write("Yaşınız: ");
auto yaş = to!int(strip(readln()));
writefln("Sevgili %s, ben de haftaya %s yaşımı dolduracağım", isim, yaş);
}
Fazla karmaşık değil, değil mi? readln() satır okuyor; strip, baştaki ve sondaki boşlukları kırpıyor; to da dizgiden belirtilen türe dönüştürüyor. Yani to, format'ın tersi: format string'e dönüştürür; to, string'den dönüştürür. (Aslında to başka türlerden başka türlere de dönüştürür; bir tarafın string olması şart değildir.)
Aslında bir de parse var. parse, dönüşümleri uyguladıkça taramakta olduğu string'i de tüketir:
import std.stdio;
import std.string;
import std.conv;
void main()
{
writeln("Toplanacak sayıların hepsini tek satır olarak girin: ");
auto satır = strip(readln());
double toplam = 0;
int adet = 0;
while (satır.length) {
toplam += parse!double(satır);
++adet;
munch(satır, whitespace);
}
writefln("%s sayının toplamı %s, ortalamaları %s",
adet, toplam, toplam / adet);
}
Yukarıdaki programdaki 'satır', parse tarafından parça parça tüketiliyor. parse'ın belgesinde bir özelliğe dikkat çekmişler: C'nin scanf ailesinden işlevleri, tararken boşlukları atlarlar. parse atlamıyor! Onun için munch'ı kullanarak her adımda dizginin başındaki boşluk karakterlerinden kurtuluyoruz.
Boşluk karakterlerini teker teker kendimiz yazmak yerine de std.string'de tanımlı olan whitespace'i kullanıyoruz. whitespace şöyle tanımlanmış:
immutable char[6] whitespace = " \t\v\r\n\f"; /// ASCII whitespace
Sırasıyla şu karakterler: boşluk, tab, düşey tab, satır başı, yeni satır, yeni sayfa (form feed).
Ali
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]