Compiler Version'a göre virtual yada override

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
ikra
Üye
Mesajlar: 901
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Compiler Version'a göre virtual yada override

Mesaj gönderen ikra »

Aslinda cok da önemi yok fakat bilmek insani rahatlatiyor. Tamamen duygusal :D

CompileVersion'u direktif ile sartlandirip virtual yada override seklinde bir degisken tutabilir miyiz?

örnegin:

Kod: Tümünü seç

const
  DEGISKEN = {$IF CompilerVersion < 22}virtual{$ELSE}override[$IFEND}; // XE'den kücükse virtual, aksi taktirde override

type
  TMyClass = class(TForm)
  protected
    procedure ClientWndProc(var Message: TMessage); DEGISKEN;
  end;
Compiler bunu kabul etmiyor. Kabul etmemesinin sebebi böyle bir seyin mümkün olmadigindan mi yoksa tanimlamamin yanlisligindan mi kaynaklaniyor?
kıdemsiz üye
Kullanıcı avatarı
csunguray
Üye
Mesajlar: 855
Kayıt: 09 Ara 2006 05:08
Konum: Adana
İletişim:

Re: Compiler Version'a göre virtual yada override

Mesaj gönderen csunguray »

ikra yazdı:

Kod: Tümünü seç

type
  TMyClass = class(TForm)
  protected
    {$IF CompilerVersion < 22}
    procedure ClientWndProc(var Message: TMessage); virtual;
    {$ELSE}
    procedure ClientWndProc(var Message: TMessage); override;
    {$IFEND}
  end;
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/)
Kullanıcı avatarı
esistem
Üye
Mesajlar: 464
Kayıt: 02 Eki 2007 11:22
İletişim:

Re: Compiler Version'a göre virtual yada override

Mesaj gönderen esistem »

ikra yazdı:Aslinda cok da önemi yok fakat bilmek insani rahatlatiyor. Tamamen duygusal :D

CompileVersion'u direktif ile sartlandirip virtual yada override seklinde bir degisken tutabilir miyiz?

örnegin:

Kod: Tümünü seç

const
  DEGISKEN = {$IF CompilerVersion < 22}virtual{$ELSE}override[$IFEND}; // XE'den kücükse virtual, aksi taktirde override

type
  TMyClass = class(TForm)
  protected
    procedure ClientWndProc(var Message: TMessage); DEGISKEN;
  end;
Compiler bunu kabul etmiyor. Kabul etmemesinin sebebi böyle bir seyin mümkün olmadigindan mi yoksa tanimlamamin yanlisligindan mi kaynaklaniyor?
kopyala yapıştır ile mi yazdınız kodu bilmiyorum ama [$IFEND} den kaynaklanıyor olabilir mi?
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: Compiler Version'a göre virtual yada override

Mesaj gönderen SimaWB »

esistem yazdı:
ikra yazdı:Aslinda cok da önemi yok fakat bilmek insani rahatlatiyor. Tamamen duygusal :D

CompileVersion'u direktif ile sartlandirip virtual yada override seklinde bir degisken tutabilir miyiz?

örnegin:

Kod: Tümünü seç

const
  DEGISKEN = {$IF CompilerVersion < 22}virtual{$ELSE}override[$IFEND}; // XE'den kücükse virtual, aksi taktirde override

type
  TMyClass = class(TForm)
  protected
    procedure ClientWndProc(var Message: TMessage); DEGISKEN;
  end;
Compiler bunu kabul etmiyor. Kabul etmemesinin sebebi böyle bir seyin mümkün olmadigindan mi yoksa tanimlamamin yanlisligindan mi kaynaklaniyor?
kopyala yapıştır ile mi yazdınız kodu bilmiyorum ama [$IFEND} den kaynaklanıyor olabilir mi?
Hayır, sorun virtual yada override gibi ifadelerin değişkene aktarılmaya çalışılmasında. Compiler aşağıdaki atamalara izin vermez:

Kod: Tümünü seç

const
  DEGISKEN1 = virtual;
  DEGISKEN2 = override;
Bence de en mantıklısı csunguray'ın paylaştığı şekilde tanımlama yapmak.
There's no place like 127.0.0.1
ikra
Üye
Mesajlar: 901
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Re: Compiler Version'a göre virtual yada override

Mesaj gönderen ikra »

esistem yazdı:{$IFEND} den kaynaklanıyor olabilir mi?
{$IFDEF} kullandiginizda {$ENDIF} ile bitirirsiniz. {$IF xyz} ile baslarsaniz {$IFEND} seklinde bitirirsiniz.
En son ikra tarafından 06 Nis 2016 10:39 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
kıdemsiz üye
ikra
Üye
Mesajlar: 901
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Re: Compiler Version'a göre virtual yada override

Mesaj gönderen ikra »

csunguray yazdı:
ikra yazdı:

Kod: Tümünü seç

type
  TMyClass = class(TForm)
  protected
    {$IF CompilerVersion < 22}
    procedure ClientWndProc(var Message: TMessage); virtual;
    {$ELSE}
    procedure ClientWndProc(var Message: TMessage); override;
    {$IFEND}
  end;
sadece virtual ile override arasinda direktif kullanarak daha da kisaltabiliyorum. Merak ettigim, özel kelimeleri direktifler vasitasi ile degisken üzerinde tutabiliyor muyuz. Malesef olmuyormus. Zaten yukarida da bahsettigim gibi, cok önemli degil ama insan kurcalayip ögrenmek istiyor.
konuya olan ilginizden ötürü €esistem, @csunguray @simawb hepinize tesekkür ederim.
bir de sunu ekleyeyim, belki birinin ihtiyaci olur.

Kod: Tümünü seç

procedure ClientWndProc(var Message: TMessage);{$IF CompilerVersion < 22}virtual{$ELSE}override{$IFEND};
kıdemsiz üye
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: Compiler Version'a göre virtual yada override

Mesaj gönderen SimaWB »

O zaman ben de bu vesileyle haddimi aşarak bir tavsiyede bulunayım:

Kodların daha kısa yazılmasından ziyade anlaşılır olmasına dikkat etmeliyiz. Biz daha sonra koda baktığınızda yada bizden sonra birisi baktığında kodların daha kolay anlaşılır olması bence kısa olmasından daha önemli. (Özellikle değişken ismi verirken neden ısrarla kısa isim yazmaya çalışıyoruz anlamış değilim. Bırakalım uzun olsun ama anlaşılır olsun. Zaten değişkeni kullanmak istediğimizde IDE bizim için geri kalanını otomatik yazmıyor mu :D )

Bence csunguray'ın yazdığı şekilde kullanın :)
There's no place like 127.0.0.1
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2381
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: Compiler Version'a göre virtual yada override

Mesaj gönderen freeman35 »

Eğer compiler command ları (virtual, procedure, function vs) değişkene atayıp kullanabilseydik, IDE yi tamamen kişiselleştirebilirdik, yani procedure yerine "Yordam" function yerine "fonksiyon" tanımlayıp, kod yazımı az bilenler için kolaylaştırabilirdi, ama bu compilera zaten gereksiz bir sürü yük varken birde bunları ayıklamakla uğraşırdı. Bir de bunun biz Türklerin ne hale getireceğini düşünün :) Procedure = KapdagelKoçum; Function = BuyrunSultanım; gibi :D :D
Değiştirmedilerse ki sanmam, bu compiler directive ler sadece IDE de, daha doğrusu yazılan kod içinde kalır, compiler, directive in sadece aktive olan kısmını derler. Başka bir deyişler exe nin içine eklenmez. Remark satır(lar), { } ve /* */ arasında kalanlar gibi.
Bunu anlamanın en basit yolu, IDE renklerini ayarlarsanız, derlenmeyen kodların rengini değiştiriseniz mesala, yada ctrl + F9 ile sadece compile ettiğiniz kodunuzda, IDE source editor sun sol tarafında mavi noktaları görürsünüz. Bunun anlamı o satır derenecek yada derlendi demektir.
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Kullanıcı avatarı
esistem
Üye
Mesajlar: 464
Kayıt: 02 Eki 2007 11:22
İletişim:

Re: Compiler Version'a göre virtual yada override

Mesaj gönderen esistem »

@ikra da benim kafadan, 3-4 satır kod yazmak yerine tek satırda kodu bitiririm olur biter diyor :)
ikra yazdı:
esistem yazdı:{$IFEND} den kaynaklanıyor olabilir mi?
{$IFDEF} kullandiginizda {$ENDIF} ile bitirirsiniz. {$IF xyz} ile baslarsaniz {$IFEND} seklinde bitirirsiniz.
Birde yukarıdakine istinaden, IF, IFDEF kullanımını biliyorum da, orada köşeli paranteze takılmıştım ben, o yüzden "kopyala/yapıştır ile mi yazdınız" demiştim.
ikra
Üye
Mesajlar: 901
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Re: Compiler Version'a göre virtual yada override

Mesaj gönderen ikra »

esistem yazdı:@ikra da benim kafadan, 3-4 satır kod yazmak yerine tek satırda kodu bitiririm olur biter diyor :)
Birde yukarıdakine istinaden, IF, IFDEF kullanımını biliyorum da, orada köşeli paranteze takılmıştım ben, o yüzden "kopyala/yapıştır ile mi yazdınız" demiştim.
cep telefonlarini narin ellere göre ayarliyorlar. Bize pek uymuyor, haliyle hata olusuyor : )
Mümkün oldugunca kodlari kisa tutmaya calisiyorum. Ama @SimaWB'in dedigi gibi, bazen hakikaten kendi yazdigimi anlamak icin zamana ihtiyacim oluyor : ))
kıdemsiz üye
ikra
Üye
Mesajlar: 901
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Re: Compiler Version'a göre virtual yada override

Mesaj gönderen ikra »

@freeman35 Procedure = KapdagelKoçum; Function = BuyrunSultanım;
kacamak foruma girip sesli kahkaha atinca sorun oluyor :S
kıdemsiz üye
Kullanıcı avatarı
csunguray
Üye
Mesajlar: 855
Kayıt: 09 Ara 2006 05:08
Konum: Adana
İletişim:

Re: Compiler Version'a göre virtual yada override

Mesaj gönderen csunguray »

SimaWB yazdı:Kodların daha kısa yazılmasından ziyade anlaşılır olmasına dikkat etmeliyiz.
Sıradan her programcı bilgisayarın anlayabileceği kodlar yazabilir.
Sadece iyi programcılar insanların da anlayabileceği kodlar yazarlar.

Desteğinize teşekkür ederim.
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/)
Kullanıcı avatarı
kimimben
Üye
Mesajlar: 129
Kayıt: 28 Oca 2016 04:41
Konum: İstanbul

Re: Compiler Version'a göre virtual yada override

Mesaj gönderen kimimben »

SimaWB yazdı:O zaman ben de bu vesileyle haddimi aşarak bir tavsiyede bulunayım:

Kodların daha kısa yazılmasından ziyade anlaşılır olmasına dikkat etmeliyiz. Biz daha sonra koda baktığınızda yada bizden sonra birisi baktığında kodların daha kolay anlaşılır olması bence kısa olmasından daha önemli.
Kaynak kodu delphi code metrics tools ile kontrol ediyor muyuz ?
Cevapla