FFFONKSİYONLAR NEDİR?FONKSİYONLARIN ANA MANTIĞI

Bugüne kadarki c++ derslerimizde kodları sürekli int main() yapısında yazdık.Başlangıç derslerinde sadece buraya yazmanız gerektiğini ve derslerde ilerledikçe bunun nedenini yavaş yavaş öğreneceğinizi söylemiştim.Fonksiyonlar dediğimiz yapılar ise int main dışında bulunan kodlardır.İnt main ana fonksiyon yapımızdır ve fonksiyonlar dediğimiz

int main dışında yazdığımız kodları biz ana fonksiyonda çağırarak çalıştırabiliriz.Şu anda ilk defa duyuyorsanız anlamamış olabilirsiniz.Örneğin bir fonksiyonda merhaba dünya yazdıralım ve ana fonksiyonumuzu yazmak için int main yazalım ve kodlarımızı yazmaya başlayalım.Biz merhaba dünya yazmak yerine direk daha önce yazdığımız fonksiyonun adını kullanarak merhaba dünya yazabiliriz ve böylece uzun bir şekilde yazmaktan kurtuluruz.Eğer sürekli merhaba dünya yazmam gerekecekse bu sayede sadece bu fonksiyonu kullanarak bu yükten kurtulabilirim.Fonksiyonların mantığı bu şekildedir.Şimdide bu fonksiyonları nasıl yazıp nasıl ana fonksiyonda çağırabileceğimizi öğrenelim.

DEĞER DÖNDÜREN FONKSİYONLAR

Bazı fonksiyonlar çağırıldığında içerisinde yazan kodları yürüttükten sonra ana fonksiyona bir değer gönderirler.Bunu daha iyi anlamanız için bir örnek üzerinden inceleyelim.Bir fonksiyonumuzda kullanıcıdan iki sayı alıp toplayalım ve bu fonksiyonun bana o toplamı vermesini isteyelim.Bu tür fonksiyonlar ana fonksiyona yani int main bölümüne bir değer gönderdiği için bu tür fonksiyonlara değer döndüren fonksiyonlar deriz.Fonksiyonu yazmak için yine kütüphaneler başta yazıldıktan sonra bu tür fonksiyonlar aşağıdaki gibi yazılır.

döndürülecek değişken tipi fonksiyon ismi(fonksiyon çağırılırken girilecek değerler){

Kodlarımız

}

Döndürülecek değişken tipi adı üstüne istediğimiz değişkenin tipidir.Yani eğer bir tam sayı değişkeni döndürmek istiyorsak değişken tanımlarken kullandığımız int yapısını kullanırız.

Fonksiyon çağırılırken girilecek değerler:Bazen fonksiyonda kullanacağımız değişkenleri ana fonksiyondan göndermek isteyebiliriz.Bu gönderme işlemini fonksiyonunu çağırma işlemini anlatırken orada anlatacam ama fonksiyonu tanımlarken o alacağım değişkenler için tanımlama yapmam lazım o tanımlamayı fonksiyon isminin yanına parantez içinde yaparız.Mesela ana fonksiyondan iki tam sayı değişkeni göndereceksem iki tane tamsayı değişkenini parantez içinde tanımlamalıyım.   (int a,intb) şeklinde olabilir.

Örnek olarak bir değer döndüren fonksiyon yazalım.

Bu fonksiyon iki tam sayı değişkenini ana fonksiyondan alsın ve bu ikisini toplamını ana fonksiyona versin.Fonksiyon adımız toplama olsun ve tam  sayı değişkenleri topladığı için tamsayı döndürsün.

int toplama(int a,int b){

                  int toplam;

                  toplam=a+b;

                  return toplam;

}

 Fonksiyonumuzu yukarıdaki şekilde yazmış olduk.Bu fonksiyon yazıldıktan sonra ana fonksiyonda ismiyle çağrıldığında

yürütülür.

Fonksiyon çağırma işlemi: Fonksiyonu ana menüde şu şekilde çağırabiliriz.   fonksiyonun ismi(gönderilecek değerler);

  Örnek olarak yukarıda yazdığımız fonksiyonu kullanabiliriz.Bu fonksiyonu aşağıdaki şekilde çağırabiliriz.

      int main(){

                           cout<<toplama(3,5);

}

    Bu şekilde yazdığımızda ekranda 8 yazısını görürüz çünkü biz 3 ve 5 rakamlarını gönderdik ve o fonksiyon bunları toplayarak bize geri gönderir.Direk sayı yollamak yerine kullanıcıdan aldığımız değişkenleri yollayabiliriz yani aşağıdaki gibi yapabiliriz.

   

    int main(){

              int a,b;

              cout<<"1.Sayi gir:";

              cin>>a;

              cout<<"2.Sayi gir:";

              cin>>b;

              cout<<toplama(a,b);

                   }

Yukarıdaki gibi yazdığımızda değişkenleri kullanıcıdan alıp göndermiş oluruz ve toplamlarını alırız.

                                                    

                                                                                  NOTLAR

1-Bizim gönderdiğimiz değişkenlerde olan değişiklikler ana fonksiyonu etkilemez.Bunu daha iyi anlamak için şu şekilde inceliyelim.

 Bir fonksiyona a değişkeni gönderelim ve a değerim 5 olsun.Bu gönderdiğim değer gönderdiğim fonksiyonda işlemler sonucu 2 olarak eşitlensin.Ben fonksiyonu çağırdıktan sonra int main kısmında a değişkeni ile birşey yaptığımda o a değeri 5 olarak gözükmeye devam eder.

2-Eğer bir fonksiyon yazılırken değişken tipi yazılmamışsa(döndüreceği)bilgisayar döndüreceği tipi tamsayı olarak kabul eder.

      toplama(int a,int b){

              int toplam;

              toplam=a+b;

              return toplam;

                       }

Yukarıdaki fonksiyonda daha önce öğrendiklerimize göre isminden önce değişken tipini yazmalıydık ama biz yazmadan direkt olarak ismini yazıp devam etmişiz.Blgisayar böyle yazılan fonksiyonları int döndürecek gibi kabul eder.Gördüğünüz gibi toplam değişkenide bir int yani tamsayıdır.O yüzden return kullanarak toplam döndürdüğümüzde bu fonksiyon sorunsuz çalışacaktır ama int dışında farklı türden bir değişken döndürmeye kalkarsak fonksiyon hata verecektir.

3-Değişken döndüren fonksiyonları çalıştırdığımızda değişkeni programın sonunda gönderir ama sadece göndermekle kalmaz içindeki tüm kodlarıda çalıştırır.Örneğin içinde cout ile birşey yazdırdığımızda fonksiyonu çağırdığımızda yazdırdığı herşeyi ekranda görürüz son olarakta göndereceği değişkenide gönderir.

int toplama(int a,int b){

             int toplam;

             cout<<"Toplama programına hosgeldiniz!";

             toplam=a+b;

             return toplam;

                }

e

Örneğin yukarıdaki fonksiyonu çağırdığımızda ekrana önce toplama programına hosgeldiniz yazacak ve son olarakta toplam değişkenini döndürecek.

 

4-Döndürmek istediğimiz değişkeni return değişken; yazarak döndürürüz.Eğer direk sabit bir sayı döndürmek istersekte döndürebiliriz.Örneğin ben bir fonksiyonun sonunda 5 sayısını döndürmek istersem return 5;  yazmam gerekir.

5-Bir fonksiyonda tanımlanan değişkenle ana fonksiyon(int main()) 'de tanımlanan değişken  birbirinden bağımsızdır.

Daha iyi anlamanız için örnek olarak inceliyelim.Mesela bir fonksiyonda int a; diye bir değişken tanımladım.İnt main'de bu a değişkenini tanımlamadan kullanamam.Yani int main bu değişkeni tanımaz.Eğer int main'de yine aynı şekilde int a; diye bir değişken tanımlarsam bu iki a değişkeni birbirinden bağımsızdır.Yani birini değiştirdiğimde diğeri bundan etkilenmez.Adları aynı olmasına rağmen farklı değişkenler olarak kabul edilirler.Çünkü ikisi farklı fonksiyonlarda tanımlanmıştır.

                                                                        DEĞER DÖNDÜRMEĞEN DEĞİŞKENLER

 

İçindeki kodları çalıştırıp ana fonksiyona hiçbir değer döndürmeyen fonksiyonlarda vardır.Bu tür fonksiyonları yazarken isimden önce void yazarız.Void'in türkçe anlamı boş demektir.Bu yüzden hiçbir değer döndürmediği için normalde değişken tipini yazmamız gerek yere void yazarız.Bu fonksiyonlar çağırılınca yine içinde ne kod var ise yürütür ama sonda ana fonksiyona bir değer göndermez.Mesela yine iki sayıyı toplayarak ekrana yazdırmamız için bir fonksiyon yazalım ama bu fonksiyon toplam değerini ana fonksiyona göndermiyeceği için ekrana yazdırma işini yine fonksiyon içinde yapmalıyız.Kod aşağıdaki gibi olur.

 

#include<iostream>

using namespace std;

void toplama(int a,int b){

                  int toplam;

                  toplam=a+b;

                   cout<<"Toplam:"<<toplam;

                }

int main(){

                  int sayi1,sayi2;

                  cout<<"1.Sayi gir:";

                  cin>>sayi1;

                  cout<<"2.Sayi gir:";

                  cin>>sayi2;

                  toplama(sayi1,sayi2);

                      }

 

Yukarıdaki kodu yazdığımızda yine ekranda sayılar toplamını görebiliriz ama bu fonksiyon değer göndermiyor,kendi içerisinde ekrana yazma işini yapıyor.

BİZİMLE İLETİŞİME GEÇİN

Tüm hakları www.bilenkalem.com sitesine aittir.