Yapay Gezegen

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.

function fonksiyonAdi(parametre1,parametre2) {
// Kod bloğu

}

Fonksiyonu çalıştırmak için çağırılması gerekmektedir. Fonksiyon çağırma işlemi, fonksiyon tanımlandıktan sonra yapılır.

function ilkFonksiyon() { // parametresiz fonksiyon
console.log("Yapay Gezegen")
}

ilkFonksiyon() // fonksiyon çağırma işlemi gerçekleşti ve konsol ekranına "Yapay Gezegen" yazdırıldı

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.

let fonk = function (ad,soyad) {
console.log("Hoşgeldiniz. Sayın " + ad + " " + soyad)
}

fonk("Ayhan","Kılıç") // Hoşgeldiniz. Sayın Ayhan Kılıç

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.

function topla(sayi1,sayi2) {
return sayi1 + sayi2 // toplama işlemi yapılır ve sonucu döndürülür
}

var sonuc1 = topla(50,78) // topla fonksiyonu sonuc1 adlı değişkene atandı

console.log(sonuc1) // 128

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.

console.log(topla(135,270)) // 405

console.log(topla(270,360)) // 630

Return gerçekleştikten sonra Fonksiyon çalışmayı durdur. Return ifadesinden sonra yazılan kodlar çalıştırılmaz.

function yeniFonksiyon() {
return "return1"
return "return2"
}

console.log(yeniFonksiyon()) // return1

Ö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.

function karesiniAlma(sayi) {
if(sayi < 0){
return sayi * sayi * -1 // negatif sayıların karesi
}else{
return sayi * sayi // pozitif sayıların karesi
}
}

console.log(karesiniAlma(12)) // 144

console.log(karesiniAlma(-8)) // -64

Ö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.

if(sayi < 0){
return "Negatif sayıların faktöreyeli tanımsızdır ve hesaplanmaz."
}

let sonuc = 1

for (let i = 1; i <= sayi; i++) {
sonuc *= i
}

return sonuc
}

console.log(faktoriyel(5)) // 120

console.log(faktoriyel(10)) // 3628800

console.log(-25) // Negatif sayıların faktöreyeli tanımsızdır ve hesaplanmaz.

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.

function topla(a,b) {
return a + b
}

function cikar(a,b) {
return a - b
}

function karesi(a,b,fonk) {
let sonuc = fonk(a,b)
if(sonuc<0){
return -sonuc * sonuc
}else{
return sonuc * sonuc
}
}

console.log(topla(2,7)) // 9

console.log(karesi(2,7,topla)) // 81

console.log(cikar(2,7)) // -5

console.log(karesi(2,7,cikar)) // -25

Ö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.

function faktoriyel(sayi) {
if (sayi == 0) {
return 1
}
if (sayi < 0) { // Negatif değer kontrolü
return "Negatif sayı girdiniz."
}
return sayi * faktoriyel(sayi - 1) // Pozitif sayılar için kendini çağırır
}

console.log(faktoriyel(5)) // konsol ekranına 120 sonucunu yazar
Varsayılan Parametre Tanımlama