Sıfırıncı parametre, hep program çalıştırılırken yazılan adı gösterir: 'sil', 'programlarım/sil', veya başka bir şey. Bazı programlar bu parametreye bakarak davranışlarını değiştirirler. Örneğin, GNU'nun meşhur C ve C++ derleyicisi 'gcc' diye başlatıldığında C, 'g++' diye başlatıldığında C++ derleyicisi olarak çalışır. O iki isim aslında aynı programın farklı adıdır (symbolic link marifetiyle):
'
$ file /usr/bin/gcc
/usr/bin/gcc: symbolic link to gcc-5
$ file /usr/bin/g++
/usr/bin/g++: symbolic link to g++-5
'
Alıntı:
> string değilde direk sayısal değer okutup işlem yapabiliyormuyuz
D gibi, türlerin derleme zamanında denetlendiği dillerde olanaksız. main'in parametresini string olarak yazdıysak stringdir. Burada çok önemli bir nokta var: Satıra "42" yazdığımızda bile onun aslında '4' ve '2' karakterlerinden oluşan bir string olduğunu anlamak gerek. O iki karakterin 42 değerine karşılık gelen bir tamsayı olduğuna ancak anlaşmalarla karar verebiliriz. Örneğin, yazılan 42 belki de onaltılı sayı sisteminde düşünülecektir ve 4 çarpı 16 artı 2 anlamındadır. Bizim yazdığımız main'i çağıran programın başlangıç düzeneğinin bu konuda karar vermesi olanaksızdır. Çünkü hatta belki de "42" gerçekten de string olarak kalması gereken bir isimdir.
Aslında Erdem'in gösterdiği getopt örneğinde de durum aynı. Güzel olan, getopt'a dolaylı olarak şu değişkenin değerine otomatik olarak dönüştür demiş oluyoruz.
Açıkça tür dönüştürmenin bir yolu, daha önce de karşılaştığımız ConvException hatasını atabilen std.conv.to'dan yararlanmaktır:
import std.stdio;
import std.conv;
int main(string[] args) {
if (args.length != 2) {
// Hata mesajlarını stderr'e yazdırmak âdettendir
stderr.writeln("Kullanım: %s <adet>", args[0]);
// Sıfırdan farklı değerler programın başarısızlıkla sonlandığını
// belirtir
return 1;
}
int adet;
try {
adet = to!int(args[1]);
}
// Burada özellikle ConvException hatasına da bakabilirdik ama o da aslında
// bir Exception olduğundan hatayı böylece daha genel olarak da
// kullanabiliriz.
catch (Exception hata) {
stderr.writeln("HATA: ", hata.msg);
// Gerektiğinde ayırt edilebilsin diye bu çeşit hatayı farklı bir
// değerle bildiriyoruz
return 2;
}
foreach (i; 0 .. adet) {
writeln(i);
if (i == 10) {
writeln("[...]\nBu kadar yeter herhalde... :)");
break;
}
}
// Herşey yolunda gitti
return 0;
}
Ali
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]