ANA SAYFA    |    YAYINLAR    |    BİYOGRAFİ    |    KONUŞMALAR    |    HABERLER    |    DİĞER    |

Kitabin asil yazari

TEMEL PASCAL

newDüzenlemeler
 
BÖLÜM 2 : Pascalda Kodlama

Pascal programlama dilinin komutlarina geçmeden önce Pascalda kodlama stilinin önemi hakkinda biraz bahsetmek istiyorum. Burada hedefledigim soru yazim kurallarinin yaninda program kodunu nasil yazarsininiz ? Bu sorunun bir tek cevabi yoktur, kisilerin sahsi kodlama stili degiskenlik gösterebilir. Bununla birlikte yorumlar, büyükharf kullanimi, bosluklar ve güzel yazim kurallari ile ilgili bir kaç prensibin oldugunu bilmekte fayda var. Genel olarak kodlama stiline verilen önemin sebebi baskasi tarafindan okundugunda rahat anlasilir olmasidir. Kodun anlasilir olmasinin temelindeki fikir birlikteliktir, her ne tür yazim stilini seçerseniz seçin parojenizin basindan sonuna asagidaki konulari bir bütün olarak gözetmeniz gerekir.



Yorumlar

Pascalda yorum cümleleri kivircik parantez yada parantezi takip eden yildiz ile çevrelenir. Delphi , C++ stili yorum cümlelerinide destekler

{Bu bir yorum cümelesi örnegidir}
(* Baska bir örnek *)
// Bu da C++ türü yorum cümlesidir satirin sonuna kadar geçerlidir.

Ilk yazilan örnek en çok kullanilan ve en kisa olanidir. Ikinci örnek daha çok Avrupada kullanilir çünkü Avrupa standadindaki klavyelerde kivircik parantez yoktur. Üçüncü örnek ise C++ dan ödünç alinmistir ve Delphinin 32 bit versiyonlari tarafindan desteklenir. Son örnekteki stil tek satirlik kisa yorumlar yazmak için kullanilir ve istenilmeyen kod parçalarinin basina koyularak yorum haline getirilebilir.


Delphinin yazim kurallari ile standardizasyon saglamak için kitabin geri kalan kisminda yorumlari italik olarak yazacagim.

Üç degisik tipte yorum cümlesi yazabilmenin getirisi yuvalanmis yorum cümleleri yazmaya olanak saglamasidir. Bir örnekle açiklayalim

{ ….. kod
{ yorumlar …………
}
….. kod }

yukaridaki yorum cümlesi hatalidir çünkü ilk kivircik parantez açildiktan sonra bitisi gösteren ilk kivircik paranteze kadar olan kisim yorum cümlesi olarak sayilacak kalan kod ise sayilmayacaktir. Örnektede italik ve normal yazi stilile gösterilmistir. Bu kodun dogrusu Pascalin sagladigi genis kullanim perspektifi ile söyle olabilir

{…… kod
// Bu yuvalanmis yorum cümlesi dogru olani
…. Kod
}

Eger kivircik parantezden hemen sonra $ isaretini yazarsaniz bu kod yorum cümlesi olmaktan çikar ve {$X+} gibi bir derleyici direktifi haline gelir.

Aslinda derleyici direktifleride birer yorum cümlesi sayilir, yani {$X+ buraya yorum cümesi yazin} gibi bir kodda herhangi bir hataya sebep olamazken hem yorum cümlesi hemde derleyici direktifi olarak kabul edilir.



Büyük harf kullanimi

Pascal derleyicisi ( diger derleyicilerden farkli olarak ) büyük küçük harf ayrimi yapmaz. Bu yüzden bir degisken ismi olarak kabul edecegimiz index, Index, INDEX, InDeX hep ayni anlama gelmektedir. Genelinde bu esnekligin olumlu yanlari vardir, zira büyük/küçük harf ayrimi gözeten derleyicilerde bu sebepten dolayi bir çok yazim hatasi alinmaktadir.

Büyük/küçük harf kullanimi ile ilgili tek bir istisna vardir oda C++Builder ile standardizasyonu saglamak için component paketi olustururken Register proceduru yaziminda R harfinin büyük yazilmasi gerekmektedir. Bunun haricinde Delphide küçük/Büyük harf ayrimi gözetilmemektedir.

Bunun yaninda anlasilmasi zor bir kaç dezavantajlari bulunmaktadir. Ilk olarak, bu tanimlayicilarin ( degisken isimleri gibi) ayni oldugunun farkinda olmaniz gerekir, bu yüzden Index ve INDEX degisken isimlerini farkli birer yapiymis gibi kullanmamaniz gerekir. Eger çok uzun bir tenimlayici ismi belirleyecekseniz (arada bosluk olmamak kosulu ile) kelimelerin bas harflerini büyük harfler ile yazabilirsiniz.

BenimUzunDegiskenim
BenimUzunVeAnlamsizSayilabilecekDegiskenim
gibi

Program koduna eklemis oldugunuz bosluk, tab, bos satirlar derleyici tarafindan göz ardi edilir. Bütün bu elemanlar White Space’s olarak tanimlanir. White Spaceler kodun okunulabilirligini arttirmak için kullanilir, derleyici tarafindan dikkate alinmaz.

Basic programlama dilinin aksine Pascal tek bir kod parçasini birden fazla satira yazmaniza izin verir, uzun bir komutu bir yada daha fazla satira yazabilirsiniz. Bunun dezavantaji ( daha çok Basic dili kullanicilari için) bir komutun bittigini göstermek için sonuna noktali virgül konulmasinin gerekliligidir.

Tekrar belirtmek gerekirse, bosluklarin, birkaç satira dagilmis komutlarin kullanimi ile ilgili kesin kurallar olmamakla birlikte su maddelere dikkat etmek gerekir.

- Delphi editöründe 60-70 karakter yazdiktan sonra göreceginiz dikey bir çizgi vardir. Bu çizgiden itibaren yazmaya devam etmekten kaçinmak lazim bubun sebebi kodun yazicidan çiktisi alinirken kelimelerin ortadan bölünüp alt satira atilmis olamasi gibi sorunlar ile karsilasilabilecegidir.

- Eger prosedür veya fonksiyonlariniz birden fazla parametreden olusuyorsa bu parametreleri birden fazla satira dagitmak genel bir programlama teknigidir.

- Yorum cümlelerinden önce bos bir satir birakabileceginiz gibi uzun program komutlarinida aralarinda bos satirlar birakarak bölebilirsiniz bu hem okunabilirligi arttirir hemde yazicidan çikti aliminda karsilasilabilecek sorunlari azaltir.

- Bir fonksiyon çagrisi yaparken parametreler arasinda bosluklar birakmaya çalisin hatta açtiginiz parametreden sonrada bir bosluk birakin. Ve tabiki bir islemin operatörleri arasinada bosluk birakin. Biliyorumki bazi programcilar bu söylediklerime karsi çikacaklar fakat israrli olmama sebep nokta : Bosluk kullanimindan dolayi bir kaybinizin olmayisidir. (Biliyorumki bosluk kullanimi diskte yer kaplayacak ve modem araciligi ile yükleme islemi yapildiginda zaman kabina yol açacak ama bütün bunlar günümüzde önemsiz bir hale geldi.)



Güzel Yazim

White Space’lerin kullanimi ile ilgili yapilan son tavsiyeler aslinda Pascal dili formatinin tipik sitilidir ve güzel yazim olarak bilinir. Bu kural çok basittir: Her birlesik program komutu yazacaginiz zaman iki bosluk karateri içeriden yazmaya baslayin.


if …. then
  Komut;
if ….. then
begin

  Komut1
  Komut2
end;

if …. Then
begin
  if … then

    komut1;
  komut2;
end;


Yukaridaki format güzel yazim sitili temel alinarak olusturulmustur, kullanicilar kendi sitillerini kullanarakta ayni kodu yazabilirler.

Bu tür bir yazim sitili degiskenler yada veri yapilari içinde kullanilabilir.

type
  Harfler = set of Char;
var
  Ad: string;
begin
  { yorum cümleleri }
  MessageDlg ('Bu bir mesaj',
    mtInformation, [mbOk], 0);

Tabiki, bu tür bir öneri baskalari tarafindan okunulabilirligi arttirmak amacini gütmektedir, derleyici bütün bu yazim formatini gözardi edecektir. Bu yazim sitilini kitabin geri kalan kisminda kullanacagim. Delphi’nin kaynak kodu, yardim dosyalari ve örnekleri benzeri bir yazim sitilini kullanmaktadir.



Syntax Highligting (Türkçeye çevirmedim, konuyu okuyunca anlasilacak)

Pascal kodunu daha kolay okunabilir ve yazilabilir hale getirmek için, Delphi editörünün “Color syntax highligting” adinda özelligi bulunmakta. Yazdiginiz kelimelerin Pascal dilindeki anlamlarina göre editörde farkli renklerde görünmesini saglar. Varsayilan deger olarak Keyword( anahtar kelimeler) ler kalin, karakter katarlari ve yorumlar renkli ( genelde italic) gibi yazilir.

Genelde ayrilmis kelimeler (Reseved words), yorumlar, ve karakter katarlari bu özellikten yararlanan üç elemandir. Ilk bakista yanlis yazilmis bir anahtar kelimeyi, dogru olarak tamamlanmamis karakter katarini, ve birden fazla satira dagilmis uzun yorum cümlelerini görebilirsiniz.

Environment Options dialog kutusundan editör colors (sekil 2.1) sayfasini kullanarak bu özellikleri kisisellestirebilirsiniz. Eger tek basiniza çalisiyorsaniz hoslandiginiz renkleri seçin. Birden fazla kisinin kullandigi bilgisayari kullaniyorsaniz standart renkleri kabul etmeniz gerekmektedir. Alisik oldugum bilgisayarin renk profili disindaki bir profili kullanan bilgisayarda çalismak bana çok zor geliyor.

Sekil 2.1 Color syntax highlighting ayarlarinin yapildigi iletisim kutusu

Kitaptaki program kodlarinda birçok syntax highlighting özelliklerini uyguladim. Umarim okunulabilirligi arttirmistir

Kod Sablonlarinin Kullanimi

Delphi 3 kaynak kodu yazimi için yeni bir özelligi beraberinde getirmistir. Ayni Pascal dili komutlarini tekrarli bir sekilde yazdigimiz için Boland kod sablonu adindaki bir özelligi sunmustur. Basitce kod sablonu kod parçasina yapilmis kisaltmadir. Kisaltmayi yazarsiniz ve ardindan Ctrl-J tusuna basarsiniz asil kod parçasi sizin yerinize editöre yazilir. Mesela editörde arrayd kelimesini yazip Ctrl-J tusuna basarsaniz editör bu kelimeyi siler ve yerine sunu yazar:

Array [0..] of ;

Kod sablonlarinin birden fazla çesidi oldugu için, eger kisaltmanin sadece bir kaç harfini yazip Ctrl-J tusuna basarsaniz, editör size o harler ile baslayan kod sablonlarinin listesini açilir bir yerel listede sunar. (Sekil 2.2)

Sekil 2.2 : Kod sablonu seçimi

Kod sablonlarini, var olanlari degstirerek yada yenilerini ekleyerek kisisellestirebilirsiniz. Öger böyle bir seye girisecekseniz aklinizda bulundurmaniz gereken genellikle kod sablonlarinin ‘|’ karakterini içeriyor olmasidir. Bu karakterin amaci siz kisayolu yazip Ctrl-J tusuna bastiktan sonra kursörün nereye gitmesini belirtmesidir.



Language Statements

Birkaç tanimlayici (identifier) tanimladiginizda bunlari komutlarin içerisinde kullanabilirsiniz. Pascal birden fazla komutlar ve ifadeler kümesi sunar. Ilk olarak Keywords (anahtar kelimeler), Expressions ( ifadeler) ve Operatörlere göz atalim.



Keywords

Keyword’ler Object Pascalin arilmis kelimeleridir ( Reserved Words). Yani Keyword kategorisi altinda toplanan kelimeler dilin kendi kullanimi için sunulmustur. Delphi nin yardim dosyalarinda söyle geçer ayrilmis kelimeler birer tanimlayici olarak kullanilamazlar.

Iste size Object Pascal dilinde özel bir yere sahip olan ayrilmis kelimeler (Delphi 4 den alinmistir)

Keyword Role
absolute directive (variables)
abstract directive (method)
and operator (boolean)
array type
as operator (RTTI)
asm statement
assembler backward compatibility (asm)
at statement (exceptions)
automated access specifier (class)
begin block marker
case statement
cdecl function calling convention
class type
const declaration or directive (parameters)
constructor special method
contains operator (set)
default directive (property)
destructor special method
dispid dispinterface specifier
dispinterfacetype
div operator
do statement
downto statement (for)
dynamic directive (method)
else statement (if or case)
end block marker
except statement (exceptions)
export backward compatibility (class)
exports declaration
external directive (functions)
far backward compatibility (class)
file type
finalizationunit structure
finally statement (exceptions)
for statement
forward function directive
function declaration
goto statement
if statement
implementationunit structure
implements directive (property)
in operator (set) - project strucure
index directive (dipinterface)
inherited statement
initializationunit structure
inline backward compatibility (see asm)
interface type
is operator (RTTI)
label declaration
library program structure
message directive (method)
mod operator (math)
name directive (function)
near backward compatibility (class)
nil value
nodefault directive (property)
not operator (boolean)
object backward compatibility (class)
of statement (case)
on statement (exceptions)
or operator (boolean)
out directive (parameters)
overload function directive
override function directive
package program structure (package)
packed directive (record)
pascal function calling convention
private access specifier (class)
procedure declaration
program program structure
property declaration
protected access specifier (class)
public access specifier (class)
published access specifier (class)
raise statement (exceptions)
read property specifier
readonly dispatch interface specifier
record type
register function calling convention
reintroduce function directive
repeat statement
requires program structure (package)
resident directive (functions)
resourcestringtype
safecall function calling convention
set type
shl operator (math)
shr operator (math)
stdcall function calling convention
stored directive (property)
string type
then statement (if)
threadvar declaration
to statement (for)
try statement (exceptions)
type declaration
unit unit structure
until statement
uses unit structure
var declaration
virtual directive (method)
while statement
with statement
write property specifier
writeonly dispatch interface specifier
xor operator (boolean)

Ifadeler ve Operatörler

Içerisinde kullanilan operatöre bagimli olan ifadeleri olusturmak için genel bir kural yoktur, ve Pascal dili bir çok operatöre sahiptir. Bunlar arasinda mantiksal, aritmetik, boolean(dogru/yanlis), iliskisel, ve küme operatörleri ile digerleri bulunmaktadir. Ifadeler bir degiskene deger atamak için, fonksiyon yada prosedürün parametrelerinin degerini belirlemek için, yada bir durumu test etmek için kullanilir. Ifadelerde fonksiyonlari içerebilir. Bir islem yaparken kullandiginiz operatörler ve tanimlayicilarin birlikteligine ifadeler diyoruz.

Ifadeler bir çok programlama dilinde ortaktir. Bir ifade geçerlilik arzeden sabitler, sayisal degerler, operatörler, ve fonksiyon sonuçlarindan olusabilir. Ifadeler bir fonksiyon yada prosedüre parametre olarak geçilebilir.



Operatörler ve Öncelikleri

Hayatinizda hiç program yazmamis olsanizda ifadenin ne oldugunu bilirsiniz. Burada Pascalin özel operatörleri üzerinde duracagim. Bu dile ait operatörleri önceliklerine göre siralanmis olarak Tablo 2.1 de bulabilirsiniz.

Diger bazi programlama dillerinin aksine and ve or operatörlerinin iliskisel operatörlere göre önceligi vardir. Bu yüzdendirki a

Bazi operatörler degisik veri yapilariyla kullanildiginda farkli anlamlar kazanirlar. Mesela, + operatörü iki sayiyi toplamak için kullanildigi gibi iki karakter katarini birlestirmek için, iki kümenin birlesimini almak için, ve dahasi pointera offset eklemek içinde kullanilabilir. Öte yandan C programlama dilinde oldugu gibi iki karakteri + operatörü ile ekleyemezsiniz.

Ilginç diger bir operatör ‘div’ dir. Pascalda herhangi iki sayiyi / operatörü ile bölebilirsiniz ( kayan noktali yada tamsayiyi ). Sonuç olarak reel bir sayi elde edersiniz. Eger iki tamsayi bölüp sonuç olarakta bir tamsayi elde etmek istiyorsaniz div komutunu kullanin.


Tabl0 2.1: Pascal Language Operators, Grouped by Precedence
Unary Operators (Highest Precedence)
@ Address of the variable or function (returns a pointer)
not Boolean or bitwise not
Multiplicative and Bitwise Operators
* Arithmetic multiplication or set intersection
/ Floating-point division
div Integer division
mod Modulus (the remainder of integer division)
as Type-safe typecast (RTTI)
and Boolean or bitwise and
shl Bitwise left shift
shr Bitwise right shift
Additive Operators
+ Arithmetic addition, set union, string concatenation, pointer offset addition
- Arithmetic subtraction, set difference, pointer offset subtraction
or Boolean or bitwise or
xor Boolean or bitwise exclusive or
Relational and Comparison Operators (Lowest Precedence)
= Test whether equal
<> Test whether not equal
< Test whether less than
> Test whether greater than
<= Test whether less than or equal to, or a subset of a set
>= Test whether greater than or equal to, or a superset of a set
in Test whether the item is a member of the set
is Test whether object is type-compatible (another RTTI operator)

Küme Operatörleri

Küme operatörleri sunlardir (+)birlesim, (-)fark, (*)kesisim, (in) elemani olup olmadigini test etmek, ve diger iliskisel operatörler. Bir elemani kümeye eklemek için, küme ile elemanin birlesimini alabilirsiniz. Simdi de Delphide font sitilleri ile ilgili örneklere göz atalim.

Style := Style + [fsBold];
Style := Style + [fsBold, fsItalic] - [fsUnderline];

Standard olarak daha hizli olan Include ve Exclude prosedürlerinide kullanabilirsiniz.

Include (Style, fsBold);


Sonuç

Simdi Pascal programlarinin temel yapisini ögrenmis bulunmaktayiz ve detaylarini anlamak için haziriz. Ise kullanici tanimli ve önceden tanimli veri yapilarini incelemkle baslayacagiz. Daha sonra anahtar kelimeleri (Keywords) kullanarak program komutlari olusturmaya baslayacagiz.



© 1999 Mustafa Kasap. Tüm Hakları saklıdır.

 
Hosted by www.Geocities.ws

1