Procedure ve Function Hazırlamak Gönderen: Fatih Tarih: 10 October 2005 11:18:56
Procedure tipi yordamlar geriye bir değer göndermezlerken Function tipi yordamlar geriye değer gönderirler. Örnek Olarak “Mesaj” adında basit bir yordam hazırlayacağım. Bu yordamı üzerinde çalıştığım projedeki Form1’e dahil edeceğim.
Bu amaçla Form1’e ait kod penceresine önce “Procedure Mesaj()”, ardından Begin-End deyimlerini yazdım. Hazırladığım yordam otomatik olarak hazırlanan “TForm1” adlı sınıfın bir üyesi olduğu için yordam adının başına bu sınıfı yazdım.

Her yordam Begin-End bloğuna sahip olmak zorundadır. Bu şekilde procedure hazırladıktan sonra formun üst kısmında Type bloğunda deklare etmeniz gerekiyor. Procedure’yi deklare etmeden projeyi çalıştırırsanız aşağıdaki gibi bir hata ile karşılaşırsınız.

Unit’in Type bloğunda yordamın deklare edildiği satıra yordamın ilk satırı yazılmaktadır. Bu nedenle önce yordamı Type bloğunda deklare edip daha sonra yordamın kendisini hazırlayabilirsiniz. Hazırladığım Procedure’yi nasıl deklare ettiğimi aşağıda görebilirsiniz

Delphi deklare edilmiş procedure ve fonksiyonların hazırlanması konusunda size kolaylık sağlamaktadır. Deklarasyon satırına gidip “Shift+Ctrl+C” tuşlarına birlikte basarsanız Delphi procedure kalıbını otomatik olarak hazırlar.
Hazırlamak istediğim yordama ShowMessage() fonksiyonu ile ekrana mesaj verme işlevini yükleyeceğim. Aslında böyle bir işlem için önceden tanımlı olan hazır yordamlardan yararlanabilir ama buradaki amacım deneysel. Bu nedenle yukarıda hazırladığım “Mesaj()” yordamına bir satırlık kod yazdım.

Hazırladığım Mesaj() adlı yordamın formun üzerinde tıklama yapıldığı zaman işletilmesini istiyorum. Bu nedenle Form_Click yordamına “Mesaj” yordamını işletecek satırın yazılması gerekir. Bir procedure’yi işletmek veya çağırmak için yordamın adını yazmak yeterlidir.

Bu şekilde hazırlanan proje çalıştırılıp formun üzerinde tıklama yapılırsa Form_Click() yordamı işletilir. Bu yordamda, yukarıda hazırladığım Mesaj() yordamını işleten bir satır olduğundan Mesaj() yordamı sayesinde bir diyalog kutusu içinde ekrana mesaj verilir.

Hazırlamak istediğiniz procedure’nin Unit’in Type bloğunda deklarasyonun yapıldığı satırın üzerinde iken Shift+Ctrl+C tuşlarına birlikte basarsanız Delphi procedure kalıbını otomatik olarak hazırlar. Delphi benzer kolaylığı henüz deklare edilmeyen procedure’ler için de size sunmaktadır. Bu nedenle hazırlayıp henüz deklare etmediğiniz yordamın üzerinde iken Shift+Ctrl+C tuşlarına basarsanız Delphi procedure’yi deklare eder.
Exit Deyimi İle Procedure’den ÇıkmakNormalde yordamlardaki satırlar sıra ile işletilir. Procedure’deki bütün satırlar işletildikten sonra projenin işletimi söz konusu procedure’nin çağrıldığı satırı izleyen bir sonraki satıra geçer. Exit deyiminden yararlanılarak yordamda bulunan bütün satırlar işletilmeden yordamdan çıkılabilir. Aşağıda verilen yordamda kullanıcıdan toplanmak üzere 2 sayının girilmesi istenmektedir. Girilen sayılardan birisinin 0 olması halinde procedure’nin geri kalan satırları işletilmeyip procedure’den çıkılmaktadır.

Procedure ve Function Hazırlamak Gönderen: Fatih Tarih: 10 October 2005 11:31:58
Procedure’lerde Parametre KullanmakDaha önceki konularda nesnelerle ilgili oldukları için önceden tanımlı olan bazı yordamlarda parametreler kullanılıyordu. Örneğin daha önceki konularda Edit nesneleri için önceden tanımlı olan KeyPress yordamından söz edilmişti. KeyPress olayı çalışma anında kullanıcının klavyenin F tuşları ve imleç hareket tuşları dışında her hangi bir tuşuna basması halinde meydana gelmekte ve söz konusu nesne ile ilgili KeyPress yordamı varsa işletilmektedir

KeyPress olayını temsil eden procedure adından sonra parantez içinde "Key" adında ve Char tipinde bir parametre bulunmaktadır. KeyPress olayının meydana gelmesi sırasında hangi tuşa basılmışsa, basılan tuşun ASCII kodu yordama “Key” parametresi ile gönderilmektedir.
Programcı, projenin bir yerinden başka bir yerine bilgi aktarmak amacıyla kullanılan değişkenin(parametre) içeriğinden yararlanıp istediği işlemleri yapabilir. Şimdi kendisine parametreler aracılığı ile gönderilen 2 sayıyı toplayan “Topla()” adında bir yordam hazırlayacağım. Toplamak istediğim 2 sayıyı çalışma anında metin kutularına yazmak istediğim için projenin formunu aşağıdaki gibi düzenledim.

Çalışma anında ilk 2 metin kutusuna bilgi girilip “Topla” düğmesi tıklandığı zaman bu sayıların toplamını bulup 3. metin kutusuna yazacak yordamı Unit’in üst kısmında Type bloğunda aşağıdaki gibi deklare ettim.

Hazırlamak istediğim yordama dışarıdan Integer tipinde 2 sayısal bilgi aktarmak istediğim için yordamın deklare edildiği satırda parantezlerin içine parametrelerin adlarını ve tiplerini yazdım. Parantezlerin içine parametre yazmak, değişken tanımlamak gibidir. Yordamı bu şekilde deklare ettikten sonra imleç deklarasyon yaptığım satırda iken Shift+Ctrl+C tuşlarına birlikte basarak Delphi’nin yordam kalıbını hazırlamasını sağladım.

Procedure’nin kalıbını anlatılan şekilde deklarasyon satırından yola çıkarak Delphi’den yararlanmadan kendiniz hazırlayabilirsiniz. Bu procedure ile kendisine parametre olarak verilen 2 sayısı toplayıp sonucu formdaki metin kutusuna aktarmak istediğim için aşağıda verilen şekilde düzenledim.

İşletilecek procedure parametre içeriyor ve yordama parametreler ile bilgi aktarılacaksa, yordamı çağırma satırında procedure adından sonra parantezlerin içine içerikleri yordama aktarılacak değişkenler yazılır. Hazırlamış olduğum Topla() yordamını formdaki düğme tıklandığı zaman işletilmesini istediğim için düğmenin Click() yordamını aşağıdaki gibi düzenledim.

Bildiğiniz gibi Delphi’nin bazı hazır deyim ve fonksiyonları eksik parametre ile çağrılabilinmektedir. Başka bir deyişle bazı parametrelerin kullanılması isteğe bağlıdır. Derleyici eksik parametrelerin yerine varsayılan değerleri koymaktadır. Kendi hazırladığınız Procedure’ler eksik parametre ile çağrılabilinecek yapıya sahipse veya procedure’de isteğe bağlı parametrelerin olmasını istiyorsanız söz konusu söz konusu parametrelere başlangıç değerini aktarmanız gerekir.
Bu işlemi yukarıda hazırladığım Topla() adlı yordam üzerinde anlatacağım. Yukarıda hazırladığım Topla() yordamı Integer tipinde 2 parametreye sahipti ve kendisine parametre olarak verilen 2 sayıyı toplayıp geriye gönderiyordu. Şimdi bu procedure’nin 3 parametreye sahip olmasını istediğim için aşağıda verilen şekilde düzenledim.

Bu şekilde düzenlenen Procedure çağrıldığında kendisine 2 bilgi gönderildiğinde hata meydana gelir. Çünkü Procedure 3 parametreye sahiptir. Eğer içinde bulunduğunuz şartlara göre 3 yerine 2 sayıyı toplamak istiyorsanız 3. parametreyi isteğe bağlı olarak ayarlamalısınız.

Bir parametrenin isteğe bağlı olmasını istiyorsanız o parametreye varsayılan bir değer aktarmalısınız. Kendi hazırladığım yordamı aşağıdaki gibi değiştirerek 3. parametrenin varsayılan değerinin 0 olmasını sağladım. Bu durumda bu Procedure 2 parametre ile çağrıldığında 3. parametrenin 0 olduğu varsayılır. Procedure’de yaptığım bu değişikliğin aynısını deklarasyon satırında da yaptım.

Bu şekilde hazırladığım ve Topla() adını vermiş olduğum yordamı dikkatlice incelerseniz Procedure adının önüne Class adını yazdığımı fark etmiş olmalısınız. Procedure’nin başına “TForm1” yazmamış olsaydım yordamın içinde Edit ve Button gibi nesneleri yukarıdaki şekilde kullanmak mümkün olmazdı. Yordamın başına “TForm1” eklememiş olsaydım yordam dahilinde kullanmak istediğim her nesnenin başına formun adını yazmam gerekirdi.

Procedure ve Function Hazırlamak Gönderen: Fatih Tarih: 10 October 2005 11:39:05
Fonksiyon HazırlamakFonksiyonlar ile Procedure’ler arasındaki en önemli fark fonksiyonların geriye bir değer göndermeleridir. Kendiniz fonksiyon hazırlamak istiyorsanız Function deyiminden yararlanmanız gerekir. Aşağıda verilen ekran görüntüsünü “KareKök” adında bir fonksiyon kalıbı hazırladıktan sonra aldım.

Hazırlayacağım KareKok() fonksiyonu sayıların kare kökünü bulmak için kullanacağım. Bu fonksiyona dışarıdan Integer tipinde bir bilgi vereceğim için fonksiyon adından sonra parantezlerin içine “X : Integer” yazdım. Geriye gönderilecek değerin tipi fonksiyon adından sonra belirtilir. Buna göre örnek olması için hazırladığım KareKök() fonksiyonunda geriye Double tipinde bilgi gönderir.

Fonksiyonlarda geriye değer gönderme işlemi, fonksiyon adını değişken gibi kullanıp ona değer aktarmak şeklinde olmaktadır. Ancak fonksiyon adını değişken gibi kullanıp değer aktarma işlemi fonksiyondan çıkmaya neden olmamaktadır. Fonksiyondan çıkmak için Exit deyimini kullanabilirsiniz. Fonksiyon metni içinde Exit deyimi kullanılmazsa fonksiyonda bulunan bütün satırlar sıra ile işletilir.

Fonksiyonların geriye değer göndermesini sağlamak için yukarıda yapıldığı gibi söz konusu değeri fonksiyon adına aktarmak yerine Result deyimini kullanabilirsiniz. Result deyiminin nasıl kullanıldığını aşağıda görebilirsiniz.

Bu şekilde hazırlanan KareKok() fonksiyonu istenildiği zaman çağrılıp işletilebilir. Fonksiyonları çağırırken fonksiyona gönderilmek istenen bilgileri(varsa) içeren değişkenler parantez içinde yazılmalıdır. Bu fonksiyonun çalışma anında forma yerleştirilen “Kok_al” adını verdiğim düğme tıklandığı zaman işletilmesini istediğim için bu düğmenin Click() yordamını aşağıdaki gibi düzenledim.

Procedure ve Function Hazırlamak Gönderen: Fatih Tarih: 10 October 2005 11:55:14
Fonksiyonları Başka Formlarda KullanmakHazırladığınız fonksiyon veya yordamı başka form veya Unit’lerde kullanmak istiyorsanız fonksiyonu içeren Unit’i Uses deyimi ile fonksiyonu kullanmak istediğiniz Unit’e dahil etmelisiniz. Bu işlemin nasıl yapıldığını size göstermek için yukarıda hazırladığım KareKok() adındaki fonksiyonu başka bir formda kullanacağım. Bu amaçla projeye 2. bir form dahil ettim ve KareKok() fonksiyonunu Unit’in Var bloğunda aşağıdaki gibi deklare ettim.

Ayrıca Form1’de iken Form2’yi ekrana getirebilmek için bu Form2’yi temsil eden Unit2’yi Uses deyimi ile Unit1’e dahil ettim. Ardından Unit2 penceresine geçip Uses deyimi ile KareKok() fonksiyonunu içeren Unit1’i Unit2’ye dahil ettim ve KoreKok() fonksiyonunu aşağıdaki gibi kullandım. Unit2’de aynı adlı başka bir fonksiyon olsaydı fonksiyon adından önce Unit adını kullanırdım.
Geriye Birden Fazla Değer GöndermekYukarıda anlatılan şekilde hazırlanan fonksiyonlar geriye yalnızca bir değer gönderirler. Hazırladığınız fonksiyonda birden fazla işlemin sonucuna gerek duyuluyorsa yukarıda verilen fonksiyon yapısına ekler yapılmalıdır. Bu işlemin nasıl yapıldığını anlatmak yeni bir fonksiyon hazırladım. Bu fonksiyon kendisine parametre olarak verilen sayının karesini ve küpünü geriye gönderecektir.
Hazırladığınız fonksiyon geriye birden fazla değer gönderecekse her değer için fonksiyona ait parantezin içinde var deyimi ile değişken tanımlamanız gerekir. Aşağıda verdiğim fonksiyon geriye Integer tipinde 2 değer göndereceği için parantezin içinde “Kare” ve “Kup” adında 2 Integer değişken tanımladım

Parantezin içinde tanımlanan değişkenler geriye değer gönderilirken kullanılacaktır. Geriye birden fazla değer gönderecek fonksiyonu bu şekilde hazırladıktan sonra fonksiyonu çağırmak için aşağıda verdiğim kodu hazırladım.

Formdaki ilk metin kutusuna Integer tipine çevrilebilinecek bilgi girilip bu yordam işletilirse 2. metin kutusuna sayının karesi ve 3. metin kutusuna ise küpü yazılır. Aşağıda verdiğim ekran görüntüsünü bu yordamı işlettikten sonra aldım.
Fonksiyonların Aşırı YüklenmesiŞimdiye kadar metodlar ve fonksiyonlar hakkında verilen bilgilere göre metodlar eksik veya fazla parametre ile işletilmek istendiğinde hata meydana gelmektedir. Bu konuda size bilgi vermek için aşağıda verdiğim basit fonksiyonu hazırladım.
Function Topla(X : Integer; Y: Integer) : Integer;
Begin
Topla := X + Y;
End;
“Topla” adını vermiş olduğum bu fonksiyon kendisine parametre olarak verilen integer tipindeki 2 sayıyı toplayıp geriye göndermektedir. Bu yordam çağırılırken 2 yerine 1 veya 3 parametre gönderilirse hata meydana gelir. Ancak bazen hazırlanan metodun kaç parametreye ile çağrılacağı önceden belli değildir.
Örnek olsun diye hazırladığım bu fonksiyon 2 sayıyı toplamaktadır. Ya kullanıcı çalışma anında toplanmak üzere 3 sayıyı bu fonksiyona göndermek isterse? Bu gibi durumlarda aynı metodun 2. veya 3. kopyası hazırlanır. Her kopyanın parametreleri farklı olur. Aynı fonksiyonun 2. bir kopyasını nasıl hazırladığımı aşağıda görebilirsiniz. Aynı ada sahip birden fazla fonksiyon hazırlamaya fonksiyonun aşırı yüklenmesi(overload) denilmekte ve fonksiyona bu deyim eklenmektedir.
Function Topla(X : Integer; Y: Integer) : Integer;overload;
Begin
Topla := X + Y;
End;
Function Topla(X : Integer; Y: Integer; Z: Integer):Integer;Overload;
Begin
Topla := X + Y +Z;
End;
Kullanıcı veya programcı integer tipinde 2 sayıyı toplamak istiyorsa fonksiyonu 2 parametre ile çağırır. Bu durumda aynı fonksiyonun 2 parametreli kopyası devreye girer. Fonksiyon 3 parametre ile çağrıldığında ise 3 parametreye sahip 2. kopyası işlev görür.
Derleyici fonksiyon çağrıldığı satırda kullanılan parametre sayısına bakarak hangi metodun hangi kopyasını kullanacağına karar verir. Bu fonksiyon aşağıda verilen şekli ile çağrılırsa metodun 3 parametreye sahip versiyonu işletilir.

Yukarıda hazırladığım fonksiyonun her 2 kopyası da int tipinde bilgiler alıyordu. Ancak bazen hazırladığınız fonksiyon ile değişik tipteki bilgileri toplamak isteyebilirsiniz. Nasıl ki aynı fonksiyonun değişik sayıda parametreye sahip versiyonlarını hazırlamak mümkün oluyorsa, değişik tipte bilgiler üzerinde işlem yapan kopyalarını hazırlayabilirsiniz. Aşağıda verilen fonksiyon float bilgileri toplayabilir.
Function Topla(X : Double; Y: Double):Double;Overload;
Begin
Topla := X + Y;
End;
Fonksiyonların Kendi Kendilerini ÇağırmasıDelphi procudure ve fonksiyonların kendi kendilerini çağırmalarına izin vermektedir. Bu işlemin nasıl yapıldığını size anlatmak için aşağıda verdiğim basit yordamı hazırladım. Bu yordam kendi kendisini 5 kez çağırarak belirtilen mesajı 5 kez ekrana yazmaktadır.

Belli bir şarta bağlı olarak yordamdan çıkılmadığı zaman yordam kendisini sürekli olarak çağıracağı için sorun çıkar. Pratik değeri olmayan bu örnek çalıştırıldığı zaman aşağıdaki gibi bir sonuç alınır. Benzer şekilde fonksiyonların kendilerini çağırmalarını sağlayabilirsiniz.
Değer ve Referans ParametreleriŞimdiye kadar hazırlanan procedure ve fonksiyonlar ile ilgili olarak verilen örneklerde parametreler sayesinde procedure ve fonksiyona bilgiler değer olarak gönderildi. Şimdi bu bozuk ve anlaşılmaz cümleyi anlaşılır kılmak için basit bir konsol örneği vereceğim.

Bu konsol uygulamasında önce “Sayi” adında integer tipinde bir değişken tanımladım ve bilgi aktarıp içeriğini WriteLine() metodu ile ekrana yazdım. Ardından uygulamadaki “Yazdir” adını vermiş olduğum yordamı işletip “Sayi” değişkenin içeriğini tekrar ekrana yazdırdım.
Bu konsol uygulamasındaki “Yazdir” adını vermiş olduğum yordam başlangıçta 100 değerini içeren “X” adını verdiğim parametrenin içeriğini 200 olarak değiştirmektedir. Bu şartlarda konsol uygulaması derlenip çalıştırıldığında ekrana 2 kez 100 yazılır.

Bu olaya günlük hayattan karşılık bulmak istersek şöyle bir örnek verebiliriz: Elinizdeki bir evrakın fotokopisini çekip birisine veriyorsunuz. O kişi o kopyada sonradan değişiklik yapıyor. Bu şartlarda sizdeki evrak doğal olarak kopyada yapılan değişiklikten etkilenmez. Yukarıda verilen örnekte yapılan budur; 100 sayısı yordama gönderiliyor. Yordamda bu değer 200 ile değiştiriliyor ancak elinizdeki sayı bundan etkilenmiyor.
Kişiye evrakın fotokopisi yerine aslını vermiş olsaydık durum farklı olurdu. Bazen içeriği yordama gönderilen değişkenin içeriğinin yordamda yapılan işlemlerden etkilenmesi istenir. Bu gibi durumlarda parametrenin başına var deyiminin eklenmesi gerekir. Var deyiminin nasıl kullanıldığını aşağıda görebilirsiniz.
procedure Yazdir(Var X : Integer);
Begin
X := 200;
end;
Parantez içinde parametrenin başına eklenen Var deyimi sayesinde procedure ve fonksiyonlara parametre ile değer yerine referansı gönderilir. Başına var yazılan parametrelere referans parametreleri adı verilmektedir. Referans derken “Sayi” değişkenin bellekteki adresinden söz etmekteyim.
Bu şartlarda bu konsol uygulaması derlenip çalıştırıldığında ekrana önce 100 ardından 200 yazılır. Çünkü “Sayi” değişkeni yordama referans olarak gönderildi ve “Yazdir” adını vermiş olduğum yordamda bu bellek adresinin veya referansın içeriği değiştirildi. Başka bir deyişle, “Sayi” değişkenin içeriği yordamda değiştirildi
* Bu makale yazarın “Seçkin Yayıncılık” tarafından yayınlanan “Delphi 8-VCL Forms Application” kitabından alınmıştır. Gönderen: Memik Yanık
Ynt: Procedure ve Function Hazırlamak Gönderen: Mikdad Tarih: 09 November 2005 19:09:12
Ben Bu İşi Nasıl Öğrencem yaaaaaaa
Ynt: Procedure ve Function Hazırlamak Gönderen: babahayati Tarih: 11 January 2007 15:49:29
iki sayı toplayan bir procedure yazdığımızda, oda bize bir değer göndermiyomu?
karekök yerine karesini alan bir fonksiyon düşünelim
girdiğimiz sayıyı kendisiyle çarptırarak (toplayabiliyosak çarpabilirizde diye düşünüyorum ama çokmu sığ düşünüyorum) karesini alan bir prosedürle fonksiyon arasındaki fark nedir?
bu geriye değer gönderme olayına daha somut bir örnek vereiblirmisiniz.
yani iki sayıyının toplamını hem procedure hemde functionla yapabilirmiyiz?
bazen birbirlerinin yaptığı işleri yapabilirlermi?
yada hangi durumda hangisini tercih edeceğimizi gerçekten merak ediyorum..
Ynt: Procedure ve Function Hazırlamak Gönderen: kocaturk Tarih: 11 January 2007 16:47:55
Procedure ve funtionlar aslında mantık olarak aynı işi yaparlar yani birden çok işlemi bir arada toplar sonra bu işlemi lazım olduğu yerde tek bir satır kod ile halletmemizde yardımcı olurlar. aralarındaki en önemli fark temelde function ları değişken olarak kullanabilirisn(aslında procedure leride kullanabilirsinsin ama) senin soruna göre şöyle diyelim.
topla adında bir procedure bir de functionumuz olsun
a, b, şeklinde 2 tane integer değişkenimiz olsun buna göre topla procedure ünü aşağıda ki gibi tanımlayalım
procedure topla( a,b : integer);
begin
a + b;
end;
şimdi funtion u tanımlayalım;
funtion topla(a,b : integer) : integer;
begin
Result := a + b;
end;
burada malum
result function dan dönen integer değer
şimdi aşağıdaki koda bir bakalım anlatılmak istenen temel fikir anlaşılacaktır diye düşünüyorum;
procedure topla yı yeniden tanımlıyorum
procedure topla(a,b : ınteger);
begin
topla(x,y) + b;
end;
dikkat ederseniz procedure topla nın kodu içrisinde
a sayısı yerine function
topla dan dönen değeri koyduk
yani açarsak aslında kod aşağıdaki gibi dir fakat biz bunu
topla funtion ı ile kısalttık
procedure topla(a,b : integer);
begin
(x + y) + b;
end;
tabi bu çok basit bir örnek olduğu için 3 rakamı yan yana toplamak için niye function tanımlıyayım diye bilirsin

ama düşün ki topla functionu içerisinde çok karmaşık hesaplamalar yapılıyor ve bir değer döndürülüyor ve topla procedure ü de toplam kod içerisinde 20 kez kullanılıyor o zaman ne demek istediğimi anlayacaksın .
aslında bu konu bu kadar basit değil procedure ve function larda kullanılan parametreler değişken ve ya sabit olabilir hatta parametrelere default yani varsayılan değerler atanabilir, procedure ve function lar aşırı yüklenebilir functionlar kendidini çağırabilir vs vs şimdi bunların tamamını anlatmak için çok zaman gerekir benim anlatmak istediğim aralarındaki en belirgin farkı fark etmeniz di

kolay gelsin.
Ynt: Procedure ve Function Hazırlamak Gönderen: babahayati Tarih: 14 January 2007 13:12:57
hocam procedure krdedi kartı ile alışveriş yapmak gibi dersek, functionlar da da nakit verip para üstümü alıyoruz? pek sağlıklı bi benzetne olmadı farkındayım ama mantığı kavradım ben eyvallah..
functionlar için değişken benzetmesi güzeldi
Ynt: Procedure ve Function Hazırlamak Gönderen: basbakan Tarih: 23 February 2007 12:36:31
Makale güzelmiş..Anlatan arkadaşıma teşekkür ederim.
fonksiyon ile procedure arasındaki farkı ben şu şekilde anladım:
Procedure gönderdiğiniz değerler o prosedürün içerisindeki begin-end bloğu arasındaki programcıkta değer olarak kullanılıp gerekli işlem yapılıyor..
Function da ise gönderilen değerlere gerekli işlem yapılıp verinin geldiği bloğa geri gönderme yapılıyor...
Şöyle de denebilir..elinizde bir demet para var..karışık banknotlar halinde..procedure abiye bunu verip say derseniz o bunu sayar ve bilgi kendisinde kalır,function abiye bu parayı verip say derseniz o bunu sayar ve size sonucu döner....
Bilmem anlatabildim mi?
SELAM VE DUA İLE
Ynt: Procedure ve Function Hazırlamak Gönderen: babahayati Tarih: 23 February 2007 17:57:13
basbakan; biz site olarak kocatürk kardeşimizi milletveki adayı yapacaktık ama senin hitabette fena değil, nik te uygun, seni aday yapalım olmazsa

Ynt: Procedure ve Function Hazırlamak Gönderen: Memik_ Tarih: 24 February 2007 12:43:17
Arkadaşlar gördüğünüz gibi benim Sayi1 ve Sayi2 adında değişken tanımlayıp kullanma alışkanlığım var. 2004 yılı başında yayınlanan C# kitabımda sıfıra bölme hatasını anlatmak üzere yine Sayi1 ve Sayi2 adında 2 değişken tanımlayıp birbirine bölmüştüm. Ne ki zirvedeki beyinler namlı saygıdeğer yazarlar da C# kitaplarında sayi1, sayi2 adında değişken tanımlayıp kullandıkları için "değişken adı benzerliği" suçunu bir kez daha işlemiş oldum.
Ynt: Procedure ve Function Hazırlamak Gönderen: basbakan Tarih: 27 February 2007 14:40:23
basbakan; biz site olarak kocatürk kardeşimizi milletveki adayı yapacaktık ama senin hitabette fena değil, nik te uygun, seni aday yapalım olmazsa

Neden olmasın,güzel bi teklif..normalde konuşurken pek dilim sürçmez ama yalan söylerken dilim sürçebilir,böyle bir korkum var..ne de olsa siyaset

Ynt: Procedure ve Function Hazırlamak Gönderen: dynamo Tarih: 07 March 2007 11:55:43
fatih hoca kızmasın ama genelde , procedur ve fonksiyon tanımları eksik anlatılır. procedur salt bir kod yığını değildir. fonksiyonlar gibi değer dönderebilirler.yani fonksiyon aslında procedurun değer döndermek için kullanılan özel bir halidir diyebiliriz. yanlışım varsa düzeltiniz.

misal;
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure topla(a,b:integer;var sonuc:integer);overload;
begin
sonuc:=a+b;
end;
function topla(a,b:integer):integer;overload;
begin
result:=a+b;
end;
//procedure kullanımı
procedure TForm1.Button1Click(Sender: TObject);
var
sayi:integer;
begin
topla(5,7,sayi);
edit1.Text:=IntToStr(sayi);
end;
//function kullanımı
procedure TForm1.Button2Click(Sender: TObject);
begin
edit1.Text:=IntToStr(topla(5,7));
end;
end.
procedure topla ve function topla iki rutinin de aynı amaçlı örneği.

rutinlerin sonundaki
"overload;" ifadesi, topla adında birden fazla rutinin tek bir isimde kullanılmasına izin veriyor. yoksa topla1 ve topla2 diye yazmak zorunda kalırdık.

memik beyin kitapları hep eleştiri konusu yapılır. doğru veya yanlış onun tartışması başka .fakat şunu dikkate almak gerek. memik beyin kitapları yeni başlayanlara yada hiç bilgisi olmayanlara hitap etmektedir. siz kalkıp da Charli Calvert in
"Delphi 4 Unlished" kitabı ile memik beyin
"Delphi 3" kitabını karşılaştırırsanız yanlış sonuca ulaşırsınız.

saygılar...
Ynt: Procedure ve Function Hazırlamak Gönderen: FetihlerFatihi Tarih: 07 March 2007 12:20:15
fatih hoca kızmasın ama genelde , procedur ve fonksiyon tanımları eksik anlatılır.
Niye kızayım ki

İstenirse ipe unda serilir. Bence herşey amacına uygun kullanılmalı

Ynt: Procedure ve Function Hazırlamak Gönderen: dynamo Tarih: 07 March 2007 12:47:46
Hocam doğru söylüyorsunuz.....
"Her iş ehline verilmeli,herşey amacına uygun kullanılmalı ". 
Delphi de rekürsiv ve iteratif fonksiyonlar ile ilgili açıklayıcı örnekler de verilirse kunu pekişmiş olur.

kolay gelsin