0

Bir önceki makalemizde Oxygene’in Delphi Prism olmadan önceki hali hakkında kısaca bilgi verdik. Şimdi sırada Delphi Prism üzerinde konuşmak var. Bu amaçla embarcadero.com’dan Delphi Prism’in en son sürümün deneme kopyasını indirip Install.exe adlı programı çalıştırdım. Aşağıda verilen ekran görüntüsünden fark edeceğiniz gibi Delphi Prism paketinden ayrıca Interbase veritabanı ve InstallAware adlı setup programı çıkmaktadır.

delphi_prism_makale_1_resim_1

Bu penceredeki Install Delphi Prism seçeneği tıklandığında birkaç klasik sorudan sonra kurulum tamamlanmaktadır. Delphi Prism’i kurduktan sonra, ister Visual Studio kurulurken Başlat menüsünde hazırlanan komutu verin ister Delphi Prism’e ait komutu verin Visual Studio başlatılmaktadır. Visual Studio 2008’i başlatıp yeni bir Delphi Prism projesi hazırlamak üzere ekrana New Project diyalog kutusunu getirdik.

delphi_prism_makale_1_resim_2

Aşağıda verilen ekran görüntüsünden fark etmiş olacağınız gibi Windows Application şablonu ile yeni bir proje hazırlayınca bu projeye Program.pas ve Main.Pas adında 2 kod dosyası hazırlanmaktadır. Program.pas dosyasında uygulamanın başlangıç noktası olan Main() metodu bulunurken, Main.pas dosyasında .NET Framework ile gelen Form sınıfının mirasçısı bir Class hazırlanıp bu Class’ın yani formun uygulamanın başlangıç formu olması sağlanmaktadır.

delphi_prism_makale_1_resim_3

Ancak bu makalelerde sizlere işin özünü anlatmayı hedeflediğim için Visual Studio 2008’den yararlanarak hazırladığım bu projeyi bir tarafa bırakıp Not Defteri ile en kısıtlı özelliklere sahip ve konsolda çalışan bir Delphi Prism uygulaması hazırlayacağız. Bunu yaparken yani en kısıtlı özelliklere sahip konsol uygulamasını hazırlarken konunun hemen anlaşılmasını sağlamak için kodu parça parça vereceğiz. En kısıtlı özelliklere sahip Delphi Prism uygulaması bile namespace olarak düzenlendiği için aşağıdaki gibi bir namepace hazırladık.

delphi_prism_makale_1_resim_4

Namespace’in sonunu işaret eden end deyiminin sonuna noktalı virgül(;) yerine nokta konulması gerekiyor. Tabi bu şekilde düzenlenen Delphi Prism kodu derlendiğinde hata meydana gelir. Çünkü tıpkı Delphi uygulamalarında olduğu gibi Delphi Prism kodunun en azından interface ve implementation bölgelerine sahip olması gerekiyor. Bu nedenle koda ekleme yapıp interface ve implementation bölgelerine yer verdik.

delphi_prism_makale_1_resim_5

Delphi Prism uygulamasının mutlaka gerek duyduğu interface ve implementation bölgelerine bu şekilde yer verilse bile bu kod derlenirse hata meydana gelir. Çünkü uygulamanın başlangıç noktası olan Main() metoduna sahip olması gerekiyor. Bu nedenle bu koda ekleme yapıp Main() metoduna yer verdik.

delphi_prism_makale_1_resim_6

Bu şartlarda bu kod hatasız derlenip çalıştırılır. Bu kodu yakında incelediğinizde Delphi Prism’de Delphi’den farklı olarak geriye değer göndermeyen metotlar method anahtar kelimesiyle başlayabilmektedir. Yok eğer ben eski alışkanlıklarımı sürdürüp geriye değer göndermeyen metotları hazırlarken procedure anahtar kelimesinden yararlanacağım diyorsanız bu kodu aşağıdaki gibi değiştirebilirsiniz.

 namespace ilk_uzay;
 interface
 implementation
  procedure Main;
    begin
     Console.WriteLine(’wwww.memikyanik.com’);
   end;
end.

Not Defteri ile veya başka bir editörle hazırladığınız Delphi Prism kodunu konsolda derlemek istiyorsanız aşağıda yeri ve adı işaret edilen exe dosyadan yani Oxygene.exe adlı derleyiciden yararlanmanız gerekir.

delphi_prism_makale_1_resim_7

Bu dosya kurulum sırasında arama yoluna dahil edildiği için PAS uzantılı kod dosyaları istenen klasöre kaydedilip istenen klasörde iken derleme yapılabilir. “ilk.pas” adını verdiğim kod dosyasını derlemek için DOS penceresinde önce derleyicinin, ardından derlemek istediğimiz PAS dosyasının adını yazdık.

delphi_prism_makale_1_resim_8

Bu şekilde yapılan derleme sonucu “ilk.exe” adında bir çalışabilir .NET uyumlu dosya hazırlanır. Bu exe uzantılı dosya çalıştırıldığında ise Console sınıfının WriteLine() metoduna parametre olarak verilen sabit bilgi konsola yazılır. Delphi Prism’in bazı özelliklerini ortaya çıkarmak için yukarıda verdiğim kodu aşağıdaki gibi değiştirdik.

delphi_prism_makale_1_resim_9

Bu kodda tıpkı Delphi’de olduğu gibi Main() metodu içinde var bloğuna yer verip “yil” adında ve integer tipinde bir değişken tanımladık. Devamında Console sınıfının Read() metodu sayesinde konsola yazılan bilgiyi bu değişkene aktardık. Delphi Prism’de değişken tanımlamak için metodun asıl işlem yapan satırlarının dışında var bloğuna yer vermek şart olmadığı için bu kodu aşağıdaki gibi düzenlemek mümkündür. 

namespace ilk_uzay;
 interface
 implementation
  procedure Main;
  begin  
  var yil : integer;
    Console.Write(’Hangi Yıldayız :’);
    yil := Console.Read();
  end;
end. 

Açıkçası Delphi Prism’de var anahtar kelimesiyle istenen yerde değişken tanımlanabilmektedir. Şimdi bu Delphi Prism koduna ekleme yapıp kullanıcıdan istenip “yıl” adını verdiğimiz değişkene aktarılan bilgiyi WriteLine() metodu ile tekrar ekrana yazacağız. 

namespace ilk_uzay;
 interface
 implementation
  method Main;
   begin
     var yil : integer;
     Console.Write(’Hangi Yıldayız :’);
     yil := Console.Read();
     Console.WriteLine();
     Console.Write(”Girdiğiniz Yıl :”);
     Console.WriteLine(yil);
   end;
end. 

 Bu şekilde düzenlenen Delphi Prism kodu derlenirken hata vermediği gibi çalıştırıldığında da hata vermez ama girilen yıl bilgisi ile sonradan WriteLine() metodu ile ekrana yazılan yıl bilgisi birbirinden farklı olur. Aşağıda verdiğim ekran görüntüsünü bu Delphi Prism kodunu derleyip çalıştırdıktan sonra aldım.

delphi_prism_makale_1_resim_10

Yukarıda verilen koda dikkat ederseniz konsoldan bilgi okuma işlemi Read() metodu ile yapılmaktadır. Read() metodu konsoldan okuma yaparken girilen bilginin ilk karakterinin ASCII kodunu geriye göndermektedir. Console sınıfının Realline() metodu ise farklı bir şekilde çalışmaktadır ve konsoldan yani DOS penceresinden okuduğu bilginin String tipte olduğunu varsaymaktadır. Bu nedenle yukarıda verdiğimde örnekte değişiklik yapıp okuma işlemini Read() yerine Realline() metodu ile yapmaya çalıştık. 

namespace ilk_uzay;
 interface
 implementation
  method Main;
   begin
     var yil : integer;
     Console.Write(’Hangi Yıldayız :’);
      yil := Console.Realline();
     Console.WriteLine();
     Console.Write(”Girdiğiniz Yıl :”);
     Console.WriteLine(yil);
   end;
end. 

Bu şekilde değiştirdiğimiz Delphi Prism kodunu derlemek istersek derleyici hata rapor eder. Çünkü Console sınıfının Realline() metodu tarafından okunup geriye gönderilen bilgi String tipte olmasına rağmen burada integer tipindeki değişkene aktarmaya çalışıyorum. Bu hatanın önüne geçmek için String tipte bir değişken tanımlayıp kullandık. Bu hali ile programımız istediğimiz sonucu verir. 

namespace ilk_uzay;
 interface
 implementation
  method Main;
   begin
     var yil : string;
     Console.Write(’Hangi Yıldayız :’);
     yil := Console.Realline();
     Console.WriteLine();
     Console.Write(”Girdiğiniz Yıl :”);
     Console.WriteLine(yil);
   end;
end.

Her ne kadar Delphi Prism %100 nesne yönelimli bir programlama dili olsa bile sizi Class hazırlamak zorunda bırakmıyor. Deneysel uygulamalar hariç Class hazırlamak gerekeceği için şimdi yukarıda verilen kodda değişiklik yapıp bir Class’a sahip olmasını sağlayacağız.

delphi_prism_makale_1_resim_11

Delphi ve Delphi Prism’de Class’lar interface bölgesinde type ile end anahtar kelimelerinin arasında class anahtar kelimesiyle tanımlanır. Burada “ilk_sinif” adını verdiğimiz Class’ın henüz metodu, özelliği, alanı vs yoktur. Class’ın public üyeleri public bloğunda, private üyeleri ise private bloğunda tanımlanmaktadır. Şimdi bu konsol uygulamasındaki Main() metodunun “ilk_sinif” adını verdiğim Class’ın public bir üyesi yani metodu olmasını sağlayacağız. Bu amaçla namespace’in interface bölgesindeki type bloğunda aşağıdaki gibi değişiklik yaptık. 

namespace ilk_uzay;
 interface
  type
    ilk_sinif = class
   public
      class method Main;
   private
  end;
 implementation
  method Main;
   begin
     Console.WriteLine(’wwww.memikyanik.com’);
     Console.Write(’Çıkmak İçin Bir Tuşa Basın’);
     Console.ReadKey();
   end;
end.

Bu şekilde düzenlenen Delphi Prism kodu derlenmek istenirse hata meydana gelir. Çünkü bu sınıfın Main() adında ve herhangi bir parametreye sahip olmayan bir metoda sahip olduğu işaret edilmekle birlikte namespace’in implementation bölgesinde bu sınıfla ilişkilendirilen bir metot yoktur. Mevcut Main() metodunun başına class ve method anahtar kelimesinden sonra class adı aşağıdaki gibi yazılırsa sorun çözülür. 

namespace ilk_uzay;
interface
  type
    ilk_sinif = class
   public
      class method Main;
   private
  end;
 implementation

  class method ilk_sinif.Main;
   begin
     Console.WriteLine(’wwww.memikyanik.com’);
     Console.Write(’Çıkmak İçin Bir Tuşa Basın’);
     Console.ReadKey();
   end;
end.

Bu kodda method anahtar kelimesi yerine procedure’yi kullanabileceğinizi biliyorsunuz. Bir sonraki makalemizde Delphi Prism anlatmaya kaldığımız yerden devam edeceğiz.

Etiketler: , , , , , , , ,

Yorum Yaz

Yorum yapmak için giriş yapınız.

Üye değilseniz tıklayınız.