Forum: Projeler dkv RSS
Dkv Yayınlandı Ve Dkv2.0(Kod adı: dkvG) İçin Kollar Sıvandı.
canalpay (Moderatör) #1
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: Dkv Yayınlandı Ve Dkv2.0(Kod adı: dkvG) İçin Kollar Sıvandı.
Artık dkv1'in benim tasarıma uygun olarak çalıştığını ve hatalardan oldukça arındığını düşünmekteyim. Bu yüzden şuanda kararlı sürümünü duyuruyorum.

Bu kararlı sürümde neler mi var ?

1. Veritabanı oluşturabiliyor.
2. Tablo oluşturabiliyor.
3. Veri dosyası oluşturabiliyor.
4. Veri dosyasını silebiliyor.
5  Tablo silinebiliyor. (İçinde veri dosyası varsa silinmez.)
6. Veri tabanı silinebiliyor. (İçinde tablo varsa silinmez)
7. __sil__() işlevi ile belirtilen dosya yada dizin(alt dizinleri ile birlikte.) silebiliyor.
8. veri_güncelle işlevi ile veri dosyasındaki veriyi silip yeni veriyi yüklüyor.
9.veri_değiştir işlevi ile veri dosyasındaki veriyi değiştiriyor(dkv için std.string'deki replace komudu sayılır.).
10. v_yedekle ile veriyi yedekleyebiliyor.

Ve bu işlevlerin hepsinin belgesi var. (Belki belgelerin üzerinden geçmek gerekir.) Ayrıca hemen denemek için makefile dosyası da var.
Yani bence bir projede olması gereken her bir şey var ve proje doyum aşamasına geldi. Şuan sadece kod temizliği ve hata düzeltimi yapmayı düşünüyorum.

Ve daha hızlı bir dkv geliyor. Dkv 2. Bu tasarım aşamasında ne gibi farklar olacak:
1. Anahtar sistemi geliyor.
2. Eşleme tablosu oluşturuluyor ve aynı dosyayı 2.kere çağırıyorsanız bekleme süresi çok düşüyor(Bencmarka göre 0 dı galiba :-) ).
3. Şu anlık kodlar daha temiz :-)

Şuan tasarım aşamasında yani tasarım hakkında fikirleriniz çok önemli :-)

Şuanda dkv2 ile ilgili ilk hata kaydınıda açmış bulunmaktayım.
Hata kaydı için : http://code.google.com/p/dkv/issues/detail?id=1&can=7 (Hata düzeltildi)
Bu mesaj canalpay tarafından değiştirildi; zaman: 2010-01-22, 06:43.
acehreli (Moderatör) #2
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4412 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
canalpay:
kararlı sürümünü duyuruyorum.

Tebrikler! :)

Projeleri böyle küçük adımlar halinde oluşturmak çok daha kolay değil mi. Hepsini bir projede gerçekleştirmek zor olurdu.

dkvG'nin sonundaki G'yi çözemedim. :)

okunmuşVeri'ye gerek olmadığını düşünüyorum. Şimdilik kullanıldığı kadarıyla yalnızca veri_oku'nun içinde tanımlanmalı. Hatta while(dosya.available) bloğunun içinde.

Bir de, benim alışık olduğumdan daha az boşluk kullanıyorsun. Umarım yakında boşlukları ve boş satırları daha çok sevmeye başlarsın da benim gibiler daha rahat okuyabiliriz. ;)

Ali
canalpay (Moderatör) #3
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Projeleri böyle küçük adımlar halinde oluşturmak çok daha kolay değil mi. Hepsini bir projede gerçekleştirmek zor olurdu.
Kesinlikle!

dkvG'nin sonundaki G'yi çözemedim. :)
Yeni bir sürüm, yeni özellikler ve gelişmiş bir sürüm.(Yani buradaki G gelişmişliği ifade ediyor. Birazda geliştirilme aşamasında olduğunu ifade ediyor. Çift anlam :-) )
okunmuşVeri'ye gerek olmadığını düşünüyorum. Şimdilik kullanıldığı kadarıyla yalnızca veri_oku'nun içinde tanımlanmalı. Hatta while(dosya.available) bloğunun içinde.

Bu cümleyi pek anlayamadım. Eğer okunmuşVeri diye bir değişkene gerek yok diyorsanız zaten önceden yoktu ama iki satırı yanyana ekleyebilmek için onu ekledim.

Yok sadece sınıfın üyesi olarak tanımlanmasına gerek yoktu sadece işlevde tanımlansa yeterli diyorsanız içimdeki ses ileride lazım olabilir şimdilik öyle kalsın daha sonra düzeltirsin diyor :-)

Bir de, benim alışık olduğumdan daha az boşluk kullanıyorsun. Umarım yakında boşlukları ve boş satırları daha çok sevmeye başlarsın da benim gibiler daha rahat okuyabiliriz. ;)


Seviyor sayılırım ama kaç satır kod yazmışım diye baktığımda sırf boşlukla çoğaltılmış satır sayısı görünce içimdeki ses bana şöyle diyor: "Ne hava atmaya çalışıyorsun 10 satır kod yazmışsın 50 satırda yazmışsın. Şimdi sen büyük bir program mı yazdın ? Böyle ancak kendini kandırırsın" diyor. Ayrıca boşluklar ile de ilgili olarak ne yazık ki python beni boşluk düşmanı yaptı :-) Daha önemlisi de editörümün boş satırlar ile ilgili sorunları var.(Tencere yuvarlanmış kapağını bulmuş :-) )Ama en kısa zamanda tangodan kopya çekmeliyim. Çok güzel bir tasarımı var :-)


Şuan size soracaklarım var.
1.Dkv2'nin tasarımı nasıl olmuş ?

2.Sizce anahtar ile anahtarın verisini silme işini nasıl yaparım.

3.Birde normalde bir dosyadan belirli bir veri nasıl silinir ?
acehreli (Moderatör) #4
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4412 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
canalpay:
Yok sadece sınıfın üyesi olarak tanımlanmasına gerek yoktu sadece işlevde tanımlansa yeterli diyorsanız

Değişkenler aksine bir neden yoksa, her zaman için kullanıldıkları ilk yere en yakın noktada tanımlanmalıdır. O durumda, while bloğunun için oluyor.

içimdeki ses ileride lazım olabilir şimdilik öyle kalsın daha sonra düzeltirsin diyor :-)

Ah... O sesi çok iyi bilirim. :) Kulaklarını tıkamayı şimdiden öğrenmeye bak. Her zaman için en basit olan ve yalnızca şu anda gereken şeyi yap.

Kaldı ki, özellikle bu durum için; bir işlevi içinde kullanılmış olan bir değişkenin bütün veri tabanı nesnesinde yeri olmamalı.

Sınıfları da olabildiğince küçük tasarlamak isteriz. Özellikle çok nesnesi bulunan sınıfların yalnızca gereken üyelerinin olması bellek kaybını da önler.

sırf boşlukla çoğaltılmış satır sayısı görünce içimdeki ses bana şöyle diyor:

Dert etme. :) Bir yarış yok. Üstelik boş satırların "kod satırı" sayıldıklarını hiç sanmıyorum.

10 satır kod yazmışsın 50 satırda yazmışsın

Eğer daha okunaklı olacaksa lütfen öyle yap. :)

sen büyük bir program mı yazdın ? Böyle ancak kendini kandırırsın" diyor.

Hiçbir ilgisi yok. :)

1.Dkv2'nin tasarımı nasıl olmuş ?

Alt işlerini başka sınıflara yaptırabilir. Örneğin bu kadar karmaşık bir üyeyle başa çıkman çok güç olacak:

string eş[string][string][string][string];

Veya, kullanıcılar birbirleriyle aynı türden olan bu kadar parametreyi doğru kullanma konusunda sıkıntı yaşayacaklar:

int veri_ekle(dchar[] veri_, dchar[] anahtar_ ,
                  dchar[] veriAdı_, dchar[] vTAdı_, dchar[] tAdı_ )

Onun yerine, işleri sınıflara paylaştırman daha iyi olur. Eğer veri tabanı "tablolardar oluşan bir kavram" ise, senin sınıfının da Tablo nesnelerinden oluşması gerekir.

Eğer tablo kavramı "anahtarlı verilerden" oluşan bir kavramsa, senin Tablo sınıfının da yalnızca o işten sorumlu olması gerekir.

Öyle yaparsan, veri_ekle işlevi'nin de belki de Tablo'nun bir üyesi olması doğru olur.

(Doğrusunu istersen, bunları yaşayarak görmen de önemli. O yüzden bazen sesimi çıkartmıyorum. Kodladığın her ay, bir önceki ay yaptıklarına bakıp "nasıl böyle yapmışım" diyebilirsin. Bana olmuştu, hâlâ da olur. :) )

Ayrıca, mantık olarak genelden özele doğru düşünmek daha kolay olabilir (eğer aynı parametreleri kullanacaksa, sıralarını değiştiriyorum):

veri_ekle(veri_tabani_adi, tablo_adi, anahtar, veri);

(veriAdı_'nı da anlamadım. Anahtar o değil mi?)

2.Sizce anahtar ile anahtarın verisini silme işini nasıl yaparım.

veri_ekle'nin paraleli olmalı, ama veri bulunmamalı:

veri_sil(veri_tabani_adi, tablo_adi, anahtar);

Ama yukarıda da dediğim gibi, bu işlev Tablo'nun bir sınıfı olabilir. O zaman ne veri tabanı adı, ne de tablo adı gerekir:

benimTablom.veri_sil(anahtar);

Temiz... :)

3.Birde normalde bir dosyadan belirli bir veri nasıl silinir ?

Silinmez (veya silinemez). Doğrusu: Bütün veri belleğe okunur. Bütün işlemler (silme dahil) bellekte yapılır. Sonra bütün dosya baştan tekrar yazılır.

Bu işlem sırasında önceki dosyanın üstüne yazmak yerine; o dosyanı ismi başka bir isme değiştirilebilir: veri_tabani.bak, veri_tabani.eski, vs.

Ali
canalpay (Moderatör) #5
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
İlk önce tasarım hakkında açıklamada bulunayım:
[Resim: http://img402.imageshack.us/img402/8088/dkv2tasarm.png]

Eğer resmi iyi okuyamıyorsanız iki kere resme tıklamanız yeterli.(ilkinde ima... diye siteye geçecek. 2.tıkta sadece o resim bulunacak şekilde açacak.)

Değişken açıklamaları(Belgede yazmıyor mu ? Hımm dkv2.0'nin belgesi yok.):
vTAdı      = veritabanı adı
tAdı         = tablo adı
veriAdı    = veri dosyasının(.dkv dosyasının) adı
anahtar   = dosyada *-*anahtar*-* şekilde belirtilen yer.

Eğer şöyle bir dkv dosyası olursa(Resimdeki gibi):
*-*ad*-*
canalpay
*-*yaş*-*
15
16

veri_sil("ad"d.dup diğer parametreleri biliyorsunuz.) dediğimde:
*-*ad*-* ve canalpay satırlarını(Yani 1 ile 2.satırları ) silmesini istiyorum. Bunu nasıl yapabilirim ? (Yani daha çok kod olarak soruyorum. Yoksa tasarımını nasıl yapacağımı çıkartabiliyorum.)

Eğer anlamadığınız yer olursa tekrar sorun lütfen. Anlaşılabilir yazmamış olabilirim.

Diğer dediklerinize katılıyorum ama belki şu şekilde yapabilirim. Dkv2.0'a olduğu gibi devam ederim. Ve parametreleri sizinki gibi kullanan bir sınıf(Daha doğrusu sınıf değil işlev yazmak istiyorum. Çünkü sınıfları bilmeyenler olabilir.) yazarım.
acehreli (Moderatör) #6
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4412 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
canalpay:
Eğer şöyle bir dkv dosyası olursa(Resimdeki gibi):
*-*ad*-*
canalpay
*-*yaş*-*
15
16

veri_sil("ad"d.dup diğer parametreleri biliyorsunuz.) dediğimde:
*-*ad*-* ve canalpay satırlarını(Yani 1 ile 2.satırları ) silmesini istiyorum.

"Dosya"dan mı silmesini istiyorsun? Silemezsin. Bellekteki verilerden sileceksin ve sonra bütün verileri tekrar dosyaya yazacaksın. Doğal olarak o anahtar artık dosyada bulunmayacak.

Bellekteki bir eşleme tablosundan veri silmek için... D.ershane'ye bakıyorum... ve "Eleman silme" başlığı altında buluyorum:

  http://ddili.org/ders/d/esleme_tablolari.html

günSıraları.remove("Salı");

Yani senin verilerin içinde, o anahtarın verisi hangi eşleme tablosunda bulunuyorsa, ona .remove diyeceksin.

Bu arada, o d.dup'lara gerçekten gerek oluyor mu? Parametreleri const dchar[] yapmak galiba işe yarıyor; ve çok daha temiz:

void foo(const dchar[] a)
{}
 
// çağırırken şu çalışıyor:
    foo("abc");

Ali
canalpay (Moderatör) #7
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj #5
Sanırım şu şekilde yaparım:
1.dosyayı tamamen oku.
2.eşleme tablosuna aktar.
3.eşleme tablosundan gereken yerleri sil.
4.tekrar dosyaya yaz.

Eşleme tablosundan string[string][string][string][string] deneme; deki bir veriyi nasıl sileceğimi de buldum. Örn:
    string[string][string][string][string] deneme;
    deneme["11"]["22"]["33"]["44"] = "silinecek";
    writeln(deneme["11"]["22"]["33"]["44"]);
    deneme["11"]["22"]["33"].remove("44");
    writeln(deneme["11"]["22"]["33"]["44"]);

Yaşasın son satır hata verdirtiyor. Demek ki silinmiş. Ama d.ershaneye eklemek gerekiyor.(Yani sadece ss[string] değil ss[string][string][string]'de tanımlanabildiği ve istenen şeyin nasıl silineceğini belirtmek gerekiyor bence.)
Bu mesaj canalpay tarafından değiştirildi; zaman: 2010-01-22, 10:52.
canalpay (Moderatör) #8
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
2 dakika farkla yazmışız :-)
Bu arada, o d.dup'lara gerçekten gerek oluyor mu? Parametreleri const dchar[] yapmak galiba işe yarıyor; ve çok daha temiz:


Nedense kendime parametrenin değişmeyeceğini garantileyemiyorum :-) Bence kararlı sürüme ulaştığında bu const işi yapılabilir(Örnek olarak dkv1'inki yapılabilir.).


Dershanedeki dersinizi de buldum ama keşke ddili.org'un sadece derslerde arama yapabileceğimiz bir arama motoru olsa.
acehreli (Moderatör) #9
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4412 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj #7
canalpay:
1.dosyayı tamamen oku.
2.eşleme tablosuna aktar.

Evet: o işi eeen başta tek bir kere yap.

3.eşleme tablosundan gereken yerleri sil.

Veya başka işlemleri de yap. Saatler geçsin. vs. vs.

4.tekrar dosyaya yaz.

Evet: eeen sonunda (sonlandırıcı işlev içinde) ve eğer gerekiyorsa (değişiklik varsa) yaz. Veya, kullanıcı "kaydet" derse yaz.

Ama d.ershaneye eklemek gerekiyor.(Yani sadece ss[string] değil ss[string][string][string]'de tanımlanabildiği ve istenen şeyin nasıl silineceğini belirtmek gerekiyor bence.)

Teşekkürler. Bu gibi önerilere ihtiyacım var. :)

Ali
Mengu (Moderatör) #10
Kullanıcı başlığı: NONSERVIAM
Üye Tem 2009 tarihinden beri · 347 mesaj · Konum: Dersaadet
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
ceviz'den bir dostla veritabani sistemi yazmak istiyorduk uzun suredir. gerci biz python ile yazacaktik ama canalpay ustad d ile yazmis. nereden baslayacagimizi bilemedik. nasil bir mimari kullaniyorsunuz siz hocam?
http://www.mengu.net - some kind of monster
canalpay (Moderatör) #11
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
ustad gibi sözcükler söylemeyin lütfen. Çünkü ben buradaki en bilgisiz ve belkide en tembel insanım :) Ve ayrıca aynı sözcükler Ali Bey içinde kullanılıyor ve Ali Bey'e ayıp oluyor :-)

Benimki tam olarak veritabanı sistemi sayılmaz. Çünkü ben daha mysql gibi veritabanını kullanmayı bile tam bilmiyorken ona benzeyen bir şey yazmam mümkün değil.

Benimki sadece Phobos kütüphanesinin olanaklarını kullanarak daha basit ve daha kolay veri depolayabilceğim bir sistem.

Hala merak ediyorsanız sistem hakkında çok basit şeyler anlatayım.
Veritabanı sistemlerinde ilk önce veritabanı oluşturulur. Dkv'de de aynı mantıkla gittim ve ilk önce veritabanı oluşturtuyorum. Bunun için dizin(klasör) oluşturuyor.(Konsol komutu verdirterek oluşuyor.)

Sonra veritabanlarında tablo oluşturulur. Dkv'de de aynı mantıkla gittim veritabanı dizininde bir dizin daha açtırttım. Bunada tablo dedim.

Bundan sonrası biraz daha farklı diğer veritabanı sistemlerinden.

Bundan sonra veri yazma için bir dosya oluşturuyor. Buna sanırım normal veritabanlarında alan deniyor.

Dosyaya veri kaydederken ise anahtar sistemi dediğim bir sistem ile kaydediyor. Bu ise normal veritabanından  asıl farkı.

dosyaya veri yazarken anahtar belirtiyorsunuz. Örneğin Dkv veritabanı mı ? diye. Dkv bunu *-*Dkv veritabanı mı ? *-* diye kaydediyor. Sonra veriyi giriyorsunuz ve alt satıra veriyi ekliyor.

Örneğin iki veri kaydedilmiş bir dosya:
*-*Dkv veritabanı mı ? *-*
Bilmem.
Olabilir ama o kadar kaliteli değil ki ?
*-*dkv iki satırı destekledi bir satırı da destekler mi*-*
evet.


Burda gördüğünüz gibi "*-*" ile anahtar dizgileri belirtiyorum. Sonra tekrardan "*-*" ile karşılaşırsa artık verinin bittiğini anlıyor.

Dosyadan veriyi okurken ise eşleme tablosuna aktarıyorum. Böylece dosyadan istediğiniz kadar veriyi çekin yinede hız kaybı yaşamıyor. (Bu çok cüretkar bir cümle oldu ama öyle :-) ) Eğer eşleme tablosuna aktardıktan sonra yine dosyaya veri yazılırsa ve yine okuma işlemi yapılırsa yine eşleme tablosuna aktarılıyor. Böylece hiç okurken veri kayıbı ile okunmuyor.

Böylece aynı dosyadan veriye istediğiniz veriye erişirken istediğiniz kadar erişin hız kaybı normal veritabanı gibi yaşanmıyor ama bir kere okumak için açtığınızda herhalde normal veritabanından daha yavaş oluyor.

Diğer işlemler ise silme işlemi filan. Veri silerken eşleme tablosundan veriyi silip tekrar dosyayı oluşturuyorum.
Ayrıca lazım olur diye yedekleme işlemi filan var.

Şuan tek eksiği girilen veri hakkında bilgisi yok. Kaç tane veri girdi, başlıkları ne filan...

(Python için nasıl yapacaksınız tam bilmiyorum. Çünkü python ile yazınca veritabanı çok daha yavaş çalışacaktır. Her ne kadar dosya işlemleri D ile aynı süre alsada. )
acehreli (Moderatör) #12
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4412 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
dkv'ye şimdi tekrar baktım. Geliştirilecek bir noktası, parametreleri azaltmak olabilir. Beni endişelendiren, kullanıcı kodunda dkv çağrılarının hep çok uzun olmalarının gerekmesi... Beş altı tane dchar[] parametre olunca, yanlışlıkla birbirlerinin yerine yazılabilirler ve derleyici de hata veremez.

Henüz dkv'yi kullanmadığım için tam emin değilim ama, programların bazı noktalarında tek bir "veri tabanının, tablosunun, verisi" ile ilgileniyor olabiliriz. Onunla yaptığımız her işlemde bunları tekrar tekrar yazmak hem hataya yol açabilir, hem de tekrar olduğu için gereksizdir.

Acaba bir "veri erişicisi" gibi bir yapı döndürülebilir mi? Böylece bütün işlemler onun üzerinde yapılabilir (ben parametrelerin sırasını da değiştirerek gösteriyorum; anahtar değerden önce):

oyunKarakteri.anahtar_ekle("enerji", dtext(enerji));

oyunKarakteri, tablonun kendisinden başta edinilmiş olabilir:

auto oyunKarakteri = tablo.veri("Zartagon");

tablo da örneğin veri tabanından edinilmiştir:

auto tablo = benimOyununVeriTabanı.tablo("karakterler");

Bu yapılar (veya sınıflar) son derece basit olarak, kendilerinin üstündekinin bilgisini tutabilirler.

Ve sonunda örneğin en baştaki gibi

oyunKarakteri.anahtar_ekle("enerji", dtext(enerji));

yazınca, aynı istek, oyunKarakteri'nin kendi içinde tutmakta olduğu tablo nesnesine gönderilir ama üye değişkende tutulan veriAdı_ ek bilgisiyle:

tablo.anahtar_ekle(veriAdı_, anahtar_, değer_);

Ondan sonra, tablo da bu isteği kendi içinde aklında tutmakta olduğu veri tabanına iletir:

veriTabanı.anahtar_ekle(tablo_, veriAdı_, anahtar_, değer_);

O da en sonunda dkvG nesnesine:

benim_dkvG.anahtar_ekle(taban_, tablo_, veriAdı_, anahtar_, değer_);

Görev, yukarıdan aşağıya doğru iletilmekte ve her katman bir parça eklemektedir. Böylece kullanıcının bunları tekrarlaması gerekmez.

Bunları yazarken aklıma gelen başka bir kolaylık, eğer bunların opIndex ve opIndexAssign işleçleri yüklenirse, o zaman daha da kolay olarak şöyle yazılabilir:

oyunKarakteri["enerji"] = dtext(enerji);

Program ilerledikçe sonra tekrar kolayca:

oyunKarakteri["enerji"] = dtext(yeniEnerji);

Ali
canalpay (Moderatör) #13
Kullanıcı başlığı: Can Alpay Çiftçi
Üye Tem 2009 tarihinden beri · 1133 mesaj · Konum: İzmir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
dkv'ye şimdi tekrar baktım. Geliştirilecek bir noktası, parametreleri azaltmak olabilir. Beni endişelendiren, kullanıcı kodunda dkv çağrılarının hep çok uzun olmalarının gerekmesi... Beş altı tane dchar[] parametre olunca, yanlışlıkla birbirlerinin yerine yazılabilirler ve derleyici de hata veremez.

Hatırlarsanız Deniz.d diye bir şey geliştirmiştim. Bu o parametreleri azaltmak için. Onla bir kere veritabanına bağlanıyorsunuz daha sonra otomatik olarak o veritabanını seçiyor filan. Böylece çok daha az parametre yazıyorsunuz. Çoğunlukla hiç yazmadan bile işinizi hallediyorsunuz(dur diye hatırlıyorum :-) ).

Deniz.d'yi daha geliştireceğim. Zaten ayrıca biliG.d diye bir modül daha geliştirip dkvG'nin pek çok şeyden haberdar olmasınıda sağlayacağım. Ve bugün yaptığım önemli geliştirmeler var. Onlarıda yeni bir başlıkta duyurucağım.
acehreli (Moderatör) #14
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4412 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj #12
Ben de yukarıda söylediklerimi geri almaya karar vermiştim. :)

Çünkü sonuçta bu bir veri tabanı... Programın belleğindeki nesneleri kaydedip daha sonra okumak gibi bir görevi var.

acehreli:
oyunKarakteri["enerji"] = dtext(enerji);

oyunKarakteri gibi bir nesnenin veri tabanına bağlı olması saçma olur. oyunKarakteri, kendi üye değişkenleri olan bir yapı veya sınıf türü olmalı:

oyunKarakteri.enerjiDeğiştir(enerji);

En başından veri tabanından okunarak ilklenmiş olabilir; sonunda da yine veri tabanına yazılmıştır. Ama kullanım aşamasından veri tabanıyla ilgisi olmamalı zaten.

Ali
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 dkv 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-06-24, 22:28:46 (UTC -07:00)