JavaScript Fonksiyonlar
Fonksiyon Tanımlama ve Çalıştırma
Fonskiyonlar, belirli bir işlevi yerine getiren kod bloklarıdır. Program içerisinde birden fazla kez çalışması gereken işlevlerin gerçekleştirilmesini sağlar. Yazılım daha düzenli ve anlaşılabilir olur.
Fonksiyonlar, genellikle dışarıdan aldıkları parametre değeleri üzerinde işlem yaparak bir sonuç döndürür. Fonksiyonlarda parametre kullanmak zorunlu değildir. Fonksiyonun birden fazla parametre aldığı durumlarda, parametreler arasına virgül konulur.
Fonksiyonu çalıştırmak için çağırılması gerekmektedir. Fonksiyon çağırma işlemi, fonksiyon tanımlandıktan sonra yapılır.
Fonksiyonlar, değişkene atanabilir. Atandığı değişken fonksiyon olarak çalışır. Bu yöntemde anonim (adsız) fonksiyonlar kullanılır. Değişkenin adı, fonksiyon adı olur.
Değer Döndürme
Fonksiyonlar, gerçekleştirdikleri işlemin sonucunu döndürmek için return anahtar kelimesini kullanır. Döndürülen değer bir değişkene atanabilir veya direkt sonuç olarak kullanılabilir. Örnek olarak: iki sayıyı toplamının döndüren fonksiyonu yazalım.
Bir defa yazılan fonksiyon, tekrar tekrar çağırılabildiği için daha az kod yazılmış olur. Tekrar çağırılan fonksiyon, aldığı yeni parametre değerlerini işler ve sonucunu return ifadesi ile döner. Örnek olarak yazdığımız topla fonksiyonunu farklı paratmetreler göndererek, tekrar çağıralım.
Return gerçekleştikten sonra Fonksiyon çalışmayı durdur. Return ifadesinden sonra yazılan kodlar çalıştırılmaz.
Örnek1, girilen sayının karesini hesaplayan bir fonksiyon oluşturalım. Sayıyı kendisiyle çarparak karesini alabiliriz. Matematikte, iki negatif sayının çarpımı pozitif bir sayı olur. Fakat, negatif sayıların karesi yine bir negatif sayı olmalıdır. Girilen sayının pozitif ve negatif olma durumlarını kontrol etmeliyiz. Bu fonksiyona: girilen sayının negatif ve pozitif olma durumuna göre iki farklı işlev eklenmelidir. Bir sayı: ya pozitif ya da negatiftir. Bundan dolayı fonksiyonda oluşturulan iki işlevden sadece birisi çalışmalıdır. Diğer işlevin çalışmaması için return ifadesi kullanılır. Fonksiyon; uygun işlevi gerçekleştirir, sonucu return eder ve kendini sonlandırır.
Örnek2, faktöriyel hesaplayan bir fonksiyon oluşturalım. Negatif sayıların faktöriyeli tanımsızdır ve hesaplanmaz. Oluşturacağımız fonksiyonda bu durumu kontrol etmeliyiz. Negatif sayılar için kullanacağımız return ifadesi, fonksiyonu sonlandırır. Pozitif değerler için bir döngü kullanarak faktöriyel hesaplaması yapar. Çıkan sonuç return edilerek, pozitif sayıların faktöriyeli hesaplanmış ve fonksiyon sonlandırmış olur.
Parametre Olarak Fonksiyon Göndermek
Fonksiyonlar, parametre değeri olarak fonksiyon alabilir. Bu yöntem, genellikle fonksiyona ek işlem yaptırmak için kullanılır. Ortak kullanılan fonksiyon çekirdek görevini üstlenir. Fonksiyona parametre olarak fonksiyon göndermek: farklı yapıların gerçekleştirdiği ortak işlemlerin tek bir yapı içerisinden çağırılmasını sağlar.
Örnek olarak: iki sayının toplamını ve farkını hesaplayan iki farklı fonksiyonumuz olsun. Daha sonra toplama fonksiyonun döndürdüğü sonucun karesini hesaplamamız gereksin. Toplama işlemini yaptıktan sonra sonucun karesini hesaplayan yeni bir fonksiyon yazabiliriz. Bu yeni fonksiyon: sadece toplama ve karesini alma işlemlerini yapacaktır. Bu fonksiyonda çıkarma ve karesini alma işlemleri yapılamaz. Çıkarma ve karesini alma için de yeni bir fonksiyon yazmamız gerekir. Fakat, herbir yeni ihtiyaç için yeniden fonksiyon yazmak kod fazlalığına sebep olur. Bunun yerine, parametre olarak fonksiyon alan ortak bir fonksiyon yazabiliriz. Böylece, daha az kod yazmış ve daha esnek bir yazılım geliştirmiş oluruz.
Özyinelemeli (Recursive) Fonksiyon
Fonksiyonun içine yazılan kodlara: o fonksiyonu çağıran kod eklenebilir. Bu durum belirli bir koşul gerçekleşene kadar döngüsel bir şekilde devam eder. Koşul sonlandığında fonksiyon çağırma işlemi sonlanır. Özyinelemeli fonksiyon yazarken dikkat edilmelidir. Koşulun sağlanmaması durumunda, fonksiyon kendi sürekli çağıracağı için: sonsuz bir döngü oluşur. Bu durum: yığın taşması (stack overflow) hatasına sebep olur.
Örnek olarak: girilen sayının faktöreyelini hesaplayan özyinelemeli fonksiyonu yazalım. Sayının kendisi ve 1 eksiği çarpılır. Bu işlem fonksiyonun kendini tekrar çağırmasıyla gerçekleşir. Saynın değeri 0 olduğunda, return 1 değeri döner. Böylece kendi tekrar çağırma işlemi sonlanmış olur.