CodeBlanks Logo Icon CodeBlanks

Özet - Closure

Closure ve IIFE kullanarak dışarıdan erişilemeyen özel değişkenleri olan bir banka hesabı yazarsın.

Özet - Closure

Bu grupta closure'ın ne olduğunu, üretici fonksiyonlar ile özel durum üretmeyi, IIFE ile izole kapsamlar oluşturmayı, module deseni ile herkese açık API tasarlamayı ve döngüdeki closure tuzağını öğrendin.

Şimdi tüm bunları bir araya getireceğiz: dışarıdan erişilemeyen bir balance tutan, yalnızca deposit, withdraw ve getBalance metodlarını açan bir banka hesabı yazacağız.

Uygulama Banka hesabı yaz

createAccount(initial) adında bir fonksiyon tanımla. İçinde let balance = initial ile özel bir bakiye tut. Döndürülen nesnede üç metod olsun: deposit(amount) bakiyeyi artırıp döndürür, withdraw(amount) bakiyeyi azaltıp döndürür, getBalance() bakiyeyi döndürür. Sonra createAccount(100) ile bir hesap oluştur, deposit(50) ve getBalance() çağrılarını yazdır.

Başlangıç kodu

script.js
// createAccount fonksiyonunu tanımla
// initial parametresi ile balance'ı başlat
// deposit, withdraw ve getBalance metodlarını döndür

// 100 başlangıçlı bir hesap oluştur ve test et

Örnek çözüm

script.js
function createAccount(initial) {
  let balance = initial;
  return {
    deposit: function(amount) { balance += amount; return balance; },
    withdraw: function(amount) { balance -= amount; return balance; },
    getBalance: function() { return balance; }
  };
}

const acc = createAccount(100);
console.log(acc.deposit(50));
console.log(acc.getBalance());

Uygulama Yetersiz bakiye koruması ekle

Aşağıdaki createAccount tanımını al ve withdraw metodunu güncelle: bakiye yetersizse throw new Error("Yetersiz bakiye") fırlat. Yoksa bakiyeyi azaltıp döndür. Denetim if (balance < amount) ile başlasın.

Başlangıç kodu

script.js
function createAccount(initial) {
  let balance = initial;
  return {
    deposit: function(amount) { balance += amount; return balance; },
    withdraw: function(amount) {
      // Bakiye yetersizse hata fırlat
      balance -= amount;
      return balance;
    },
    getBalance: function() { return balance; }
  };
}

const acc = createAccount(100);
console.log(acc.withdraw(50));

Örnek çözüm

script.js
function createAccount(initial) {
  let balance = initial;
  return {
    deposit: function(amount) { balance += amount; return balance; },
    withdraw: function(amount) {
      if (balance < amount) {
        throw new Error("Yetersiz bakiye");
      }
      balance -= amount;
      return balance;
    },
    getBalance: function() { return balance; }
  };
}

const acc = createAccount(100);
console.log(acc.withdraw(50));

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Kavramları eşleştir

Kavram Anlamı
closure Yakalanan değişkeni anımsar
IIFE Tanımlandığı anda çalışır
module pattern Özel durumu korur
factory function Fonksiyon üretir
let in loop Tuzaktan korur

2 Bakiyeyi oku

Soru
function createAccount(initial) {
  let balance = initial;
  return {
    getBalance: function() { return ____; }
  };
}
Cevap
function createAccount(initial) {
  let balance = initial;
  return {
    getBalance: function() { return balance; }
  };
}

Açıklama: getBalance, yakalanan balance değişkenini döndürür.

Orta seviye bölümündeki tüm dersler