0Pricing
JavaScript Academy · Ders

Kapanımlarla Özel Değişkenler

Durumu bir işlev kapsamının arkasında gizleyin.

Kapanımlarla Özel Değişkenler, CoddyKit'te ücretsiz bir JavaScript Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, JavaScript Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. JavaScript Academy kursu toplamda 4 dersten oluşur.

Kapanımlar Yoluyla Gizlilik

JavaScript'te nesne alanlarını özel yapmanın yerleşik bir yolu uzun süre yoktu. Kapanımlar bunun için bir çözüm sunar: Bir işlevin içindeki değişkenler dışarıdan görünmez, ancak içeride tanımlanan işlevler tarafından erişilebilir.

function secretBox() {
  let secret = "hidden";
  return {
    reveal: () => secret
  };
}
const box = secretBox();
console.log(box.reveal()); // "hidden"
console.log(box.secret);   // undefined

Özel Durumlu Bir Counter

Klasik örnek şudur: değeri doğrudan değiştirilemeyen bir sayaç. Bu değeri yalnızca döndürülen yöntemler değiştirebilir.

function makeCounter() {
  let count = 0;
  return {
    increment: () => ++count,
    value: () => count
  };
}
const c = makeCounter();
c.increment();
c.increment();
console.log(c.value()); // 2

Duruma Dokunulamaz

Dışarıdan count değerine ulaşmanın bir yolu yoktur. Bu değeri okumaya yönelik girişimler undefined döndürür; yöntemler üzerinden ilerlemeniz gerekir.

function makeCounter() {
  let count = 0;
  return { inc: () => ++count, get: () => count };
}
const c = makeCounter();
c.count = 100;        // creates an unrelated property
console.log(c.get()); // 0 - real count untouched

Kuralları Uygulama

Erişim yöntemler üzerinden gerçekleştiği için, bir balance değerinin negatife düşmesine asla izin vermemek gibi değişmezleri uygulayabilirsiniz.

function account(start) {
  let balance = start;
  return {
    withdraw: (n) => {
      if (n > balance) return "insufficient";
      balance -= n;
      return balance;
    },
    balance: () => balance
  };
}
const a = account(100);
console.log(a.withdraw(150)); // "insufficient"
console.log(a.withdraw(40));  // 60

Birden Çok Özel Alan

Bir kapanım aynı anda birden çok değişkeni koruyabilir. Bu değişkenlerin tümü gizlidir ve yalnızca döndürülen yöntemler arasında paylaşılır.

function user(name) {
  let logins = 0;
  let lastSeen = null;
  return {
    login: () => { logins++; lastSeen = "now"; },
    stats: () => ({ name, logins, lastSeen })
  };
}
const u = user("Ada");
u.login();
console.log(u.stats()); // { name: "Ada", logins: 1, lastSeen: "now" }

Özel Yardımcı İşlevler

Gizleyebileceğiniz şey yalnızca veriler değildir; iç işlevleri de gizleyebilirsiniz. Yalnızca sunduğunuz yöntemler geneldir.

function temperature() {
  let celsius = 0;
  const toF = (c) => c * 9 / 5 + 32; // private
  return {
    set: (c) => { celsius = c; },
    fahrenheit: () => toF(celsius)
  };
}
const t = temperature();
t.set(100);
console.log(t.fahrenheit()); // 212

Bağımsız Örnekler

Fabrika işlevine yapılan her çağrı ayrı bir özel durum oluşturur; bu nedenle örnekler hiçbir zaman birbirine müdahale etmez.

function makeCounter() {
  let n = 0;
  return { inc: () => ++n };
}
const a = makeCounter();
const b = makeCounter();
console.log(a.inc(), a.inc()); // 1 2
console.log(b.inc());          // 1

Salt Okunur Sunum

Bir değer okuyucu sunup ayarlayıcı sunmayarak, değeri dışarıdan salt okunur hâle getirebilir ve yine de içeriden değiştirebilirsiniz.

function timer() {
  let ticks = 0;
  setupInternally();
  function setupInternally() { ticks = 3; }
  return { ticks: () => ticks };
}
const t = timer();
console.log(t.ticks()); // 3 - no way to set it outside

Karşılaştırma: Sınıf Alanları

Modern JavaScript, #private özel sınıf alanlarını da destekler. Kapanımlar, fabrika işlevleri için ve sınıflar olmadan gizlilik istediğinizde hâlâ kullanışlıdır.

class Counter {
  #count = 0;
  inc() { return ++this.#count; }
}
const c = new Counter();
console.log(c.inc()); // 1

Neden Çalışır

Döndürülen yöntemler, dış değişkenleri kapsayan kapanımlardır. Dış işlev dönmüş olsa da, bu kapanımlar ona hâlâ başvurduğu için kapsamı yaşamaya devam eder.

Bir Memoization Önbelleği

Özel durum, önbellekler için harikadır. Önbellek nesnesi gizli kalır ve çağrılar arasında varlığını sürdürür.

function memoSquare() {
  const cache = {};
  return (n) => {
    if (cache[n] === undefined) cache[n] = n * n;
    return cache[n];
  };
}
const sq = memoSquare();
console.log(sq(4)); // 16
console.log(sq(4)); // 16 (cached)

Hızlı Kontrol

Kapanımlarla özel değişkenler.

Özet

Kapanımlar gizlilik sağlar: Bir fabrika işlevinin içindeki değişkenlere dışarıdan ulaşılamaz, ancak döndürülen yöntemler bunları paylaşır. Bu sayede müdahale edilemez sayaçlar, değişmezlere sahip balance değerleri, gizli yardımcı işlevler ve önbellekler oluşturulabilir. Her fabrika çağrısı bağımsız bir durum üretir. Modern #private sınıf alanları bir alternatiftir; ancak fabrika tarzı kodlarda kapanımlar öne çıkar.

Sıkça Sorulan Sorular

“Kapanımlarla Özel Değişkenler” dersi ücretsiz mi?

Evet — “Kapanımlarla Özel Değişkenler” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve JavaScript Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. JavaScript Academy kursu toplamda 4 dersten oluşur.

“Kapanımlarla Özel Değişkenler” dersinde ne öğreneceğim?

Durumu bir işlev kapsamının arkasında gizleyin. JavaScript Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

JavaScript Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te JavaScript Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.

“Kapanımlarla Özel Değişkenler” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu JavaScript Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her JavaScript Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Kapanımların Durumu Nasıl Yakaladığı
  2. Kapanımlarla Özel Değişkenler
  3. Modül Deseni (IIFE)
  4. Fabrika İşlevleri
← JavaScript Academy Sayfasına Dön