Bölüm 3 - DELPHI'NİN TEMELLERİ (Tip Tanımlamaları)
Delphi hesaplamalarınızı gerçekleştirebilmeniz için size bir çok seçenek (class, değişken, yapı vs.) sunmaktadır. Bu seçenekler çoğu kez işinizi görmekle
beraber bazı durumlarda kendinize has yeni tipler tanımlamak zorunda kalabilirsiniz. Şimdi sizlere kendi tip tanımlamalarınızı nasıl yapabileceğinizi
göstermek istiyorum. Delphi’de kendinize has yeni bir tip tanımlayacaksanız, bunu type komutuyla gerçekleştirebilirsiniz. Bu komutla class, yapı, dizi değişkenleri çok kolaylıkla tanımlayabilirsiniz. Tip tanımlaması sırasında (ğ,ş vs.) karakterlerinden kullanmayınız.
beraber bazı durumlarda kendinize has yeni tipler tanımlamak zorunda kalabilirsiniz. Şimdi sizlere kendi tip tanımlamalarınızı nasıl yapabileceğinizi
göstermek istiyorum. Delphi’de kendinize has yeni bir tip tanımlayacaksanız, bunu type komutuyla gerçekleştirebilirsiniz. Bu komutla class, yapı, dizi değişkenleri çok kolaylıkla tanımlayabilirsiniz. Tip tanımlaması sırasında (ğ,ş vs.) karakterlerinden kullanmayınız.
• Enumerated Types
Type
Ad=(birinci=0,ikinci=1,ucuncu=2,dorduncu=3,............)
Yapılan tanımlamada ilk elemanın sayısal değeri 0, sonrakilerde sırasıyla birer artarak devam edecektir. Dilerseniz aşağıdaki şekilde bir tip tanımlaması da
yapabilirsiniz.
Type
Ad=(birinci=10,ikinci=20,ucuncu=30,dorduncu=40..............)
Aşağıda Enumerated Types için basit bir uygulama örneği yapılmıştır.
Ad=(birinci=0,ikinci=1,ucuncu=2,dorduncu=3,............)
Yapılan tanımlamada ilk elemanın sayısal değeri 0, sonrakilerde sırasıyla birer artarak devam edecektir. Dilerseniz aşağıdaki şekilde bir tip tanımlaması da
yapabilirsiniz.
Type
Ad=(birinci=10,ikinci=20,ucuncu=30,dorduncu=40..............)
Aşağıda Enumerated Types için basit bir uygulama örneği yapılmıştır.
Enumerated Types - haftanın günleri
Daha geniş bir uygulama ile tip tanımlamarınının size nekadar kolaylık sağlıyacağını anlaymaya çalışalım. Aşağıdaki örnekte haftanın günlerinin ingilizce karşılığı kullanıcıya aktarılmak isteniyor. Bu uygulama çok farklı yollar ile yapılabilir fakat tip tanımlamasının faydalarını videoyu izledilten sonra anlayacaksınız.
Uygulamaya başlamadan önce lütfen aşağıdaki formu oluşturunuz.
Uygulamaya başlamadan önce lütfen aşağıdaki formu oluşturunuz.
Enumerated Type - Haftanın Günleri İngilizce Karşılığı
• Subrange Types
Bu şekilde yapacağınız bir tip tanımlaması sayesinde, aynı tipten türeteceğiniz yeni değişkenin belirlediğiniz aralık dışında değer almasını engelleyebilirsiniz (Direkt atamalar için geçerlidir. Dolaylı olarak aralık dışı değer atanabilmektedir).
Type
Karakter=’A’..’Z’; //Sadece büyük harf karakter girilebilir
Sayi=0..100; //Sadece 0-100 arası değer atanabilir.
Yukarıda yapılan tip tanımlaması sayesinde, kullanacağınız değişkenlerin değerlerinin belirli bir aralıkta olmasını sağlayabilirsiniz. Aşağıda bu husus örneklendirilmiştir.
type
karakter='A'..'Z'; //Tipler Tanımlanıyor.
sayi=0..100;
procedure TForm2.Button6Click(Sender: TObject);
var
yeni:karakter;
notlar:sayi;
begin
yeni:=a; //Delphi size hata mesajı verecektir.
yeni:='K'; //Hata Vermez
notlar:=500; //Delphi size Hata Verecektir
notlar:=55; //Hata Vermez
end;
Bu tip tanımlaması sonucu türetmiş olduğunuz değişkene, aralık dışında kalan değeri direkt olarak atamaya çalışırsanız hata verecektir. Aşağıdaki gibi bir kod satırı yazarsanız; programınızın çalışması anında EditBox içerisine aralık dışında bir değer girseniz bile, program kırılmadan çalışmasına devam edecektir. notlar:=StrToInt(Edit1.Text); //Hata Vermez Yanlışlıkla girebileceğiniz değerleri engellemek amacıyla kullanabileceğiniz bir tiptir.
Type
Karakter=’A’..’Z’; //Sadece büyük harf karakter girilebilir
Sayi=0..100; //Sadece 0-100 arası değer atanabilir.
Yukarıda yapılan tip tanımlaması sayesinde, kullanacağınız değişkenlerin değerlerinin belirli bir aralıkta olmasını sağlayabilirsiniz. Aşağıda bu husus örneklendirilmiştir.
type
karakter='A'..'Z'; //Tipler Tanımlanıyor.
sayi=0..100;
procedure TForm2.Button6Click(Sender: TObject);
var
yeni:karakter;
notlar:sayi;
begin
yeni:=a; //Delphi size hata mesajı verecektir.
yeni:='K'; //Hata Vermez
notlar:=500; //Delphi size Hata Verecektir
notlar:=55; //Hata Vermez
end;
Bu tip tanımlaması sonucu türetmiş olduğunuz değişkene, aralık dışında kalan değeri direkt olarak atamaya çalışırsanız hata verecektir. Aşağıdaki gibi bir kod satırı yazarsanız; programınızın çalışması anında EditBox içerisine aralık dışında bir değer girseniz bile, program kırılmadan çalışmasına devam edecektir. notlar:=StrToInt(Edit1.Text); //Hata Vermez Yanlışlıkla girebileceğiniz değerleri engellemek amacıyla kullanabileceğiniz bir tiptir.
• Set Types
Toplu işlemler gerçekleştirebilen bir tip tanımlamasıdır. Aşağıda bu tip bir deklarasyonu nasıl gerçekleştirebileceğiniz açıklanmıştır.
Type
Ad:Set of char; //Toplu eleman işlemleri için tip tanımlama
Bu yapıyı anlamanız için aşağıdaki form tasarımını oluşturup gerekli olan kodları da ekleyiniz.
Type
Ad:Set of char; //Toplu eleman işlemleri için tip tanımlama
Bu yapıyı anlamanız için aşağıdaki form tasarımını oluşturup gerekli olan kodları da ekleyiniz.
Burada basılan her tuş (KeyPress Event ına yazıldığı için) Key parametresine aktarılmakta, ardından tanımlanan tipe ait belirtilen aralıkta olup olmadığı kontrol edilmektedir. Key:=#0; satırı ise basılan tuşun iptali için kullanılmaktadır.
Bu tip tanımlamasını aşağıdaki şekilde de kullanabilirsiniz.
type
aralik = 1..500; //Aralık belirleniyor
deger = set of aralik; //Aralığı kullanabilecek olan değişken tanımlanıyor.
veya
type deger = set of 1..250; //Bu şekildede tanımlanabilir.
Daha sonra bu değişkene programın içerisinden aşağıdaki şekilde toplu değer de atayabilirsiniz.
var ilk, son: deger;
...
ilk := [1, 3, 5, 7, 9]; //Toplu değerler atanıyor
son := [2, 4, 6, 8, 10]; //Toplu değerler atanıyor.
Bu şekilde bir tip tanımlaması yaptığınız zaman (Değişken toplu değerleri göstereceğinden dolayı) karşılaştırma yapacağınız değerin, aralığın içinde olup olmadığını “in” operatörüyle kontrol ettirmelisiniz (Biz de öyle yaptık).
İf ‘a’ in tip then //içinde varsa
begin
//’a’ tip değişkeninin gösterdiği aralıktaysa
end;
else
begin
//’’ tip değişkeninin gösterdiği aralıkta değilse
end;
veya
İf not(‘a’ in tip) then //içinde yoksa
begin
//’a’ tip değişkeninin gösterdiği aralıkta değilse
end;
“not” kullanılarak da olumsuz durum kontrol ettirilebilir. Tercih burada tamamen programcıya kalmıştır.
Bu tip tanımlamasını aşağıdaki şekilde de kullanabilirsiniz.
type
aralik = 1..500; //Aralık belirleniyor
deger = set of aralik; //Aralığı kullanabilecek olan değişken tanımlanıyor.
veya
type deger = set of 1..250; //Bu şekildede tanımlanabilir.
Daha sonra bu değişkene programın içerisinden aşağıdaki şekilde toplu değer de atayabilirsiniz.
var ilk, son: deger;
...
ilk := [1, 3, 5, 7, 9]; //Toplu değerler atanıyor
son := [2, 4, 6, 8, 10]; //Toplu değerler atanıyor.
Bu şekilde bir tip tanımlaması yaptığınız zaman (Değişken toplu değerleri göstereceğinden dolayı) karşılaştırma yapacağınız değerin, aralığın içinde olup olmadığını “in” operatörüyle kontrol ettirmelisiniz (Biz de öyle yaptık).
İf ‘a’ in tip then //içinde varsa
begin
//’a’ tip değişkeninin gösterdiği aralıktaysa
end;
else
begin
//’’ tip değişkeninin gösterdiği aralıkta değilse
end;
veya
İf not(‘a’ in tip) then //içinde yoksa
begin
//’a’ tip değişkeninin gösterdiği aralıkta değilse
end;
“not” kullanılarak da olumsuz durum kontrol ettirilebilir. Tercih burada tamamen programcıya kalmıştır.
• Record Types
Kayıt işlemleri mantığıyla kullanılabilen ve programcı tarafından tanımlanabilen bir tiptir. Aşağıda bu husus örneklendirilmiştir.
type
birey = record
yil: Integer;
ay:(Ocak,Şubat,Mart,Nisan,Mayis,Haziran,Temmuz,Agustos,Eylul,Ekim, Kasim, Aralik);
gun: 1..31;
end;
Programın içerisinden de aşağıdaki şekilde değer ataması yapabilirsiniz.
var birey1: birey; //Tanımlanan tipe üye değişken tanımlanıyor.
.....
Record1.yil := 1973; //Doğum yılını gir
Record1.ay := Mayis; //Doğduğu ayı gir
Record1.gun := 1; //Döğduğu günü gir
With-do bloğu
Yukarıdaki değer atama işlemini kolaylık açısından aşağıdaki şekilde With – do deyimiyle de gerçekleştirebilirsiniz.
with birey1 do
begin
yil := 1973; //Doğum yılını gir
ay := Mayis; //Doğduğu ayı gir
gun := 1; //Döğduğu günü gir
end;
Yukarıdaki satırlara dikkat edecek olursanız alt alta üç kere “birey1.” yazmak yerine, tek bir kerede hepsinin birey1 in özelliğinin olduğunu with – do
deyimiyle kolaylıkla belirtebilmekteyiz. Büyük uygulamalarda satırların çoğalacağını düşünürseniz işinizi epeyce kolaylaştıracaktır (Karmaşayı da
azalttığını sanıyorum).
Record tip tanımlamasının daha iyi anlaşılabilmesi için aşağıdaki videoyu dikkatlice izleyiniz.
type
birey = record
yil: Integer;
ay:(Ocak,Şubat,Mart,Nisan,Mayis,Haziran,Temmuz,Agustos,Eylul,Ekim, Kasim, Aralik);
gun: 1..31;
end;
Programın içerisinden de aşağıdaki şekilde değer ataması yapabilirsiniz.
var birey1: birey; //Tanımlanan tipe üye değişken tanımlanıyor.
.....
Record1.yil := 1973; //Doğum yılını gir
Record1.ay := Mayis; //Doğduğu ayı gir
Record1.gun := 1; //Döğduğu günü gir
With-do bloğu
Yukarıdaki değer atama işlemini kolaylık açısından aşağıdaki şekilde With – do deyimiyle de gerçekleştirebilirsiniz.
with birey1 do
begin
yil := 1973; //Doğum yılını gir
ay := Mayis; //Doğduğu ayı gir
gun := 1; //Döğduğu günü gir
end;
Yukarıdaki satırlara dikkat edecek olursanız alt alta üç kere “birey1.” yazmak yerine, tek bir kerede hepsinin birey1 in özelliğinin olduğunu with – do
deyimiyle kolaylıkla belirtebilmekteyiz. Büyük uygulamalarda satırların çoğalacağını düşünürseniz işinizi epeyce kolaylaştıracaktır (Karmaşayı da
azalttığını sanıyorum).
Record tip tanımlamasının daha iyi anlaşılabilmesi için aşağıdaki videoyu dikkatlice izleyiniz.