Alıntı (zafer):
> XML dosyasında seviye bilgisi 1,2,3 gibi sayma sayıları ile temsil ediliyor, yani bilgisayar dilince seviye int tipinde bir değer içeriyor.
enum daha uygun olabilir. O zaman sayısal değer vermek de gerekmez:
enum Seviye { düşük, orta, üst }
Öyle olunca dosya içinde de sihirli değerler yerine okunaklı isimler görürüz.
Alıntı:
> ubyte tipi daha doğru bir seçim gibi
Öyle uç türleri ancak özel durumlarda ve gerçekten iyi bir nedeni varsa düşünmek gerekir. Zaten program içindeki işlemlerde ubyte gibi değerler de int olarak işlenirler. Örneğin işlev parametresi olarak geçirilirken int'tirler.
Alıntı:
> seviyeyi yapı içerisinde string tipinde tanımladım dosyadan yazarken ve okurken tip dönüşümü ile uğraşmamak için
Yazma ve okuma yalnızca bir kere, program içindeki kullanımı olasılıklar bir çok kere... Yazma hiç emek harcamıyoruz, okurken de otomatik dönüşümler kolay:
import std.stdio;
import std.string;
import std.conv;
enum Seviye { düşük, orta, üst }
void yaz(string dosyaİsmi, Seviye seviye)
{
auto dosya = File(dosyaİsmi, "w");
dosya.writeln(seviye);
}
Seviye oku(string dosyaİsmi)
{
auto dosya = File(dosyaİsmi, "r");
Seviye seviye = to!Seviye(strip(dosya.readln()));
return seviye;
}
void main()
{
string dosyaİsmi = "seviye_dosyasi.txt";
yaz(dosyaİsmi, Seviye.orta);
writeln("okunan seviye: ", oku(dosyaİsmi));
}
(Not: Keşke readf(" %s", &seviye) yazımı da çalışsaydı. Phobos'un şimdilik bir eksikliği olmalı...)
Alıntı:
> gerçek tipi olan int olarak mı tutmak daha doğru olur yoksa bu şekilde string
int (veya enum) doğru.
string kullandığımız zaman tür bilgisini atmış oluruz. Kodun okunaklılığı düşer çünkü Seviye gibi açık bilgi yerine string gibi genel bir bilgi görürüz. Ayrıca derleme zamanında derleyicinin tür denetimlerinden de yararlanamayız. Seviyeyi string olarak alan işleve yanlışlıkla 'kelime' gibi başka bir string gönderebiliriz ama derleyici hiçbir uyarıda bulunamaz çünkü string türleri tutmuştur.
Ali
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]