Delphi programcıları, Generics ile tanışıyor…

2.626 defa okunmuş
Oy Verin:
(3 kişi oy kullanmış, ortalama: 5 üzerinden 3,33)
Loading ... Loading ...

Şu an betası test edilen Highlander sürümünde göreceğimiz generic tipler, aslında c++ programcılarına pek de yabancı olmayan bir terim. .Net 2.0 ile birlikte, managed kodlar generics ile tanıştı. Haliyle Delphi de, highlander sürümü ile birlikte .net 2.0′ı ve generics’i destekliyor. Ama IDE ve kod editörü tam manasıyla generics’e destek vermeyecek. Ama derleyici olarak generics’in tüm özelliklerinden faydalanabileceğiz. Özellikle generics için refactoring bulunmayacak. Ayrıca help insight ‘da da generic tipler "<>" şeklinde görünecek. Ayrıca editor, generic tipleri generic tip olarak nitelememekte. Generic tipi ayrı bir sınıf olarak almakta. Her neyse bu gibi sorunlar bir update ile ya da 2008′in ilk çeyreğinde çıkması beklenen Tiburon sürümünde halledilecektir. Önemli olan generic tipleri derleyici bazında tam olarak kullanabileceğimiz.

Bütün bunları geçelim ve generic tiplere yabancı olanlar için bir kaç küçük örnek verelim.

TGenericClass&lt;T&gt; = class
private
  FProperty: T;
public
  property AProperty&lt;T&gt; read FProperty write FProperty;
end;

Basit bir generic sınıf tanımlaması bu şekilde. Bu sınıfı aşağıdaki gibi kullanabiliriz.

var
  AStringClass: TGenericClass&lt;string&gt;;
  AIntegerClass: TGenericClass&lt;Integer&gt;;
begin
  AStringClass := TGenericClass&lt;string&gt;.Create;
  AIntegerClass := TGenericClass&lt;Integer&gt;.Create;

  AStringClass.AProperty := 'Bu bir string';
  AIntegerClass.AProperty := 456;
end;

Burada T parametresi bir tipi ifade etmektedir. İçine koyacağımız tipe göre sınıfımız kendini şekillendirmektedir. İstersek sınıfmızı <T, U> gibi birden fazla tip ile tanımlayabiliriz. Önceden de dediğim gibi eğer fikirlerini değiştirmezlerse highlander sürümünde editör, generic tipleri normal bir tip gibi algılıyor. Yani siz <T, U> gibi tanımladığınız generic sınıfınızı kullanırken iki yerine bir parametre kullanırsanız delphi böyle bir tanımlamanın olmadığından felan bahsedecektir. Ama eksik parametre kullanıldığını söylemesi gerekmektedir. Bu da çok karmaşık uygulamalarda sizi şaşırtabiliyor.

Aslında generic tiplerin en çok kullanıldığı yerler belki de kolleksiyon tiplerindedir. Mesela:

var
  AStringList: List&lt;string&gt;;
  AStreamList: List&lt;TMemoryStream&gt;;
begin
  AStringList := List&lt;string&gt;;
  AStreamList := List&lt;TMemoryStream&gt;;

  AStringList.Add('Birinci sıradaki yazı');
  AStringList.Add('İkinci sıradaki yazı');
end;

Bu List<T> sınıfını kullanabilmek için System.Collections.Generic’i uses kısmına eklemelisiniz. Yukarıda gördüğünüz işlem Delphi’de TList ve pointer’lar ile yaptığımız işlemleri daha basit bir şekilde yapmamıza yarıyor. List dışında, .net kütüphanesi bir çok generic tip barındırmaktadır. Ama şimdilik highlander’da generic’lerin nasıl olacağına dair bu kadar bilgi yeterli. Highlander çıktıktan sonra bununla ilgili bir makale buralarda olabilir.

Yorumlarınızı bekliyorum.

Bu yazının kategorisi:Delphi ve etiketleri: , , , , , , Tekrar ulaşmak içinkalıcı bağlantı. Yorum yazınveya bir geri izleme bırakın:Geri İzleme URL'si.

3 Yorum

  • At 2007.07.27 00:07, sadettinpolat said:

    highlander i beklemek istemeyenler dLang adli object pascala yeni ozellikler ekleyen araci kullanabilirler.

    http://andy.jgknet.de/dlang/

    eklentinin yuklenmesi ve kullanimi resmi olarak desteklenmediginden ve henuz tam manasiyla hazir olmadigindan uygulama gelistirdiginiz sistem uzerine yuklemenizi tavsiye etmem.

    • At 2007.07.27 02:26, Fatih Tolga Ata said:

      Aslında dlang’daki generic desteği, codegear’ın getirdiğinden farklı. Yani grameri kendi kafasına göre yapmış bazı yerlerde. Ama Win32′ye generics desteği gelene kadar gerçekten iş görür.

      • [...] Delphi for Win32 içinde kullanabileceğiz. Genericlerin ne olduğuna dair ilgili bir yazıyı şurdaki linkte okuyabilirsiniz. Benim bu konuda söyleyeceğim tek şey bu özelliğin bir an önce Delphi [...]

        (Required)
        (Required, will not be published)
        Ana Sayfa RSS İrtibat