JavaScript'te Fonksiyonlar

JavaScript'te Fonksiyonlar

Bu makale JavaScript'teki fonksiyonları açıklar.

YouTube Video

JavaScript'te Fonksiyonlar

JavaScript'teki fonksiyonlar, belirli görevleri gerçekleştirmek için kullanılan tekrar kullanılabilir kod bloklarıdır. Fonksiyon kullanımı kodun okunabilirliğini artırır ve bakımını kolaylaştırır. Fonksiyonlar çeşitli şekillerde tanımlanabilir ve argümanlar ile dönüş değerleri kullanılarak esnek bir şekilde yönetilebilir.

Fonksiyon Tanımlama Yöntemleri

Fonksiyon Bildirimi

Fonksiyonlar function anahtar kelimesi kullanılarak tanımlanabilir. Fonksiyon bildirimleri kod çalışmadan önce yükseltilir, bu nedenle tanımlanmadan önce çağrılabilirler.

1console.log(greet("Everyone")); // Hello, Everyone
2
3function greet(name) {
4    return "Hello, " + name;
5}
6
7console.log(greet("Alice")); // Hello, Alice

Bu örnekte, greet fonksiyonu bildirimi yapılmadan önce çağrıldığı için Hello, Everyone ve Hello, Alice görüntülenir.

Fonksiyon İfadesi

Fonksiyonlar bir değişkene atanarak da tanımlanabilir. Bu durumda, fonksiyon yükseltilmez ve yalnızca tanımlandıktan sonra çağrılabilir.

1const greet = function(name) {
2    return "Hello, " + name;
3};
4
5console.log(greet("Bob")); // Hello, Bob

Bu örnekte Hello, Bob görüntülenecektir.

Ok Fonksiyonu

Ok fonksiyonları, daha kısa bir sözdizimiyle fonksiyon tanımlamanın bir yoludur. Bunlar özellikle anonim fonksiyonlar (adlandırılmamış fonksiyonlar) kullanıldığında faydalıdır. Ayrıca ok fonksiyonları, this anahtar kelimesiyle ilgili farklı bir davranış sergiler.

 1const greet = (name) => {
 2    return "Hello, " + name;
 3};
 4
 5// When it can be expressed in a single line,
 6// `return` and curly braces can be omitted
 7const greetShort = name => "Hello, " + name;
 8
 9console.log(greet("Charlie")); // Hello, Charlie
10console.log(greetShort("Dave")); // Hello, Dave

Bu örnekte fonksiyonlar greet ve greetShort olarak tanımlanabilir. Eğer fonksiyon tek satır ise, greetShort gibi {} (kıvırcık parantezler) kaldırılabilir.

Bir Fonksiyonun Unsurları

Argümanlar

Bir fonksiyona geçirilen değerlere argümanlar denir. Bir fonksiyon tanımlarken argümanları belirtirseniz, fonksiyonu çağırdığınızda değerler geçirebilirsiniz.

1function add(a, b) {
2    return a + b;
3}
4
5console.log(add(2, 3)); // 5

Varsayılan Argümanlar

Argümanlara herhangi bir değer iletilmezse varsayılan bir değer belirtebilirsiniz.

1function greet(name = "Guest") {
2    return "Hello, " + name;
3}
4
5console.log(greet()); // Hello, Guest
6console.log(greet("Alice")); // Hello, Alice

Bu örnekte, greet() çağrılırsa varsayılan olarak Misafir kullanılır.

Dönüş Değeri

return ifadesini kullanarak bir fonksiyondan bir dönüş değeri döndürebilirsiniz. return ifadesi yoksa, fonksiyon tanımsız (undefined) değerini döndürür.

1function greet(name) {
2    console.log('Hello, ' + name + '!');
3}
4function square(num) {
5    return num * num;
6}
7
8console.log(square(4)); // 16
9console.log(greet('Alice')); // undefined

Bu örnekte, greet bir değer döndürmediğinden dönüş değeri tanımsız (undefined) olur.

Anonim Fonksiyon

İsmi olmayan bir fonksiyon anonim fonksiyon olarak adlandırılır. Genellikle fonksiyon ifadeleri veya ok fonksiyonları olarak kullanılırlar.

1const double = function(num) {
2    return num * 2;
3};
4
5console.log(double(5)); // 10

Hemen Çalıştırılan Fonksiyon İfadesi (IIFE)

Hemen Çalıştırılan Fonksiyon İfadesi (IIFE), tanımlandığı anda çalıştırılan bir fonksiyondur. Genellikle kapsamı kontrol etmek için kullanılır.

1/* Example of IIFE: Immediately Invoked Function Expression */
2(function() {
3    console.log("This is an IIFE");
4})(); // This is an IIFE

Tanımlandığı anda çalıştırılır.

Geri Çağırım Fonksiyonu

Bir fonksiyona, daha sonra çalıştırılması için başka bir fonksiyonu argüman olarak geçirme işlemine geri çağırım fonksiyonu denir. Genellikle asenkron işlem ve olay yönetiminde kullanılır.

1function processData(callback) {
2    let data = "Processed Data";
3    callback(data);
4}
5
6processData(function(result) {
7    console.log(result); // Processed Data
8});

Bu örnekte, konsola bir değer yazdıran bir fonksiyon geri çağırım fonksiyonu olarak geçirilir.

Özyinelemeli Fonksiyon

Bir fonksiyonun kendi kendini çağırmasına özyineleme denir ve bunu kullanarak tekrarlayan işlemler yapan bir fonksiyona özyinelemeli fonksiyon denir. Örneğin, bir faktöriyel hesaplama fonksiyonu şu şekilde özyineleme kullanılarak uygulanabilir.

 1function factorial(n) {
 2    if (n === 0) {
 3        return 1;
 4    } else {
 5        return n * factorial(n - 1);
 6    }
 7}
 8
 9console.log(factorial(5));
10// Output : 120
11// (5 * 4 * 3 * 2 * 1 = 120)

5 sayısının faktöriyeli olan 120 bu örnekte gösterilecektir.

this Anahtar Kelimesi

Bir fonksiyon içinde kullanılan this, fonksiyonun hangi nesneye atıfta bulunduğunu belirtir. Normal bir fonksiyonda çağıran nesneye atıfta bulunurken, ok fonksiyonlarında tanımlandığı kapsamın this değerini korur.

 1const obj = {
 2    name: "Alice",
 3    greet: function() {
 4        console.log(this.name); // Refers to "Alice"
 5    }
 6};
 7
 8obj.greet(); // Alice
 9
10const obj2 = {
11    name: "Bob",
12    greet: () => {
13        // Arrow function refers to the outer scope (undefined here)
14        console.log(this.name);
15    }
16};
17
18obj2.greet(); // undefined

obj değişkeninin greet özelliği function anahtar kelimesi kullanılarak tanımlanmıştır. Bu nedenle, this anahtar kelimesi obj değişkeninin nesnesini ifade eder. Diğer yandan, obj2 değişkeninin greet özelliği bir ok fonksiyonu (arrow function) kullanılarak tanımlanmıştır. Bu nedenle, this anahtar kelimesi dış kapsamda bulunan nesneyi ifade eder ve bu örnekte undefined olur.

Fonksiyon Kapsamı ve Closure'lar

Bir fonksiyon içinde tanımlanan değişkenlere, fonksiyonun dışından erişilemez. Bu durum fonksiyon kapsamı (function scope) olarak adlandırılır. Bir fonksiyon tanımlandığı andaki kapsamı koruyan closure adlı bir özellik de vardır.

 1function outer() {
 2    let outerVar = "I am outer!";
 3
 4    function inner() {
 5        console.log(outerVar); // Can access outerVar
 6    }
 7
 8    return inner;
 9}
10
11const innerFunc = outer();
12innerFunc(); // I am outer!

Bu örnekte, inner fonksiyonu, tanımlandığı kapsamı koruduğu için outerVar değişkenine erişebilir.

Özet

  • Fonksiyon deklarasyonları, fonksiyon ifadeleri ve ok fonksiyonları dahil olmak üzere fonksiyonları tanımlamanın çeşitli yolları vardır.
  • Fonksiyonlar argümanlar alabilir ve değerler döndürebilir.
  • Callback fonksiyonları ve özyinelemeli fonksiyonlar gibi özel kullanımlar da vardır.
  • this anahtar kelimesinin kullanımı konusunda dikkatli olunmalıdır, çünkü ok fonksiyonları ile normal fonksiyonlar farklı davranır.
  • Closure'lar, kapsamın dışından iç değişkenlere erişim sağlamak için kullanılabilir.

Fonksiyonlar, JavaScript'in esnek yapısından yararlanan önemli kavramlardan biridir.

Yukarıdaki makaleyi, YouTube kanalımızda Visual Studio Code'u kullanarak takip edebilirsiniz. Lütfen YouTube kanalını da kontrol edin.

YouTube Video