Fonksiyonlar #1 – C Programlama Dili

Fonksiyonlar (modern dillerdeki adıyla metotlar), programlama dilindeki iş parçacıklarıdır. Sık kullandığınız bir eylemin kodunu bir kez yazarsınız ve sonrasında her defasında tekrardan yazmak yerine o kod parçacığını tekrar tekrar çağırırsınız. Bu kod parçacıkları fonksiyonlardır.
Fonksiyonların genel yapısı aşağıdaki gibidir :
Fonksiyon 5 temel elemandan oluşur. Bu elemanlarının hepsinin olması zorunlu değildir. Ancak fonksiyon_adi ve statements lar mutlaka olmalıdır. veri_tipi, parametreler ve return ifadeleri programın ihtiyacına göre olabilir de olmayabilir de.
Bu 5 elemanda fonksiyon_adi fonksiyonumuzun adı olmakla beraber değişken isimlendirme kuralları dahilinde her şey olabilir. Statements dediğimiz kısım ise fonksiyon içindeki kod satırlarıdır.
veri_tipi, fonksiyonun geri döndüreceği verinin tipinin belirtirken; return anahtar kelimesi verileri geri döndürmek için kullanılır. return anahtar kelimesinin fonksiyonunda sonunda olması gibi bir şart bulunmasa da return ifadesini gören derleyici sonraki kodlara bakmayacaktır.
parametreler ile ifade edilen kısım ise programcının bu fonksiyonu kullanırken fonksiyona vermek istediği değerlerdir. Yani fonksiyonun girdileridir.
Her fonksiyonun duruma göre geri dönüş değeri olmak zorunda değildir. Mesela printf() fonksiyonunu düşünün amacı ekrana veri yazdırmaktır ve böyle bir amaç için geriye bir değer döndürmesine gerek yoktur.
Bu tür fonksiyonlar için void anahtar kelimesi kullanılır. void anahtar kelimesini gören derleyici bu fonksiyonun geriye bir değer döndürmeyeceğini anlar. void tipinde tanımlanmış bir fonksiyon geriye bir değer döndürmediğinden de return anahtar kelimesinin kullanımına gerek yoktur.
void tipindeki fonksiyonlar parametre alabilir de almayabilir de. Eğer ki parametre almayacaksa bu kısma da void yazabiliriz :
Bazı durumlarda fonksiyonların başında herhangi bir veri_tipi bulunmadığı gibi void anahtar kelimesine de rastlamazsınız. Eğer bir fonksiyonda veri_tipi belirtilmemişse default olarak fonksiyonun int bir değer döndüreceği varsayılır. Aşağıdaki iki fonksiyon tanımlaması da aynı şeyi ifade eder :
İçerik
Fonksiyon Bildirimi
Şimdi de fonksiyon bildirimleri üzerine konuşalım. Öncelikle şunu belirtelim: fonksiyon bildirimleri int ve char tipi dışındaki fonksiyonlar için zorunludur. Geri dönüş değeri int veya char olan bir fonksiyon için fonksiyon bildirimi yapmaya gerek yoktur.
Fonksiyon bildirimi, fonksiyonun kısa bir özeti gibidir. Bu bildirimle siz derleyiciye fonksiyonun veri_tipi , fonksiyon_adi ve parametreler bilgisini programın başında veriyorsunuz. Eğer bu bildirim yapılmaz derleyici fonksiyonun geri dönüş değerini int olarak kabul eder.
Fonksiyon bildirimin genel yapısı aşağıdaki gibidir:
Fonksiyon bildiriminde kullanılan veriler ile bildirimi yapılan fonksiyonun verilerinin birebir örtüşüyor olması gerekir. Yoksa derleyici hata verecektir. Ayrıca bildirimle fonksiyonu çağırırken kullanılan yapı da birbirinin aynı olması gerekmektedir. Yani 2 parametre alan bir toplama fonksiyonunu siz çağırırken 3 parametre veremezsiniz.
Bu kadar açıklamadan sonra uygulamaya geçelim. İlk olarak bildirimi yapılmasına gerek olmayan bir örnek üzerinden gidelim.
Örneğimizi incelemeye fonksiyon kavramı üzerinden gidelim. Aşağıda toplama işlemi yapan geriye inttipinde veri döndüren ve int tipinde a ve b adında iki tane parametre alan basit bir fonksiyon tanımlanmıştır.
Bu fonksiyon int tipinde olduğu için programın başında fonksiyon bildirimi yapılmasına gerek olmadan çalışabilmiştir.
main fonksiyonu içinde ise bu fonksiyonu nasıl çağırdığımızı görüyoruz :
Fonksiyonu çağırırken fonksiyon_adi ve parametreleri vermemiz yeterlidir. Eğer fonksiyon geri bir değer döndürüyorsa burada olduğu gibi bir değişkene bu değeri atayabiliriz.
Derleyici iTopla(2,1) ifadesini gördüğünde direk iTopla fonksiyonunun olduğu yere gidecek ve 2,1 parametrelerini bu fonksiyona verecek. Sonrasında bu fonksiyon içerisindeki kodlar çalıştırıldıktan sonra return anahtar kelimesini gören derleyici tekrardan main fonksiyonuna gelecek ve döndürdüğü değeri sonuc değişkenine atayacaktır.
Çıktımız ise aşağıdaki gibidir :
Şimdi de int dışında fonksiyon bildirimini zorunlu yapan bir örnek üzerinden gidelim. Uygulamamız aşağıdaki gibidir :
Uygulamamızda fBolme() adında bir fonksiyon tanımladık. Bu fonksiyonu da main() fonksiyonumuz içinde çağırarak kullandık.
Diğer uygulamadan farklı olarak programımızın başında
float fBolme(float a, float b); //fonksiyon bildirimi
şeklinde fonksiyon bildirimi yaptık. Eğer bu bildirim olmasaydı programımız hata verip çalışmayacaktı. Çıktımız ise aşağıdaki gibidir :
Parametre almayan fonksiyonlarda parametreler kısmına void anahtar kelimesi yazılır. Parametre almayan bir fonksiyonun bildirimi iki şekilde yapılabilir :
veri_tipi fonksiyon_adi(void); // *1
void fonksiyon_adi(void); // *2
Bu iki bildirimden ilkindeki fonksiyonun bir geri dönüş değeri vardır. Ancak ikinci fonksiyonun geri dönüş değeri olmadığını başında kullandığımız void anahtar kelimesinden anlıyoruz. Parametre kısmında kullanılan void ifadeleri ise bu fonksiyonların parametre almayacağını ifade etmektedir.
void main(void);
Geri dönüş değeri olan fonksiyonları illa bir değişkene atamak zorunda değiliz, direk sonucu printf()fonksiyonu ile yazdırabiliriz. Aşağıdaki fonksiyonu inceleyebilirsiniz :
Çıktımız aşağıdaki gibidir :
Aşağıdaki gibi bir uygulama düşünün. İki ayrı fonksiyon çağırarak bir dizi içerisindeki tek sayıların toplamını buluyoruz.
Uygulamamızın başında array[7] adında 7 elemanlı bir dizi tanımlayıp ilk değer atamasını yaptık. Sonrasında for döngüsü içerisinde tekSayiBulma() fonksiyonunu kullanarak tek sayıları ayırt edip iTopla()fonksiyonu ile de bunları topladık.
Bu şekilde bir uygulama içerisinde birden fazla fonksiyon kullanabileceğiniz gibi bu fonksiyonlar da birbirlerini çağırarak kullanabilirler. Fonksiyonların bu şekilde gayet esnek bir yapısı mevcut.
Çıktımız ise aşağıdaki gibidir :
Fonksiyon kullanımı uygulamaya esneklik kazandırdığı gibi okunabilirliği de artırmaktadır.
Bugünlük bu kadar, umarım faydalı bir çalışma olmuştur.
Uygulama noktasında herhangi bir sorun yaşarsanız aşağıdaki yorum panelini kullanarak iletişime geçmekten çekinmeyin lütfen. Teşekkürler.
Kaynak belirtilmeyen görseller @etasarim a aittir. / Pictures that don’t have any source belongs to @etasarim.
Posted from my blog with SteemPress : http://etasarim.cloudaccess.host/26/03/2019/fonksiyonlar-1-c-programlama-dili-2/
Bu ders fonksiyonlara giriş niteliğinde olan bir derstir. Giriş niteliği taşısa dahi kullanımı hakkında oldukça bilgi içeriyor. İlerleyen derslerde fonksiyonlarla alakalı daha ileri konulara değinilecektir.
Bu yazı Curation Collective Discord Sunucusunda küratörlere önerilmiş ve manuel inceleme sonrasında @c-squared topluluk hesabından oy ve resteem almıştır.
This post was shared in the #turkish-curation channel in the Curation Collective Discord community for curators, and upvoted and resteemed by the @c-squared community account after manual review.
@c-squared runs a community witness. Please consider using one of your witness votes on us here
Thanks for support @c-squared
Congratulations! This post has been upvoted from the communal account, @minnowsupport, by etasarim from the Minnow Support Project. It's a witness project run by aggroed, ausbitbank, teamsteem, someguy123, neoxian, followbtcnews, and netuoso. The goal is to help Steemit grow by supporting Minnows. Please find us at the Peace, Abundance, and Liberty Network (PALnet) Discord Channel. It's a completely public and open space to all members of the Steemit community who voluntarily choose to be there.
If you would like to delegate to the Minnow Support Project you can do so by clicking on the following links: 50SP, 100SP, 250SP, 500SP, 1000SP, 5000SP.
Be sure to leave at least 50SP undelegated on your account.