BÖLÜM 4: FONKSİYONLAR VE PROGRAM YAPISI
Bir program bir görevi yerine getirmek için yazılır. Eğer yapılacak iş pek kolay değilse, program oldukça uzun olabilir. Bazı programlar onbinlerce satır uzunluğunda olabilir. Böyle durumlarda, esas görevi daha küçük ve kolay idare edilebilir altgörevlere ayırmadan yerine getirmek hemen hemen olanaksızdır.
C, böyle altgörevleri ifade etmek ve birbirinden ayırmak için bir yöntem
öngörmektedir. Bu yöntem sayesinde
bilgi saklama
ilkeleri
kullanılabilir. C sadece bir tek altprogram çeşidi sağlamaktadır, bu da
fonksiyondur. Matematiksel olarak;
bir fonksiyon, argümanlarını döndürdüğü değere ilişkilendiren bir
kara kutu
gibidir. Aynı şey C için de geçerlidir, ancak bir fonksiyon
birden fazla değer döndürecek, küresel veri yapılarında yan etkiler yapacak
veya girdi ve çıktı sağlayacak bir şekilde de tasarımlanabilir. Örneğin,
printf
fonksiyonu, argümanlarının değerlerinin çıktısını yapmak
için kullanılır. Geri döndürdüğü değer, yazılan karakterlerin sayısıdır,
ancak bu fazla ilgi çekici değildir.
Çok basit
bir fonksiyon tanımı aşağıda verilmiştir:
void f (void) { }
Bu fonksiyon hiçbir şey yapmamasına rağmen, program geliştirmesi esnasında yer tutucu olarak kullanılabilir. Bu bölümde fonksiyon tanımı ve kullanımı hakkında daha fazla şeyler öğreneceğiz.
Kitabın başından beri görmekte olduğumuz main
tanıtıcı sözcüğü,
programın yerine getirmesi gereken görevi ifade eden fonksiyonun
ismidir. Her makul C programı içinde main
adı verilen bir
fonksiyonun bulunması gerekir, çünkü program yürütülmeye başlandığında,
program içinde bağlanmış bulunan bir başlangıç yordamı çalışmaya başlar,
bu da kontrolü sonuçta main
fonksiyonuna geçirir. Eğer bağlama
esnasında, bağlayıcı
main
adı verilen bir fonksiyon bulamazsa, sizin için
yürütülebilir bir kod oluşturamayacaktır. main
’in
bir anahtar sözcük olmadığına dikkat edin, yani isterseniz,
main
adında bir değişken de tanımlayabilirsiniz.
Fonksiyonların gücü, bizim tekrarlanan kod yazmamızdan
kaçınmamızı sağlamalarında yatar. Herhangi bir kodu, bir fonksiyon şeklinde,
bir defa belirtiriz, ona bir isim veririz ve daha sonra, bu kodu çalıştırma
gereksinimi duyduğumuzda, bu fonksiyonu çağırırız
. Bu iyi, fakat
yeterli değildir. Birçok durumda bu kod o anki gereksinmelerimize
uyarlanmalıdır
. Örneğin, bir diziyi sıraya sokan bir kodumuz
varsa, bu kodu her çağırdığımızda, değişik sayıda elemandan oluşan değişik bir
dizi belirtecek şekilde bunu hazırlamamız daha iyi olur. Bu ise, fonksiyon
argümanları kullanılarak yapılabilir.
Her fonksiyon diğerlerinden bağımsız olduğuna, yani bir fonksiyon içinde tanımlanmış değişkenler başka bir fonksiyonda kullanılamadığına göre, fonksiyonların birbirleriyle haberleşmelerini sağlayacak yöntemler geliştirilmiştir. Bir yöntem fonksiyonlara argüman geçirmektir. Başka bir yöntem küresel değişkenler kullanmaktır.
Şimdiye kadar olan örneklerde gördüğümüz bütün değişkenler fonksiyonlar
(main
fonksiyonu) içinde tanımlanmışlardı. Bu bölümde göreceğimiz
gibi; değişken bildirimleri veya tanımlamalarını fonksiyonlar dışında yapmamız
da olasıdır. Böyle değişkenlere
küresel adını veririz, çünkü
fonksiyon içinde tanımlanan
yerel değişkenlerin aksine,
bunlar, tanımlamadan sonra gelen program metni içindeki bütün fonksiyonlar
tarafından kullanılabilirler.