Programlamada kaydet butonunu birden çok kez farklı ekranlarda kullanıyoruz. Her ekran için buton kodlarını yeniden yazmak durumunda kalıyoruz. Bu durum sistemin şişmesine yazılımda harcanan vaktin artmasına neden olmakta. Bu durumu önleme için buton kodlarını bir kez yazıp, butona ihtiyaç duyulduğunda sadece kısa bir isimle çağırıp aynı kodların çalışmasını sağlayan yapıya fonksiyon diyoruz.
Yine bir programı yapılan iş ve eylemlere göre parçalar bölüp sonra bir bütün hale getirebilmemize yarayan yapıdır
C dilinde fonsiyonlar, programcı tarafından geliştirlen fonksiyonlar ve C dilin .h uzantılı kendi yapısında bulunan fonksiyonlar olarak ikiye ayrılır.
Bir fonksiyon oluştururken dikkat etmemiz gereken durum geriye değer dönderip, döndermeyeceği. Eğer geriye değer dönderiyorsa dönden değer yapısında (char,short,int,long) tanımlanmalı, dönen bir değer yoksa void olarak tanımlanmalı.
1 2 3 4 5 6 7 8 9 10 11 12 13 | #include <stdio.h> // C'ye ait eknran çıktı ve girdilerini almak için kullanıdüğımız fonksiyon kütüphanesi void yaz(){ //ilk merhaba fonsiyounumuzu main'den (ana fonksiyondan)önce oluşturduk printf("Merhaba C\n"); //Bu fonksiyon çağırıldığında çalışak kod. } int main(){ yaz(); getchar();// Ekranın hemen kapanmaması için bir tuşa basılmasını bekliyoruz. return 0; } |
Fonksiyon isimleri tanımlarken
- Türçe karakter vermeyiniz.
- Harf ile başlatmayınız.
- İçerisinde özel karakter (&/()=^’#!<>– vb.) tanımlamayınız
- Boşluk bırakmayınız. (Yerine _ kullanınız)
- Büyük küçük harf duyarlılığına dikkat ediniz.
- Değişken tanımlarken geçerli olan kurallar burda da geçerlidir.
Fonksiyonda geriye değer döndermek için return komutu kullanılır. Aynız zamanda fonksiyon geriye değer döndereceği için tanımlanırken dönen değer tipinde tanımlanmalı. Yani void yerine char,short,int,long vb. tanımlanmalı.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #include <stdio.h> // C'ye ait eknran çıktı ve girdilerini almak için kullanıdüğımız fonksiyon kütüphanesi float kdv(){ //Fonksiyonu tanımladı ve paratez bloklarını oluşturduk. float sayi=0.18;// kdv oranını float bir değişkene atadık. return sayi; //Bu fonksiyon çağırıldığında çalışak kod. } int main(){ printf("Kdv oranı : %.2f",kdv()); getchar();// Ekranın hemen kapanmaması için bir tuşa basılmasını bekliyoruz. return 0; } |
Fonksiyonların diğer bir özelliği ise dışarıdan değer gönderebiliyor olmamız. Örneğin gönderdiğimiz bir fiyatı kdv oranı hesaplanarak geri alalım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #include <stdio.h> // C'ye ait eknran çıktı ve girdilerini almak için kullanıdüğımız fonksiyon kütüphanesi float kdvHesapla(float fiyat){//fonksiyona dışarıdan parametre gönderdik float kdvOrani=0.18; return fiyat+(fiyat*kdvOrani); } int main(){ float kdv=kdvHesapla(100); printf("Kdvli fiyat : %.2f",kdv); getchar();// Ekranın hemen kapanmaması için bir tuşa basılmasını bekliyoruz. return 0; } |
Yine fonksiyonlar çok parametreli olarakta hesaplanabilmektedir. Örneğin fiyatı ve kdv’yi bizim belirlediğimiz oranlarda hesaplayan bir fonksiyon oluşturalım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #include <stdio.h> // C'ye ait eknran çıktı ve girdilerini almak için kullanıdüğımız fonksiyon kütüphanesi float kdvHesapla(float fiyat,float kdv){//fonksiyona dışarıdan iki parametre gönderdik return fiyat+(fiyat*kdv); //fiyat ve kdv alarak kdv'li fiyatı hesapladık return ile geriye dönderdik } int main(){ float kdv=kdvHesapla(100,0.08); printf("Kdvli fiyat : %.2f",kdv); getchar();// Ekranın hemen kapanmaması için bir tuşa basılmasını bekliyoruz. return 0; } |
Fonksiyon Prototipi
Yine dikkat etmemiz gereken hususlardan biri ise; oluşturduğumuz fonksiyonların void main(){} ana fonksiyonundan önce tanılamamız gerektiği.
Nedeni bilgisayarın kodları yukardan aşağı satır satır okuyor olması. Mesala bir kitap okuyorsunuz, yazarın olay örgüsünde daha önce okuduğunuz sayfalarda
anlatmadığı bir olayın eleştirsini yaptığını okuyorsunuz. Peki nedersiniz ne zaman oldu bu olay ben mi okumadın diye hataya düşüp sayfaları
karıştırmaya başlarsınız. Mainde bir son fonksiyon ve değerlendirme yapabilmesiz için fonksiyonların kendinden önce tanımlanması gerekmetedir.
Dikkat!
Peki fonsiyonu maninden sonra yazmanı gerekiyorsa… İşte tam burada Fonksiyon Prototip‘leri devreye giriyor. Mainden önce
fonskiyonun prototipini tanımlayıp mainden sonrada fonksyonun işlevini yazabilirsiniz. Örneğin kdvHesapla fonksiyonumuzu tanımlayalım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #include <stdio.h> // C'ye ait eknran çıktı ve girdilerini almak için kullanıdüğımız fonksiyon kütüphanesi float kdvHesapla(float fiyat,float kdv); // Fonksiyonnun prototipini tanımlamış bulunuyoruz. int main(){ float kdv=kdvHesapla(100,0.08); printf("Kdvli fiyat : %.2f",kdv); getchar();// Ekranın hemen kapanmaması için bir tuşa basılmasını bekliyoruz. return 0; } float kdvHesapla(float fiyat,float kdv){//fonksiyona dışarıdan iki parametre gönderdik return fiyat+(fiyat*kdv); //fiyat ve kdv alarak kdv'li fiyatı hesapladık return ile geriye dönderdik } |
Evet başlamadan önce belirttiğimiz gibi kendi tanımlamış olduğunuz fonsiyonrların dışında bir de C’nin kendi tanımlı fonksiyonları bulunmaktadır. Bunları ilerleryen derslerde daha detaylı inceleyeğiz sadece ön bilgi olması adına aşağıdaki tabloda tanımlı fonksiyonları sizlerle paylaştım. Başarılar.
Fonksiyon | İşlevi |
---|---|
math.h | Matematiksel işlemleri |
ctype.h | Karakter İşlemleri |
string.h | Metin İşlemeleri |
stdio.h | Giriş/Çıkış İşlemleri |
stdlib.h | Muhtelif İşlemleri |
conio.h | Yazı İşlemleri |
graphic.h | Grafiksel İşlemler |