21 Kasım 2016 Pazartesi

Örnek-2: Fonksiyon Çağırımı ve Kod Akışı


Örnek-1: İki Sayının Toplamı

Fonksiyon tipi:         int
Fonksiyon adı:         topla
Parametreler:         x ve y
Geri dönüş değeri:        x+y



Tavsiyeler

Birden fazla fonksiyon kullanılan programlarda, main fonksiyonu programın esas görevini yerine getiren fonksiyonların çağırıcısı olarak kullanılmalıdır.
Her fonksiyon, iyi olarak tanımlanmış tek bir işi yapacak şekilde sınırlandırılmalıdır ve fonksiyon ismi, fonksiyonun görevini etkili bir biçimde açıklamalıdır. Bu, özetlemeyi ve yazılımın yeniden kullanılabilirliğini sağlatır.
Eğer fonksiyonun görevini açıklayacak etkili bir isim bulamıyorsanız muhtemelen yazdığınız fonksiyon birden fazla görevi yerine getirmeye çalışmaktadır. Bu tarzda fonksiyonları daha küçük fonksiyonlara bölmek en iyi yoldur.
Bir fonksiyon genellikle bir sayfadan daha uzun olmamalıdır. Küçük fonksiyonlar yazılımın yeniden kullanılabilmesini sağlatır.
Programlar, küçük fonksiyonların bir araya getirilmesiyle yazılmalıdır. Bu, programların daha kolay yazılması, değiştirilmesi ve hatalarının giderilmesini sağlar.
Çok fazla sayıda parametreye ihtiyaç duyan fonksiyonlar birden fazla görevi yerine getiriyor olabilir. Böyle fonksiyonları ayrı görevleri gerçekleştiren daha küçük fonksiyonlara bölmek gerekir. Fonksiyonun başlığı mümkünse bir satıra sığmalıdır.



Dizilerin Fonksiyonlarda Kullanılması

Diziler de sıradan değişkenler gibi bir fonksiyona parametre olarak aktarılabilirler.
Fakat, aktarma kuralı biraz farklıdır.

Her zaman dizinin yanında
boyutunun da bilinmesi gereklidir !!!

Yineleme mi Tekrar mı?

Tekrar ve yinelemenin ikisi de döngü içerir.
Tekrar özellikle döngü yapısını kullanırken, yineleme döngüyü fonksiyon çağrılarının tekrarında kullanır.
Tekrar ve yinelemenin ikisi de bir sonlandırma testi içerirler.
Yineleme temel bir durumla karşılaşıldığında, tekrar ise döngü devam koşulu yanlış hale geldiğinde sona erer.
Yineleme bir çok negatif özelliğe sahiptir.
Yineleme, mekanizmayı sürekli çağırarak fonksiyon çağrılarının artmasına sebep olur. Bu, işlemci zamanı ve hafızada fazladan yük demektir.
Her yineleme çağrısı, fonksiyonun başka bir kopyasının oluşmasına sebep olur, bu da hafızayı fazladan işgal etmek demektir.
Tekrar, fonksiyonların sürekli olarak çağrılması ve fazladan hafıza kullanılması engellenir.
Yinelemeli olarak çözülen her problem tekrarlı bir biçimde çözülebilir. Yineleme yaklaşımı genelde problemi daha iyi yansıttığı ve daha kolay anlaşılan ve hataları kolay ayıklanan programlar yazılmasını sağlattığı için, tekrar yaklaşımına göre tercih edilebilir.
Yinelemeli çözümleri seçmenin başka bir sebebi de tekrarlı çözümün kolaylıkla bulunamayışıdır.

Fonksiyonların Yinelemesi – Kendi Kendilerini Çağırması (Recursive Function)

Bazı problem tipleri için fonksiyonların kendi kendilerini çağırması kullanışlı olabilir.
Bir yineleme fonksiyonu (recursive function), kendi kendini doğrudan ya da bir başka fonksiyon içinden çağıran fonksiyondur.
Yineleme fonksiyonu, bir problemi çözmek için çağrılır.
Bu fonksiyon, yalnızca en basit durumu ya da temel durum olarak adlandırılan durumu nasıl çözeceğini bilmektedir.
Eğer fonksiyon temel bir durumla çağrılırsa,  fonksiyon bir sonuç geri döndürür.

Yinelemeyi mümkün kılmak için sonraki parça orijinal probleme benzemelidir, fakat orijinal problemin daha basit ya da daha küçük bir versiyonu olmalıdır.
Yineleme için verilebilecek en güzel örnek popüler bir matematik konusu olan Negatif olmayan bir n tamsayısının faktöriyelinin hesaplanmasıdır.
Örnek:
5!=5*4*3*2*1
5!=5*(4*3*2*1)
5!=5*(4!)

Fonksiyon Kullanım Hataları

Fonksiyon tanımlamalarında geri dönüş değerini unutmak.
Geri dönüş tipi void olarak bildirilmiş bir fonksiyonun bir değer geri döndürmesi bir yazım hatasıdır.
Aynı tipte fonksiyon parametrelerini double x, double y yerine double x, y olarak bildirmek. double x, y biçiminde parametre bildirmek, y parametresinin tipinin int olmasına sebep olur. Çünkü belirtilmeyen parametre tipi otomatik olarak int tipinde varsayılır.
Parametre listesini yazdığımız parantezlerin dışına noktalı virgül koymak yazım hatasıdır.
Bir fonksiyon parametresini daha sonradan fonksiyon içinde yerel bir değişken olarak kullanmak bir yazım hatasıdır.
Bir fonksiyon içinde başka bir fonksiyon tanımlamak yazım hatasıdır.
Fonksiyon prototipinin sonuna noktalı virgül koymamak bir yazım hatasıdır.