Forum: Projeler KelimeMatik RSS
"Kelime" yapısı tasarımı
zafer #1
Üye Tem 2009 tarihinden beri · 710 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: "Kelime" yapısı tasarımı
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?
https://github.com/zafer06 - depo
acehreli (Moderatör) #2
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4536 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
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.

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.

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ı...)

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
zafer #3
Üye Tem 2009 tarihinden beri · 710 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
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.
https://github.com/zafer06 - depo
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Forum: Projeler KelimeMatik RSS
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-12-15, 11:51:44 (UTC -08:00)