Thread overview
"Kelime" yapısı tasarımı
Nov 03, 2011
zafer
Nov 04, 2011
zafer
November 04, 2011
struct Kelime
{
	string seviye;
	string soru;
	string[] cevaplar;
	string[] zitAnlamlar;
}

kelimematik projesi için tasarladığım kelime yapısı yukarıdaki gibi, sık sık kararsız kaldığım bir konu tekrar karşıma çıkınca buradaki değer verdiğim kişilerinde fikrini almak istedim.

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. Hatta biraz daha detaylı araştırsak ubyte tipi daha doğru bir seçim gibi, neyse ben seviyeyi yapı içerisinde string tipinde tanımladım dosyadan yazarken ve okurken tip dönüşümü ile uğraşmamak için böyle yaptım. Acaba yaptığım doğru mu? Emin olamadım, yani aslında bu değeri gerçek tipi olan int olarak mı tutmak daha doğru olur yoksa bu şekilde string tipinin kullanımından faydalanmak mı?

Sizler ne dersiniz?

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

November 04, 2011

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. ]

November 04, 2011

Doğrusu seviye işlemini ben biraz daha farklı düşünmüştüm. Yani dosya tarafında seviye bilgisini yine bir rakamla temsil etmeyi ama program tarafında bu rakamlara karşılık gelecek bir enum tanımlayıp kodlamada bunu kullanmayı düşünmüştüm.

Senin yazdığın örneği inceleyince aslında ne kadar dar düşündüğümü anladım. Seviye bilgisinin dosya içinde okunabilmesi hem çok kullanışlı hemde dosyayı hiç bilmeyen birisinin bile hemen kavrayabileceği bir durum, bu tasarım doğal olarak seviye bilgisini kodlar içinde de daha okunaklı ve takip edilebilir bir hale getiriyor. Kesinlikle çok temiz ve güzel bir çözüm.

Burada bir şeyi daha belirtmek istiyorum. Gerçekten bir ekip ile karşılıklı paylaşımlarla geliştirilen bir proje kesinlikle daha kaliteli oluyor. Tabi bu karşılıklı paylaşım ve geliştirme bir disiplin içine alınıp düzenlenirse bugün bakıp ne güzel programlar dediğimiz bir çok programın geliştirilmeside sanırım daha basit bir hale geliyor.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]