12 Eylül 2007 - 14:15Delphi her türlü tarih fonksiyonu içeren DateUtils unitini içerir. Aşağıda bu fonksiyonlardan en çok ihtiyacınız olacağınızı düşündüklerimi açıkladım. Her fonksiyondan sonra, bir örnek ve örneğin döndüreceği değeri yazdım. Böylelikle konu daha açık anlaşılacaktır.

DELPHI (DELPHOI)

AntikçaÄŸ Yunanlılarının en ünlü kahinlik tapınağı…

Eski Yunan inançlarına göre, tanrılar tanrısı Zeus‘ün oÄŸlu Apollon, yılan-canavar Python‘un bekçilik ettiÄŸi bu tapınağı onu öldürerek ele geçirmiÅŸ. Pythia adlı kahin-büyücü kadını buraya yerleÅŸtirmiÅŸ, bu kadın gelecekten haber soranlara babası Zeus‘ün sözcüsü olan Apollon‘dan aldığı karşılıkları bildirirmiÅŸ. Yarışma yeri Olympia‘nın karşısında bir düşünme ve duyma yeri olan Delphoi’nin ortasında kutsal taÅŸ Omphales varmış, onun durduÄŸu yer, dünyanın tam ortasıymış.

Gelecekten haber verme alanında ünlü eski Yunan kentlerinin sınırlarını çok aÅŸan ve hemen o çağın bütün uygarlığına yayılan Delphoi tapınağı gerçekte, geleneÄŸin hukuksal bir düzene dönüşmesini gerçekleÅŸtirmiÅŸtir. Apollon‘un yetkesi, Zeus‘ün sözcüsü olarak, düzenin saÄŸlanması yolunda tanrılık yasalar oluÅŸturmuÅŸtur. Delphoi antikçaÄŸ Yunanlılarının bir çeÅŸit kilisesidir. Yunan tarihinde rastlanan ilk mezhep olan Pythagorasçılıkta bu kilisenin ürünüdür.

Yorum yok | Kategoriler: Programlama |

12 Eylül 2007 - 14:15Tarih ve saat (Date - Time) Fonksiyonları

Delphi her türlü tarih fonksiyonu içeren DateUtils unitini içerir. Aşağıda bu fonksiyonlardan en çok ihtiyacınız olacağınızı düşündüklerimi açıkladım. Her fonksiyondan sonra, bir örnek ve örneğin döndüreceği değeri yazdım. Böylelikle konu daha açık anlaşılacaktır.

Günün tarihini “03/09/2002″ Salı, saatini ise “11:05:03″ olarak kabul ettim. Bu fonksiyonları kullanırken uses kısmına DateUtils‘i eklemeyi unutmayın.

- CompareDate : verilen iki tarihi karşılaştırır. 1. tarih büyükse 1, küçükse -1, eğer iki tarihte aynı ise 0 değerini döndürür.

CompareDate(Date -2 , Date) = -1

NOT : Tarihler üzerinde direk toplama ve çıkarma iÅŸlemi yapabilirsiniz. “Date -2″ iki gün öncesinin tarihini verecektir.

- CompareDateTime : verilen iki tarih ve saat içeren datetime deÄŸerini karşılaÅŸtırır. 1. deÄŸer büyükse 1, küçükse -1, her iki tarihsaat deÄŸeri aynı ise 0 döndürür. Burada deÄŸerin aynı olması demek yıl’dan baÅŸlayark saliseye kadar tüm deÄŸerlerin aynı olması demektir.

- CompareTime : verilen iki saat değerini karşılaştırır. 1. değer büyükse 1, küçükse -1, iki değerde aynı ise 0 döndürür.

- CurrentYear : Geçerli yıl bilgisini 4 karakter olarak döndürür. 2002 gibi.

CurrentYear = 2002

- Date : Geçerli tarihi döndürür.

Date = 03/09/2002

- DateOf : Bir datetime deÄŸerini alarak bunun sadece tarih kısmını döndürür. Aslında burada saat bilgisi silinmez, “00:00:00″ yani geceyarısını gösterecek ÅŸekilde deÄŸiÅŸtirilir. Yani tarih ve saat ayrılmaz ikilidir. Sürekli beraberdirler.

DateOf ( Now ) = 03/09/2002

- DateTimeToStr : Verilen bir DateTime deÄŸerini string’e çevirir.

DateTimeToStr ( Now ) = ‘03/09/2002 11:05:03′

- DateTimeToString : Verilen bir DateTime deÄŸerini istediÄŸiniz formatta string’e çevirir.

var
Str : String;

DateTimeToString(Str, ‘d mmmm yyyy dddd, hh:nn’, Now);
ShowMessage ( Str ); = 3 Eylül 2002 Salı, 11:05

- DateToStr : verilen bir DateTime deÄŸerini string’e çevirir. Sonuçta sadece tarih verisi bulunur, saat olmaz.

DateToStr ( Date) = ‘03/09/2002′

- DayOf : Verilen bir DateTime değerindeki günü döndürür. Yani sonuç 1 ile 31 arasında bir değer olabilir.

DayOf ( Date ) = 3

- DayOfTheMonth : DayOf fonksiyonu ile tamamen aynıdır.

DayOfTheMonth ( Date ) = 3

- DayOfTheWeek : Haftanın kaçıncı günü olduÄŸunu döndürür. Pazartesi ise 1, Salı ise 2, … Pazar ise 7 döndürür.

DayOfTheWeek ( Date ) = 2

- DayOfTheYear : Yılın kaçıncı günü olduğunu döndürür.

DayOfTheYear ( Date ) = 246

- DayOfWeek : Haftanın kaçıncı günü olduÄŸunu döndürür. Bu fonksiyonun farkı Pazar günü ilk gün sayılır. Yani Pazar ise 1, Pazartesi 2 … Cumartesi ise 7 döndürür.

DayOfWeek ( Date ) = 3

- DaysBetween : verilen iki DateTime arasındaki geçen gün sayısını döndürür. Bu fonksiyonda saatte önemlidir. 24 saat geçmiÅŸ olmalıdır. Yani “02/09/2002 11:54:00″ ile “03/09/2002 11:53:59″ arasındaki gün sayısı 24 saat dolmadığı için 0 dır.

- DaysInAMonth : Verilen yıl ve aydaki gün sayısını döndürür.

DaysInAMonth (2002, 5) = 31

- DaysInAYear : Verilen yılda kaç gün olduğunu döndürür.

DaysInAYear ( 2002 ) = 365

- DaysInMonth : Verilen tarihteki ayın kaç gün olduğunu hesaplar. Yani yıl ve ay değerini verdiğiniz tarihten alır.

DaysInMonth ( Date ) = 30

- DaysInYear : Verilen tarihteki yılda kaç gün olduğunu döndürür. Yani yıl değerini verdiğiniz tarihten alır.

DaysInYear ( Date ) = 365

- DaySpan : Verilen iki DateTime deÄŸeri arasındaki gün farkını bulur. DaysBetween fonksiyonundan farkı, küsratlı deÄŸerler döndürür. Yani iki tarih arasında 1 gün 23 saat ve 58 dakika fark varsa DaySpan : “1,998611″ deÄŸerini döndürür, DaysBetween gün tamamlanmadığı için 1 deÄŸerini döndürür.

- DecodeDate : Verilen DateTime değerini yıl, ay ve gün değerlerini döndürür.

var
Yil, Ay, Gun : word;

DecodeDate ( Date, Yil, Ay, Gun);

- DecodeDateDay : Verilen DateTime değerinin yıl ve verilen tarihinde yılın kaçıncı günü olduğunu döndürür. 2002 ve 246. gün gibi.

- DecodeDateTime : Verilen DateTime değerinin yıl, ay, gün, saat, dakika, saniye, salise değerlerini döndürür.

var
yil, ay, gun, saat, dakika, saniye, salise : Word;

DecodeDateTime ( Now, yil, ay, gun, saat, dakika, saniye, salise);

- DecodeDateWeek : Verilen DateTime değerinin yılını, yılın kaçıncı haftası olduğunu ve haftanın kaçıncı günü olduğunu döndürür.

- DecodeTime : Verilen DateTime değerinin saat, dakika, saniye ve salise değerlerini döndürür.

var
saat, dakika, saniye, salise : Word;

DecodeTime ( Now, saat, dakika, saniye, salise);

- EncodeDate : Verilen yıl, ay, gün değerlerini birleştirip oluşan tarih değerini döndürür.

var
Tarih : TDateTime;

Tarih := EncodeDate (2002, 10, 5); = 05/10/2002

- TryEncodeDate : Verilen yıl, ay, gün değerlerini birleştirip oluşan tarih değerini döndürür. Eğer yanlış değerler verilmişse fonksiyon False değerini geri döndürür, tarih başarıyla birleştirilmişse True değerini döndürür.

var
Tarih : TDateTime;

if TryEncodeDate(2002, 10, 5, Tarih) then
ShowMessage (’ tarih baÅŸarıyla birleÅŸtirildi!’);

- EndOfAMonth : Verilen yıl ve ayın son günü ve son anını döndürür.

EndOfAMonth (2002, 5) = 31/05/2002 23:59:59

- FormatDateTime : Verilen DateTime değerini istediğiniz formatta göstermek için kullanılır.

FormatDateTime (’d mmmm yyyy’, Date) = ‘3 Eylül 2002′

- HourOf, HourofTheDay : Verilen DateTime değerinin saatini döndürür. Yani sonuç 0 ile 23 arasındadır.

HourOf (Now) = 11

- HoursBetween : Verilen iki DateTime değeri arasında geçen saati döndürür. Fonksiyon 60 dakika tamamlanınca değeri arttırır. Yani 12:00:00 ile 12:59:59 arasındaki fark 0 (sıfır) dır, ancak 13:00:00 olduğunda 1 döndürür.

- HourSpan : Verilen iki DateTime değeri arasında geçen saati döndürür. Yukarıdaki fonksiyondan farkı saat tam olmasa bile değeri küsuratlı olarak döndürür. Mesela 12:00:00 ile 12:59:59 arasındaki saat farkı 0,9998 saat gibi.

- IncMonth : Verilen tarihi, istenilen ay kadar artırır veya azaltır.
o Eğer parametre - verilirse önceki ayları döndürür. Örneğin -1 verilirse bir ay önceki tarihi döndürür.
o Eğer parametre 1 den büyük bir değer verilirse o kadar ay sonrasını döndürür.
o Eğer tarih arttırıldığı zaman verilen gün o ay içerinde yoksa, o ayın son günü döndürülür. Mesela 31/01/2002 tarihini bir ay artırırsanız şubat ayında 31. gün olmadığı için sonuç 28/02/2002 olacaktır.

IncMonth ( Date ) = 03/10/2002

- IncDay : Verilen tarihi istenilen gün kadar artırır veya azaltır. Parametre + verilirse artırır, - verilirse azaltır.

IncDay ( Date ) = 04/09/2002
IncDay ( Date, 3 ) = 06/09/2002
IncDay ( Date, -1) = 02/09/2002

- IncHour : Verilen DateTime değerinin saatinin istenilen değer kadar artırır veya azaltır. Benzer şekilde IncMinute, IncMilisecond, IncSecond fonksiyonları da vardır.

- IncWeek : Verilen tarihi istenilen hafta sayısı kadar artırır veya azaltır. Parametre + verilirse artırır, - verilirse azaltır.

IncWeek ( Date ) = 10/09/2002

- IncYear : Verilen tarihin senesini istediğinz kadar artırır veya azaltır. Parametre + verilirse artırır, - verilirse azaltır.

IncYear ( Date ) = 03/09/2003
IncYear ( Date, -2) = 03/09/2000

- IsInLeapYear : Verilen tarihin artık bir senede (Åžubat’ın 29 gün olduÄŸu) olup olmadığını test eder.

if IsInLeapYear (Date) then
ShowMessage (’ 2002 senesi artık yıl olmadığı için, bu mesajı asla göremezsiniz!’);

- IsLeapYear : Verilen senenin artık sene (Åžubat’ın 29 gün olduÄŸu) olup olmadığını test eder.

if IsLeapYear ( CurrentYear ) then
ShowMessage (’ Bu sene Åžubat ayı 29 gün çekiyor’);

- IsToday : Verilen tarihin bugünün tarihi olup olmadığını test eder. Aynı gün ise True döndürür.

if IsToday ( Date ) then
ShowMessage ( ‘Date bugünün tarihini verdiÄŸi için bu mesajı görürsünüz’);

- IsValidDate : Verilen yıl, ay, gün değerlerinin geçerli bir tarih olup olmadığını test eder. Örneğin ay 2 ve gün 30 ise, Şubat hiç bir zaman 30 gün olamayacağı için False döndürür.

if IsValidDate (2002, 10, 1) then
ShowMessage (’geçerli bir tarihtir’);

- IsValidDateTime : Verilen yıl, ay, gün, saat, dakika, saniye, salise değerlerinin geçerli bir DateTime değeri olup olmadığın test eder. Geçerli ise True, değilse False döndürür.

if not IsValidDateTime ( 2002, 13, 5, 11, 11, 11, 11 ) then
ShowMessage (’ ay hiç bir zaman 13 olamaz, 1 ile 12 arası bir deÄŸer olamlıdır!’);

- IsValidTime : Verilen saat, dakika, saniye, salise değerlerinin geçerli bir saat değeri olup olmadığın test eder. Geçerli ise True, değilse False döndürür.

if not IsValidTime (30, 11, 10, 1) then
ShowMessage (’ saat 23” ten büyük olamayacağı için geçersiz bir tarihtir’);

- MinutesBetween : Verilen iki tarih arasındaki dakika farkını verir. Dakika tam olduğu zaman değeri artırır. Örneğin 9:00:00 ile 9:00:59 arasındaki farkı 0 (sıfır) olarak döndürür.

- MinuteSpan : Verilen iki tarih arasındaki dakika farkını verir. Dakika tam olmasa bile küsuratlı olarak değeri döndürür. Örneğin 9:00:00 ile 9:00:59 arasındaki farkı 0,998 dakika gibi döndürür.

- MonthOf : Verilen tarihin ayını döndürür. Yani sonuç 1 ile 12 arasında bir değer olmalıdır.

MonthOf ( Date ) = 9

- MonthsBetween : Verilen iki tarih arasındaki ay farkını verir. Ayların uzunlukları eşit olmadığı için bir ay 30.4375 gün olarak belirlenmiştir. Her 30.4375 gün için değer 1 arttırılır.

- MonthSpan : Verilen iki tarih arasındaki ay farkını verir. 1 ay yine 30.4375 gün olarak belirlenmiştir. Süre tamalanmasa bile küsuratlı olarak değeri döndürür.

- Now : Geçerli tarih ve saati döndürür.

Now = 03/09/2002 11:05:03

- NthDayOfWeek : Verilen tarihteki günün, o ay içindeki kaçıncı iş günü olduğunu döndürür. Mesela gün Salı ve ayın ikinci Salısı ise 2 döndürür.

NthDayOfWeek ( Date ) = 1

- StartOfAMonth : Verilen yıl ve aydaki ilk günün ilk anını döndürür.

StartOfAMonth (2002, 5) = 01/05/2002 00:00:00

- StrToDate: Verilen stringi tarih değerine çevirir.

StrToDate (’01/01/2002′) = 01/01/2002

- StrToDateTime : Verilen stringi DateTime değerine çevirir.

StrToDateTime (’01/01/2002 05:22:00′) = 01/01/2002 05:22:00

- Time : Geçerli saati döndürür.

Time = 11:05:03

- TimeToStr : Verilen saat değerini stringe çevirir.

TimeToStr ( Time ) = ‘11:05:03′

- Today : Bugünün tarihini döndürür.

Today = 03/09/2002

- Tomorrow : Ertesi günün (yarın) tarihini döndürür.

Tomorrow = 04/09/2002

- YearOf : Verilen tarihin yılını döndürür.

YearOf ( Date ) = 2002

- YearsBetween : Verilen iki tarih arasındaki yıl farkını döndürür.

- Yesterday : Bir önceki günün (dün) tarihini döndürür.

Yesterday = 02/09/2002

DateUtils uniti içinde bunun en az iki katı daha fonksiyon var. Ben en çok kullandıklarımı ve lazım olabileceÄŸini düşündüklerimi burada açıkladım. Listenin tamamını görmek için, Help’ten “date/time routines” kısmına bakın.

Yorum yok | Kategoriler: Programlama |

12 Eylül 2007 - 14:15Borland Kodlama Standartları

Bu doküman Delphi kod yazma standartlarını anlatmaktadır. Borland tarafından oluşturulan ve birçok Delphi programcısı tarafından benimsenen standartlar. Object Pascal çok güzel dizayn edilmiş bir dildir, bu standartların temel amacı da kodu daha okunabilir kılmaktır. Daha sonra yazdığınız bir koda baktığınız zaman kolayca okuyabilmelisiniz veya birlikte proje geliştirdiğiniz bir takım arkadaşınız kodlarınızı kolayca anlayabilmelidir.

 

GENEL KURALLAR

 

Hizalama

 

* EÄŸer kodda hizalama yaparsanız, kodları okumak ve takip etmek çok daha kolay olacaktır. İlk hiza baÅŸlangıçtan itibaren 2 boÅŸluk bırakarak, ikinci hiza baÅŸlangıçtan itibaren 4 boÅŸluk bırakarak, üçüncü hiza baÅŸlangıçtan itibaren 6 boÅŸluk oluÅŸturarak ve sonrasında her hiza için iki boÅŸluk (8, 10, 12, 14… boÅŸluk) bırakarak devam edilmelidir.

 

* Tab karakterlerini kod dosyalarına kaydetmeyin. Çünkü Tab karakterinin belirttiği boşluk miktarı kullanıcıdan kullanıcıya ve çeşitli kod uygulamalarında farklı algılanmaktadır.

 

Tools -> Editor Options -> Source Options kısmındaki Use Tab Character seçeneÄŸini iptal ederek Tab karakterinin kod dosyalarına kaydolmasını engelleyebilirsiniz. Bu seçeneÄŸi kapattığınızda, Tab’a bastınığız zaman Tab karakteri yerine boÅŸlukla doldurulur.

 

* Kod editöründe düşey bir çizgi vardır. Kod yazarken bu çizgiyi geçmezseniz kodunuz hem daha kolay okunur, hem de çıktıları daha iyi gözükür.

 

* Birbiriyle ilişkili begin ve end, birbiriyle aynı hizada ve ayrı satırlar şeklinde yazılmalıdır.

 

Yanlış : for i := 0 to 10 do begin // begin, for’la aynı satırda

 

DoÄŸru : for i := 0 to 10 do

begin

 

if Åžart then

begin

end

else

begin

end;

 

Yorum Koyma

 

* Yorum için //, {} ve (* *) kullanılır.

 

* // tek satıra yorum yazmak için kullanılır.

{} ve (* *) ise blok olarak yorum koymak için kullanılır, başlangıç ve bitiş arasındaki her şey yorum kabul edilir. Bunlardan {} yorum yazmak, (* *) de çalışma anında geçici olarak bazı kodları devre dışı bırakmak için kullanabilirsiniz.

 

* Koda ne fazla, ne de az, anlamanız için yeterli olacak kadar yorum ekleyin.

 

* Eğer düzeltmek istediğiniz bir koda geçici olarak yorum ekliyorsanız, yorumun başına ??? eklemek iyi olacaktır. Daha sonra kolayca bu satırları bulup, gerekli düzenlemeleri yapabilirsiniz.

 

//???:diğer procedure�u hazırlayınca sıralama kısmını da düzeltmek gerek.

 

Lisans Bilgisi Ekleme

 

Yazdığınız unit�e lisans bilgileri eklemek istiyorsanız, unit�in en üstüne aşağıdaki yapıda eklenmelidir. Gerekirse araya aynı formatta yeni satırlar eklenebilir.

 

{*******************************************************}
{                                                       }
{       Üretim Modülü                                   }
{                                                       }
{       © 2002-2003, delphiturkiye.com                  }
{                                                       }
{*******************************************************}

 

 

OBJECT PASCAL

 

 

BoÅŸluklar

 

Object Pascal boşlukları göz ardı eder. Object Pascal çok güzel bir dizayna sahip olduğu için çok fazla boşluk bırakmanız gerekmeyecek, ancak;

 

* Rutin (procedure, function) tanımları arasında bir satır boşluk bırakmalısınız.

 

* Açma parantezi ile bir sonraki karakter ve kapama parantezi ile bir önceki karakter arasında boşluk bırakmayın.

 

Yanlış : CallProc( AParameter )

DoÄŸru : CallProc(AParameter)

 

* Kod içerisinde gereksiz yerlerde ekstra parantezler kullanmayın.

 

if (i = 15) then // yanlış, burada paranteze gerek yok.

if (i = 15) or (j = 5) then  // doÄŸru, parantezler gerekli

 

* Noktalı virgülden önce boşluk bırakmayın.

 

* Köşeli parantezlerden önce ve sonra boşluk bırakmayın.

 

Yanlış : MyInteger := MyIntegerArray [ 3 ];

DoÄŸru : MyInteger := MyIntegerArray[3];

 

Ayrılmış Kelimeler (Reserved Words)

 

Object pascal’a ait ayrılmış kelimeler (for, if, begin, end gibi kod içinde özel manası olan kelimeler) tamamen küçük harflerle yazılmalıdır. Bu kelimeler varsayılan olarak editör içinde koyu yazı tipi ile gösterilirler.

 

 

Procedure ve Function�lar (Rutinler)

 

* Rutinlere yaptıkları işi anlatan manalı isimler verilmelidir. Genelde iyi isimler; bir isim ve bir fiilden oluşur.

 

DosyaBul, ProgramiKapat gibi.

 

* Rutin isimlerini daha kolay okuyabilmek için kelimelerin baş harfleri büyük yazılmalıdır.

 

yanlış : procedure bubiruzunokumasizorrutinismi;

doÄŸru : procedure BuOkumasiKolayBirRutinIsmi;

 

* Rutin isimlerinde alt çizgi kullanılmamalıdır.

 

Yanlış : procedure Bu_Yanlis_Bir_Procedure_Ismi;

 

Parametreler

 

* Mümkün olduğu kadar, aynı tipteki parametreler tek bir ifadede toplanmalıdır.

 

yanlış : procedure Ornek(Parametre1: string; Parametre2: string; Parametre3: string);

doÄŸru : procedure Ornek(Parametre1, Parametre2, Parametre3: string);

 

* Parametrelere manalı isimler verilmelidir.

 

* Eğer kategorisel bir sıralama olabiliyor ise parametrelerin sıralamasını ona göre yapın.

 

BirProc (Ulke, Bolge, Il, Ilce : string); gibi.

 

* Böyle bir kategori yok ise çok kullanılan parametreden, az kullanılan parametreye doğru yazın. Bir istisna olarak eğer Sender parametresi varsa daima ilk sırada yazılır.

 

İsim Çakışmalarını Önleme

 

Eğer bir rutin birden fazla unitte tanımlı ise uses kısmında bu unitlerin ikisinin de kullanımı durumunda oluşabilecek karışıklıkları önlemek için bu rutinleri unit ismi ile kullanmak gereklidir.

 

Örnek : FindClose rutini 2 unitte tanımlıdır.

 

SysUtils.FindClose(SR); veya Windows.FindClose(Handle);

 

DeÄŸiÅŸkenler

 

* Değişkenlere anlamlı isimler verilmeli.

 

* Döngü değişkenleri için genelde i, j, k harfleri kullanılır.

 

* Boolean değişkenler tanımlanırken isimleri (True, False) değerlerini tam manasıyla anlatacak bir isim olmalı.

 

 

 

* Birden fazla aynı tipte değişkeni ayrı ayrı satırlarda tanımlamak yerine, tek satırda tanımlanmalı.

 

var

i: integer;

j: integer;

 

yerine

 

var

i, j: integer;

 

* Eğer gerekli ise lokal değişkenlere hemen rutinin girişinde ilk değerler atanmalıdır.

 

* Mümkün olduÄŸu kadar global deÄŸiÅŸkenler kullanılmamalı, sadece gerçekten gerekli olduÄŸu durumlarda kullanılmalıdır. Global deÄŸiÅŸkenlere tanımlama aÅŸamasında ilk deÄŸer ataması yapılabilir. EÄŸer gerekli ise bu atamaları tanımlama kısmında yapabilirsiniz. Ancak atayacağınız deÄŸerler 0, nil, … sıfırlama deÄŸerleri ise bu atamaları yapmayın. Bu atamalar en uygun biçimde Delphi tarafından zaten sıfırlanmaktadır.

 

Real Tipini Kullanmayın

 

* Real tipi geriye doğru uyumluluk için bulunmaktadır. bunun yerine Double tipini kullanın.

 

Variant ve OleVariant

 

Çalışma esnasında tipi belli olmayan verileri tutmak için kullanılırlar ve genelde COM ve veritabanı programlarında lazım olurlar, bunların dışında pek kullanmayın. Variant’lar diÄŸer tiplere göre çok daha yavaÅŸ çalışırlar.

 

Variant stringleri Delphi tipinde tutarken, OleVariant bu stringleri Ole string’lere çevirir (WideChar). Bunun için COM-based uygulamalarda ve ActiveX geliÅŸtirirken OleVariant kullanın.

 

if İfadesi

* if/then/else şeklinde kullanılan ifadelerde, gerçekleşmesi daha muhtemel olay then kısmında, daha az muhtemel olan ise else kısmında yer almalıdır.

 

* if ifadelerinin okunması daha zor olduğundan, mümkün olduğu kadar case ifadesi kullanın.

 

* iç içe if ifadelerini en fazla 5 seviyeye kadar yapın. Daha fazlasına ihtiyacınız varsa, yapınızı gözden geçirip daha uygun bir yapıya çevirin.

 

* Eğer birden fazla şartı test ediyorsanız, şarları hızlı çalışandan yavaş çalışana doğru dizmeniz daha iyidir. Mesela şart1 daha hızlı hesaplanıyor ve şart2 biraz daha yavaş hesaplanıyorsa

 

if Åžart1 or Åžart2 then // ÅŸart1 True ise, Åžart2′ye bakılmaz.

 

 

 

 

* Birden fazla şartı test ediyorsanız ve şart ifadeleri uzunsa, her şartı bir satıra yazmak daha iyi olacaktır.

 

if Åžart1 and

Åžart2 and

Åžart3 then

 

case İfadesi

 

* case’de ifadeler nümerik veya alfabetik sıralamada yazılmalıdır.

 

* her ifadenin uzunluğu 4-5 satırı geçmemesi iyi olur. Eğer bir ifadenin uzunluğu çok fazla ise bunu ayrı bir procedure veya fonksiyon olarak yazmak daha iyi olacaktır.

 

* her ifade begin..end blokları arasına yazılmalıdır.

 

case İfade of

ifade1 :

begin

end;

ifade2 :

begin

end;

else

end; {case}

 

with ifadesi

 

with ifadesi yazımda kolaylık sağlaması açısından kullanılır. Ancak with ifadesini gerekli yerlerde kullanmalı ve birden fazla nesne ile kullanmamalısınız.

 

Yanlış : with Record1, Record2 do

 

böyle bir kullanım hem kodu okuyan kişiyi şaşırtır, hem de hata tespitlerini zorlaştırır.

 

EndIf, EndCase, EndWith

 

Object Pascal�da bu ifadeler yoktur. Bu ifadeler begin..end blokları arasına yazılırlar. Bu ifadeleri kullanırken, başlangıç ve bitiş bloklarını belirlemek için yorum kullanmalısınız :

 

if i > 5 then

begin

  end; {if}  // if bloÄŸunun bitiÅŸi

 

with Query1 do

begin

….

end; {with} // with bloÄŸunun bitiÅŸi

 

Enumerated Type

 

Her elemandan önce enumarated type�i belirten harflerin eklenmesi gerekir. Aşağıdaki örnekte, her elemandan önce bk harfleri eklenmiştir ve bunlar ButtonKind ifadesinin baş harfleridir.

 

Yalnız sadece L veya 1 eklemekten kaçının. Bunlar gösterimde ve bazı yazıcılarda problem çıkartabilir.

 

TBitBtnKind = (bkCustom, bkOK, bkCancel, bkHelp, bkYes, bkNo,
               bkClose, bkAbort, bkRetry, bkIgnore, bkAll);

 

Exception Handling

 

Delphi’de genel kural nesneyi oluÅŸturan yok eder. EÄŸer bir form veya bir nesne oluÅŸturmuÅŸsanız onu yok etme görevi de sizindir. Aldığınız kaynakları geri sisteme vermelisiniz. Bunun için bol bol try..finally bloÄŸu kullanmanız gerekir.

 

SomeClass1.Create; // oluÅŸtur

try

… // bir ÅŸeyler yap

finally

SomeClass1.Free; // SomeClass1 mutlaka yok edilir.

end; {try}

 

Eğer bir hata oluştuğu zaman bir işlem yapmak istiyorsanız (genelde hatayı gösterme veya kaydetme gibi) try..except bloğu kullanmalısınız.

 

try

….

except

…. // hata oluÅŸursa bu blok çalışır

end; {try}

 

Class İsimleri

 

* Her zaman olduÄŸu gibi mantıklı isimler verilmelidir. Delphi’de classların başına T harfinin konulması bir gelenektir. Yani Her class(sınıf) ismi T ile baÅŸlamalıdır.

 

type

TMusteri = class(TObject);

 

Fields ve Property Access

 

* Field�ların başına F harfi eklenmelidir. FYukseklik gibi.

 

* Tüm fieldlar private kısmında tanımlanmalıdır.

 

* property erişimi için kullanılan metodların başına get ve set kelimeleri eklenmelidir.

 

property Yukseklik: Integer read GetYukseklik write SetYukseklik;

 

* Methodlar alfabetik sırada sıralanmalıdır. Yani : private � protected � public - published

 

DOSYALAR

 

* Projelere anlamlı ve açıklayıcı isimler verilmelidir. Mesela sistem bilgilerini gösteren bir program için : SystemInfo.dpr gibi.

 

* Form isimlerine anlamlı ve açıklayıcı bir isimden sonra Frm karakterleri ile biten bir isim verilmedir. Mesela Stok formu için StokFrm.pas gibi.

 

* Data Modüllere yine açıklayıcı bir isimden sonra DM karakterleri ile biten bir isim verilmelidir. Mesela müşteri tabloların yer aldığı data module ise : MusteriDM.pas gibi.

 

FORMLAR

 

* Form isimleri açıklayıcı bir ön isim ve Form kelimesinin birleşmesinden oluşmalıdır. Mesela Stok formunun ismi : StokForm, müşteri bilgilerinin girişinin yapıldığı formun ismi : MusteriGirisForm

 

* Sadece çok gerekli formlar auto-create yapılmalıdır. Auto-Create formlar program çalıştığı anda otomatik olarak oluşturulur ve hafızada yer kaplarlar. Çok gerekli formlar dışındaki diğer formlar Project Options kısmından Avaible Forms kısmına alınmalıdır.

 

* Data modullere açıklayıcı bir ön ekten sonra DataModule kelimeleri eklenmelidir. Mesela müşteri tablolarının yer aldığı data module için MusteriDataModule gibi.

 

BİLEŞEN ÖNEKLERİ

 

Forma koyduğunuz her bileşene bileşenin türünü gösteren bir önek ve anlamlı isimler vermelisiniz. Aşağıda bileşenler için önekler yer almaktadır.

 

Örneğin Vergi nosunun girileceği Edit�in ismi, başına Edt önekini alarak EdtVergiNo olmalı.

 

Standard Tab

Önek

Component

Mm

TmainMenu

Pm

TpopupMenu

Mmi

TmainMenuItem

Pmi

TpopupMenuItem

Lbl

Tlabel

Edt

Tedit

Mem

Tmemo

Btn

Tbutton

Chk

TcheckBox

Rb

TradioButton

Lb

TlistBox

Cb

TcomboBox

Scb

TscrollBar

Gb

TgroupBox

Rg

TradioGroup

Pnl

Tpanel

Cl

TcommandList

 

 

Additional Tab

Önek

Component

Bbtn

TbitBtn

Sb

TspeedButton

Me

TmaskEdit

Sg

TstringGrid

Dg

TdrawGrid

İmg

Tımage

Shp

Tshape

Bvl

Tbevel

Sbx

TscrollBox

Clb

TcheckListbox

Spl

Tsplitter

Stx

TstaticText

Cht

Tchart

 

 

Win32 Tab

Önek

Component

Tc

TtabControl

Pc

TpageControl

Il

TımageList

Re

TrichEdit

Tbr

TtrackBar

Prb

TprogressBar

Ud

TupDown

Hk

ThotKey

Ani

Tanimate

Dtp

TdateTimePicker

Tv

TtreeView

Lv

TlistView

Hdr

TheaderControl

Stb

TstatusBar

Tlb

TtoolBar

Clb

TcoolBar

 

System Tab

 

Önek

Component

Tm

Ttimer

Pb

TpaintBox

Mp

TmediaPlayer

Olec

ToleContainer

Ddcc

TDDEClientConv

Ddci

TDDEClientItem

Ddsc

TDDEServerConv

Ddsi

TDDEServerItem

 

Internet Tab

 

Önek

Component

Csk

TclientSocket

Ssk

TserverSocket

Wbd

TwebDispatcher

Pp

TpageProducer

Tp

TqueryTableProducer

Dstp

TdataSetTableProducer

Nmdt

TNMDayTime

Nec

TNMEcho

Nf

TNMFinger

Nftp

TNMFtp

Nhttp

TNMHttp

NMsg

TNMMsg

Nmsg

TNMMSGServ

nntp

TNMNNTP

npop

TNMPop3

nuup

TNMUUProcessor

smtp

TNMSMTP

nst

TNMStrm

nsts

TNMStrmServ

ntm

TNMTime

nudp

TNMUdp

psk

TpowerSock

ngs

TNMGeneralServer

html

THtml

url

TNMUrl

sml

TsimpleMail

 

 

Data Access Tab

 

Önek

Component

Ds

TdataSource

Tbl

Ttable

Qry

Tquery

Sp

TstoredProc

Db

TdataBase

Ssn

Tsession

Bm

TbatchMove

Usql

TUpdateSQL

 

Data Controls Tab

 

Önek

Component

Dbg

TDBGrid

Dbn

TDBNavigator

Dbt

TDBText

Dbe

TDBEdit

Dbm

TDBMemo

Dbi

TDBImage

Dblb

TDBListBox

Dbcb

TDBComboBox

Dbch

TDBCheckBox

Dbrg

TDBRadioGroup

Dbll

TDBLookupListBox

Dblc

TDBLookupComboBox

Dbre

TDBRichEdit

Dbcg

TDBCtrlGrid

Dbch

TDBChart

 

Decision Cube Tab

 

Önek

Component

Dcb

TdecisionCube

Dcq

TdecisionQuery

Dcs

TdecisionSource

Dcp

TdecisionPivot

Dcg

TdecisionGrid

Dcgr

TdecisionGraph

 

QReport Tab

 

Önek

Component

Qr

TquickReport

Qrsd

TQRSubDetail

Qrb

TQRBand

Qrcb

TQRChildBand

Qrg

TQRGroup

Qrl

TQRLabel

Qrt

TQRText

Qre

TQRExpr

Qrs

TQRSysData

Qrm

TQRMemo

Qrrt

TQRRichText

Qrdr

TQRDBRichText

Qrsh

TQRShape

Qri

TQRImage

Qrdi

TQRDBMImage

Qrcr

TQRCompositeReport

Qrp

TQRPreview

Qrch

TQRChart

 

Samples Tab

Önek

Component