Fonksiyonlar

Tüm görevler alt görevlere bölünebilir. Bunların her biri doğrudan bütün bir kod şeklinde gösterilmiş olabileceği gibi, daha ufak alt görevlere bölünmüş de olabilir. Bu yöntem aşamalı geliştirme olarak adlandırılır. Fonksiyonlar çözülecek alt görevlerin yazımında kullanılırlar. Fonksiyonun ne iş yaptığını tarif eden kod, fonksiyon tanımı şeklinde isimlendirilir:

fonksiyon_başlığı
  {
  talimatlar
  }

İlk çengel parantezden önceki her şey, fonksiyon tanımının başlığını oluşturur. Çengel parantezlerin arasında ise fonksiyon tanımının gövdesi yer alır. Fonksiyon başlığı dönüş değeri tipinin bir tarifini, fonksiyonun ismini (tanımlayıcı) ve biçimsel parametreleri içerir. Fonksiyona geçirilen parametrelerin sayısı sınırlıdır ve 64'ü geçemez.

Fonksiyon, programın diğer bölümlerinden gerektiği kadar çok çağrılabilir. Dönüş tipi, fonksiyon tanımlayıcısı ve parametre tipleri birlikte fonksiyon prototipini oluşturur.

Fonksiyon prototipi fonksiyonun bildirimidir fakat tanımı değildir. Dönüş tipinin ve argüman tiplerinden oluşan bir listenin açık bildirimi sayesinde, fonksiyon çağrıları esnasında katı tip kontrolü ve gizli tip dönüşümü mümkün olmaktadır. Fonksiyon bildirimleri kodun okunabilirliğini artırmak için sınıflarda çok sık kullanılır.

Fonksiyon tanımı fonksiyon bildirimi ile tam olarak örtüşmelidir. Bildirilen her fonksiyon tanımlanmalıdır.

Örnek:

double                       // dönüş değeri tipi
linfunc (double a, double b) // fonksiyon ismi ve parametre listesi
  {
                             // kompozit işlemci
   return (a + b);           // dönüş değeri
  }

 

return operatörü, içine yerleştirilen bir ifadenin değerine dönüş yapabilir. Gerektiği takdirde, ifade değeri fonksiyonun sonuç tipine dönüştürülür. Dönüş yapılabilecek şeyler şunlardır: basit tipler, basit yapılar, nesne işaretçileri. Herhangi bir diziye, sınıf nesnesine veya bileşik yapı tipli değişkenlere return operatörü ile dönüş yapılamaz.

Hiçbir değere dönüş yapmayan bir fonksiyon, void tipi ile bildirilmelidir.

Örnek:

void errmesg(string s)
  {
   Print("hata: "+s);
  }

 

Fonksiyona geçirilen parametreler aynı tipteki sabitlerce belirlenmiş ön tanımlı değerler alabilirler.

Örnek:

int somefunc(double a,
             double d=0.0001,
             int n=5,
             bool b=true,
             string s="geçirilmiş dizgi")
  {
   Print("Gereken parametre a = ",a);
   Print("Şu parametreleri geçir: d = ",d," n = ",n," b = ",b," s = ",s);
   return(0);
  }

 

Parametrelerden herhangi birinin değeri ön-tanımlı ise, bütün diğer parametrelerin de değerleri ön-tanımlı olmadır.

Hatalı bildirim Örneği:

int somefunc(double a,
             double d=0.0001,    // ön tanımlı değer 0.0001 bildirilmiş
             int n,              // ön tanımlı değer belirlenmemiş !
             bool b,             // ön tanımlı değer belirlenmemiş !
             string s="geçirilmiş dizgi")
  {                                          
  }           

Ayrıca Bakınız

Aşırı Yükleme, Sanal Fonksiyonlar, Polimorfizm