Run time da degisken olusturma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
drf1
Üye
Mesajlar: 9
Kayıt: 11 Tem 2010 10:34

Run time da degisken olusturma

Mesaj gönderen drf1 »

Run time da nesne olusturabiliyoruz . Peki degisken nasil olusturabiliriz?
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: Run time da degisken olusturma

Mesaj gönderen aslangeri »

s.a.
değişken oluşturulmazki.
Değişken tanımlanır. o yüzden bırak runtime ı design time da bile değişken oluşturamazsın. :wink:
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
ikra
Üye
Mesajlar: 900
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Re: Run time da degisken olusturma

Mesaj gönderen ikra »

yapmak istedigin ne dir?
kıdemsiz üye
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: Run time da degisken olusturma

Mesaj gönderen thelvaci »

drf1 yazdı:Run time da nesne olusturabiliyoruz . Peki degisken nasil olusturabiliriz?
Bu sorunuza diğer sitede yanıt aramamışmıydınız ;)
drf1
Üye
Mesajlar: 9
Kayıt: 11 Tem 2010 10:34

Re: Run time da degisken olusturma

Mesaj gönderen drf1 »

Evet diğer sitede de aradım aramasına ama , değişik fikirler bulabilirim diye burada da yazdım.
Diğer arkadaş desing time da bile oluşturamazsın demiş , sanırım şaka yapmış .neyse , aslında değişken mantığını anlarsam olayı çözücem gibi geliyor ama .Yani değişken aslında hafızada bir blok .Ben onu getmem ile tanımlasam kendi tip değişkenimide elde ederim diye düşünüyorum.yani temelde string yada integer farklılığı yok , sadece hafızada ayrılan miktar farklılığı var . Sizce nasıldır?
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: Run time da degisken olusturma

Mesaj gönderen aslangeri »

s.a.
açıkçası pek şaka yapmak gibi bir niyetim yoktu.
Tekrar aynı şeyi söylüyorum "Değişken oluşturulmaz", "Değişken tanımlanır", "Nesneler oluşturulur".
Eğer benim bilmediğim veya anlayamadığım başka birşeylerden bahsediyorsanız öğrenmeyi de isterim.
Diğer siteyide merak ettim onun linkinide verirseniz ordaki mesajlardan belki ne istediğinizi anlayabilirim.
kolay gelsin. iyi günler.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
drf1
Üye
Mesajlar: 9
Kayıt: 11 Tem 2010 10:34

Re: Run time da degisken olusturma

Mesaj gönderen drf1 »

tanımlamak ve oluşturmak benim sorum için pek farklı şeyler değil . siz nasıl isterseniz öyle olsun . Sorunum yeterki hallolsun .
Runtimede değişken tanımlamak istiyorum diyeyim ozaman. iki tane edit var ,birincisine değişken adı ikincisine tipi ni yazıyorum
hatta bir üçüncüsünüde sen ekle , onada değerini yazalım . Verilen bu ada ve tipe göre değişkeni tanımlayıp üçüncü editteki değeride ona atasın . sorum bu .nasıl yaparız?
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Re: Run time da degisken olusturma

Mesaj gönderen unicorn64 »

delphide ve hemen hemen bütün programlama dillerinde verilerin tipleri vardır. kodlama sırasında ihtiyaç duyulan veri tipinden değişken tanımlanır ve bu değişkene değer atamaları yapılarak kullanılır. değişken "var" bloğunda tanımlanmadan kullanılamaz..
bildiğim kadarıyla bahsettiğiniz şekilde bir kullanım söz konusu değil..

ancak merak ettim, bunu yapmaktaki amacınız nedir? bence asıl ihtiyacınızı söylerseniz belki alternatif çözümler bulunabilir...
bazen yükselmek için önce dibi görmek gerekir...

forumda soru sormadan önce bakılmalı bence
daha fazlası için...

yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

Resim
drf1
Üye
Mesajlar: 9
Kayıt: 11 Tem 2010 10:34

Re: Run time da degisken olusturma

Mesaj gönderen drf1 »

kullanıcı kendi kodlarını yazacak -kendine özgü komutlar olacak - .bir text dosya içinden okunan bu kodlar derlenecek . Nesnelerde problem yok .fakat kullanıcı değişken tanımlamak istediğinde nasıl olacak .
mesela:
CreateArea(0,0,100,100):A1
inputBox on A1:ib1
int Ad=ib1.text

gibi
int A kısmında A yı tanımlamam gerek .
nightwolfcem
Üye
Mesajlar: 32
Kayıt: 02 Eki 2008 02:55

Re: Run time da degisken olusturma

Mesaj gönderen nightwolfcem »

Bunun okadar kolay birşey olduğunu sanmıyorum, ayrıca Nesneleri nasıl tanımladın ve oluşturuyorsun merak ettim.Nesnelerinde çünkü değişkenleri var.
Bence en basiti
Type
Degisken=Record
ad:string;//Değişkenin adı
Konum:integer;//Değişkenin adresi
Boyut:integer;//Değişkenin boyutu
end;
Şeklinde bir tiple değişkenlerinin verisini hafızada tutmak olur. Ve dinamik bir dizi ilede bu değişkenlere erişimi kolaylaştırabilirsin.
Degiskenlere atama yapıldığında sadece onlar için hafıza ayır ve konuma kaydettir yerlerini.
Delphide nesnelerin metodları için virtual table oluşturuluyor.
Nesnelerin Alanları için bildiğim kadarıyla yukardaki degisken gibi bir bilgi kaydediliyor.
Bence nasıl hayal ediyorsan öyle yap . Golbal local değişkenler falan var, ıvırı zıvırı derin konu ...
Birde string tipini tanımlaman için 2 yolun var ya delphideki gibi yöneteceksin yada pchar daki gibi . delphide string tipi şöyle tanımlanır(hatırladığım kadarıyla) 8 bit karakter sayısı için ayrılır 8 bit Referans sayısı(yani bu string den kaç kopya var ,kaç değişkeneatandığı) ,16 bit de konumu için(hafızadaki).
Pchar gibi yöneticeksen sadece başlangıç ve bitiş karakterini kontrol ettirmen lazım biliyorum pek açıklayıcı olmadı ama benim bilgimde kısıtllı :(
qamyoncu
Üye
Mesajlar: 266
Kayıt: 12 Tem 2008 04:30

Re: Run time da degisken olusturma

Mesaj gönderen qamyoncu »

Olay sorununuzu çözmekse varolan değişken tiplerinden dizi değişkenler oluşturun, örneğin:

Kod: Tümünü seç

type
Degisken_Int = Record
ad: String;
Deger: Integer;
end;

var
Ints: Array[1..1000] of Degisken_Int;
Edit2'nin içeriğini kontrol ettirip Integer ise bu tip, String ise bunun stringe uyarlanmış halini yazarak vs. yapabilirsiniz ??
Batuhan TAŞDÖVEN
'Yükseldikçe küçülen bir uçurtma..'
emin_as
Üye
Mesajlar: 559
Kayıt: 01 Eki 2008 10:05
Konum: izmir
İletişim:

Re: Run time da degisken olusturma

Mesaj gönderen emin_as »

Parser veya script olarak google da ararsan, bol bol örnek var.

Hazır scriptlerden rem objects in ücretsiz pascal scriptini inceleyebilirsin.
http://www.remobjects.com/ps.aspx

Kendin yapmak istiyorsan, bu durumda text dosyaları önce parse edeceksin, daha sonra bu parse edilmiş dosyaları yorumlayan bir program (interpreter) yazacaksın.

Bu dosyaları dogrudan çalıştıralabilir dosya formatına derlemek demek, yeni bir dil yazmak anlamına gelir. Değişkenleri tam anlamadıysa hiç dil yazma işine girme.
Kullanıcı avatarı
csunguray
Üye
Mesajlar: 855
Kayıt: 09 Ara 2006 05:08
Konum: Adana
İletişim:

Re: Run time da degisken olusturma

Mesaj gönderen csunguray »

Değişkenler program yazarken kullandığımız şeylerdir. O yüzden "program çalışırken değişken yaratmak" ifadesi saçmadır ve gereksizdir.
C. Sunguray
csunguray at netbilisim.kom
Net Bilişim Hizmetleri

Sıradan her programcı bilgisayarın anlayabileceği kodlar yazabilir.
Sadece iyi programcılar insanların da anlayabileceği kodlar yazarlar.
Martin Fowler (http://martinfowler.com/)
qamyoncu
Üye
Mesajlar: 266
Kayıt: 12 Tem 2008 04:30

Re: Run time da degisken olusturma

Mesaj gönderen qamyoncu »

Aslında değişken olarak bahsettiği şey yine bir çeşit nesne, struct bir yapı sanki.
Batuhan TAŞDÖVEN
'Yükseldikçe küçülen bir uçurtma..'
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3077
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Run time da degisken olusturma

Mesaj gönderen sabanakman »

Soruda anlatılanlar ile elde edilmek istenen amaç arasında bocalamak normal. O yüzden yanlış anlamış olabilirim uyarısında bulunup hemen önerime geçiyorum. Bir değişken yapısı kurup, bunu dizi olarak tutmak isteneni verebilir. Burada her değişkeni temsil edecek bir sınıf veya yapı kurmak ve bu yapıyı organize etmek gerekmektedir. Mesela

Kod: Tümünü seç

type
  TDegisken=record
    Adi,Tipi,Degeri:String;
  end;

var Degiskenler:array of TDegisken;

function DegiskenEkle(const Adi,Tipi:String):Integer;
begin
  Result:=High(Degiskenler);
  Result:=Result+1;
  SetLength(Degiskenler,Result+1);
  Degiskenler[Result].Adi:=Adi;
  Degiskenler[Result].Tipi:=Tipi;
end;

....
  i:=DegiskenEkle('Test','Integer');
  Degiskenler[i].Degeri:=IntToStr(SpinEdit1.Value);

....
finalization
  SetLength(Degiskenler,0); //-->Oluşturulan değişkenler yok edilirler
end.
veya başka bir yapı da

Kod: Tümünü seç

type
  TDegisken=class(TComponent)
  private
    FAdi,FTipi,FDegeri:String;
  public
    property Adi:String read FAdi write FAdi;
    property Tipi:String read FTipi write FTipi;
    property Degeri:String read FDegeri write FDegeri;
  end;

var Degiskenler:TComponent;

function DegiskenEkle(const Adi,Tipi:String):TDegisken;
begin
  Result:=TDegisken.Create(Degiskenler); //Degiskenler nesnesinde oluşturulur 
  Result.Adi:=Adi;
  Result.Tipi:=Tipi;
end;

....
  DegiskenEkle('Test','Integer').Degeri:=IntToStr(SpinEdit1.Value);
....

initialization
  Degiskenler:=TComponent.Create(nil);
finalization
  Degiskenler.Free; //-->Değişkenler bu bileşene ait olarak oluşturuldukları için hepsi yok edilirler
end.
şeklinde olabilir. Bunlar üstünkörü bir ip ucu olması açısından yazıldığı için belki amaca hizmet açısından çok işe yaramayabilir ama sonuçta bir fikir vereceği kanaatindeyim. Belki de bu mantıkla uzaktan yakından alakası olmayan bir mantık da geliştirebilirsiniz ama üzerinde biraz kafa yorunca çözüme gidebilirsiniz. Kolay gelsin.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Cevapla