Bu sayfadaki yazılar
Sayfanın metni
Sayfa 22
Fonksiyonlar bir programı dizayn ve organize ederken en faydalı araçlardan biridir. Fonksiyon genelde bir takım argümanı girdi olarak alıp, bir takım işlemler yaptıktan sonra bir sonucu geri döndüren kod bloklarıdır.
int kucukOlan(int a, int b)
if (a < b) ( return a; )
else ( return b; )
Burada bir fonksiyon görüyorsunuz. İlk satır fonksiyonumuzun dışarıdan bilinmesi gereken bilgilerini özetler.
int a, int b)
bu fonksiyon iki adet tamsayıyı girdi olarak alır. Bu iki sayıdan küçük olanı geri döndürür. İlk satırda sırasıyla fonksiyonun;
1. ne tipte bir değer döndürdüğü 2. adı
3. kaç tane ve ne tipte girdiler aldığı ilan edilir. Programın geri kalanı sadece bu üç bilgiye dayanarak bu fonksiyonu çağırabilir. Bu üç bilginin bütününe fonksiyonun “imzası” adı verilir.
Kursun ilk bölümünden hatırlayacağınız return komutu değer döndüren fonksiyonlarda ikinci bir rol daha üstlenir. Return'den sonra gelen değer (sabit veya değişken) fonksiyondan döndürülen değer olur.
Tanımlanmış bir fonksiyonu programınızın geri kalanında adıyla çağırabilirsiniz.
int enDusukNot; enDusukNot - kucukOlan(aliNot, veliNot);
Burada program akışı ikinci satırdan fonksiyonun ilk komutuna atlar. Fonksiyona geçirilen argümanlar aliNot ve veliNot, fonksiyonun içinde a ve b değerlerine eşitlenir. Ve fonksiyon a ile b'yi karşılaştırıp küçük olanını return komutu ile döndürür. Program akışı bu noktada tekrar fonksiyonu çağıran satıra döner. Fonksiyondan dönen değer (yani aliNot ve veliNot arasında küçük olan) enDusukNot adlı değişkene atanır ve program akışı bir sonraki satırdan devam eder.
Programın ilerisinde başka bir yerde aynı fonksiyonu başka değerlerle yine çağırabiliriz
enAzHarcl#k -—
Bu sefer tahmin edeceğiniz gibi aynı fonksiyona tekrar atlanır ve
ayseHarcl#k);
farklı iki argüman değeri a ve b'ye geçirilir. Fonksiyon bu sefer bu yeni iki değerin daha küçük olanını döndürür.
Dikkat ederseniz fonksiyonlar tekrar tekrar değişik girdilerle kullanılıp bize istediğimiz işi yapan faydalı araçlara dönüşürler. Bir nevi programın geri kalanına bir “hizmet sağlarlar”. Bu yüzden çoğu zaman bir fonksiyonu çağıran başka lokasyonlara fonksiyonun “müşterisi” denir. Bu hizmet sağlama ve müşteri kavramlarını başka yerlerde de göreceğiz.
Şu ana kadar programlarımızda kullandığımız main bloğu da aslında bir fonksiyondur. Adı main olan bir fonksiyon. Fonksiyonlar bazen hiç argüman almayabilir ve hiçbir değer döndürmeyebilir. İşte kullandığımız main de öyle bir fonksiyon. Değer almayan bir fonksiyon tanımlarken fonksiyonun imzasında parantezlerin arası boş bırakılır. Değer döndürmeyen bir fonksiyon tanımlanırken de imzada dönüş değeri olarak “void” ifadesi kullanılır. Bu yüzden örneklerde gördüğünüz ana kod bloğumuz
void main()
diye başlıyor.
Fonksiyonların birkaç önemli faydası vardır:
1. Programınızda birden fazla yerde kullandığınız bir grup komutu fonksiyon haline getirirseniz o komutları sadece bir kere fonksiyon tanımında yazıp değişik yerlerde tekrarlamak zorunda kalmazsınız. Bu programınızın daha küçülmesini sağlar, ayrıca eğer o fonksiyonu oluşturan komut satırlarında bir hata yapmış ve sonra o satırları pek çok yerde tekrarlamışsanız (yani fonksiyon yerine her lazım olan yerde satırları copy/paste yapmışsanız) bu hatayı sonradan fark edip düzeltmek istediğinizde o copy/paste yapılan her yere gidip düzeltmeyi yapmanız gerekir. Oysa fonksiyon kullanırsanız hatayı bir yerde “fonksiyonun içinde” düzeltebilirsiniz ve bütün müşteriler bu düzeltmeden faydalanır.
2. Programınızın daha organize ve okunabilir olmasını sağlarlar. Biz şu ana kadar örneklerimizde her şeyi main fonksiyonu içinde yazdık. Bu çok küçük programlar için problem olmasa da zamanla okunmaz bir hal alır. Kod satırlarını alt fonksiyonlara bölerek organize etmek program yazmayı ve okumayı kolaylaştırır.
3. Programın değişik bölümlerinin sadece bazı detaylarla ilgilenip o detayların dışındaki konularla ilgilenmemesini sağlarlar. Bu aslında bütün bilgisayar biliminde çok önemli bir kavramdır ve buna “Soyutlama” denir. Mesela yukarıdaki örneğimizde küçük olan fonksiyonu, programın geri kalanını, “İki sayıdan küçük olanı bulma” probleminden soyutluyor. Bu şu anlama gelir. Programın geri kalanını yazarken iki sayıdan küçük olanı bulma ihtiyacınız doğarsa bunu nasıl yapacağınızı düşünmek veya yazmak zorunda değilsiniz. O problem kucukOlan fonksiyonunda bir kere çözüldü ve tekrar tekrar kullanılabilir. Bu, o fonksiyonu çağırdığınız yerdeki kod satırlarının daha sade ve odaklı olmasını da sağlar. Bunu daha ileride daha net göreceksiniz.
Biz şu an fonksiyonlar üzerinde çok durmayacağız. Çünkü aslında C++ ile nesne yönelimli programlar yazarken fonksiyonlardan daha çok onlara çok benzeyen “sınıf metodlarını” kullanacağız. Bu konu da gelecek sayıda...
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 23
ında C**4* ile nesne yönelimli programlar yazarken fonksiyon- lardan daha çok onlara çok benzeyen “sınıf metodlarını” kullana- cağız. Bu konu da gelecek sayıda...