0Pricing
JavaScript Academy · Ders

Saf İşlevler ve Yan Etkiler

Öngörülebilir ve test edilebilir işlevler yazın.

Saf İşlevler ve Yan Etkiler, CoddyKit'te ücretsiz bir JavaScript Academy dersidir. Bu, 4 dersinin 1. 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.

Bir İşlevi Saf Yapan Nedir

saf işlevin iki özelliği vardır: Aynı girdiler verildiğinde her zaman aynı çıktıyı döndürür ve gözlemlenebilir hiçbir yan etkiye neden olmaz. Saf işlevler öngörülebilir ve sınaması kolaydır.

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

Belirlen deterministik Çıktı

Saflık, belirlenimlilik anlamına gelir. Aynı bağımsız değişkenler her zaman aynı sonuca karşılık gelmelidir; gizli duruma, zamana veya rastlantısallığa bağlılık olmamalıdır.

function double(n) {
  return n * 2;
}
console.log(double(10)); // always 20

Yan Etki Nedir

Yan etki, bir işlevin değer döndürmenin ötesinde yaptığı her şeydir: günlük kaydı tutmak, dış durumu değiştirmek, depolamaya yazmak, ağ çağrıları yapmak veya bağımsız değişkenlerini değiştirmek.

let total = 0;
function impureAdd(n) {
  total += n;     // side effect: mutates outer state
  return total;
}
console.log(impureAdd(5));
console.log(impureAdd(5)); // 5 then 10, not pure

Dış Duruma Bağlılık

Değiştirilebilir dış durumu okumak da saflığı bozar; çünkü bağımsız değişken aynı kalsa bile çıktı değişir.

let rate = 1.5;
function priceImpure(x) {
  return x * rate; // depends on outside variable
}
console.log(priceImpure(10)); // 15
rate = 2;
console.log(priceImpure(10)); // 20 - different result

Saflaştırma

İşlevin ihtiyaç duyduğu her şeyi bağımsız değişken olarak geçirin. Artık sonucu yalnızca girdilere bağlıdır.

function price(x, rate) {
  return x * rate;
}
console.log(price(10, 1.5)); // 15
console.log(price(10, 2));   // 20

Bağımsız Değişkenleri Değiştirmek Saf Değildir

İçine aktarılan bir nesneyi veya diziyi değiştirmek, çağıranın gözlemleyebileceği bir yan etkidir. Saf işlevler girdilerine dokunmadan bırakır.

function impurePush(arr, x) {
  arr.push(x);   // mutates caller array
  return arr;
}
const a = [1, 2];
impurePush(a, 3);
console.log(a); // [1, 2, 3] - caller changed

Yeni Değerler Döndürme

Saf sürüm, girdiyi değiştirmek yerine yeni bir değer oluşturur ve döndürür.

function pureAppend(arr, x) {
  return [...arr, x];
}
const a = [1, 2];
const b = pureAppend(a, 3);
console.log(a); // [1, 2] unchanged
console.log(b); // [1, 2, 3]

Saflık Neden Yararlıdır

Saf işlevleri sınamak çok kolaydır (kurulum veya benzetim gerekmez), önbelleğe almak (sonuçları anımsamak) güvenlidir ve bunları herhangi bir sırayla ya da paralel olarak çalıştırabilirsiniz. Kod hakkında akıl yürütmeyi yerel hâle getirirler.

function square(n) { return n * n; }
console.log([1, 2, 3].map(square)); // [1, 4, 9]

Saf Olmayan Kısmı Yalıtma

Tüm yan etkilerden kaçınamazsınız; uygulamaların günlük kaydı tutması, veri alması ve görüntü oluşturması gerekir. Amaç, etkileri kenarlara taşımak ve temel mantığı saf tutmaktır.

function computeTotal(items) {
  return items.reduce((s, i) => s + i.price, 0);
}
const total = computeTotal([{ price: 5 }, { price: 7 }]);
console.log(total); // 12 - pure core, log at the edge

Gönderimsel Saydamlık

Saf bir çağrı, davranışı değiştirmeden sonucu ile değiştirilebilir. add(2, 3), her yerde 5 ile birbirinin yerine kullanılabilir. Bu özelliğe gönderimsel saydamlık denir.

function add(a, b) { return a + b; }
const x = add(2, 3) + add(2, 3);
const y = 5 + 5;
console.log(x === y); // true

Saf Olmayan Yapıları Fark Etme

Şu ipuçlarına dikkat edin: console, Math.random, Date.now, dış kapsamdaki değişkenlere atama yapılması veya bağımsız değişkenlerin değiştirilmesi. Bunlardan herhangi biri bir işlevi saf olmaktan çıkarır.

function pureRoll(seed) {
  return (seed * 1103515245 + 12345) % 100;
}
console.log(pureRoll(42)); // deterministic, testable

Hızlı Kontrol

Saf işlevleri belirleme.

Özet

Saf işlevler belirlenimlidir ve yan etkilerden arındırılmıştır: dış değişiklik, G/Ç ve bağımsız değişken değişikliği yapmazlar. Bağımlılıkları bağımsız değişken olarak geçirin ve değişiklik yapmak yerine yeni değerler döndürün. Saflık; sınanabilirlik, sonuçları anımsama, gönderimsel saydamlık ve paralel çalıştırma güvenliği sağlar. Temel mantığı saf tutup etkileri kenarlara taşıyın.

Sıkça Sorulan Sorular

“Saf İşlevler ve Yan Etkiler” dersi ücretsiz mi?

Evet — “Saf İşlevler ve Yan Etkiler” 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.

“Saf İşlevler ve Yan Etkiler” dersinde ne öğreneceğim?

Öngörülebilir ve test edilebilir işlevler yazın. 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 1. dersidir.

“Saf İşlevler ve Yan Etkiler” 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. Saf İşlevler ve Yan Etkiler
  2. Bildirimsel Veri Dönüşümü
  3. Değişiklik Yapmaktan Kaçınma
  4. Noktasız Stil
← JavaScript Academy Sayfasına Dön