JavaScript'te Pure Functions, Side Effects, State Mutation, Event Propagation

Pure Functions (Saf Fonksiyonlar)

Saf fonksiyonlar, herhangi bir yan etkiye (side effect) neden olmayan ve aynı girdilere (inputs) her zaman aynı çıktıyı (output) üreten fonksiyonlardır. Saf fonksiyonlar, programın daha okunabilir, test edilebilir ve öngörülebilir olmasını sağlar.

Örneğin:

// Pure Function
function double(x) {
  return x * 2;
}

let sayi = 3;
let sonuc = double(sayi); // Bu her zaman 6 olacaktır

Side Effects (Yan Etkiler)

Yan etkiler, bir fonksiyonun dışındaki değişkenleri veya durumu doğrudan değiştirmesine neden olan işlemlerdir. Bu, programın beklenmeyen sonuçlar vermesine ve hata ayıklamasını zorlaştırabilir.

Örneğin:

let sonuc = 0;

// Yan Etki Oluşturan Fonksiyon
function topla(x) {
  sonuc += x;
}

topla(5);
console.log(sonuc); // Beklenmeyen şekilde sonuc 5 olabilir

State Mutation (Durum Değişimi)

Durum değişimi, bir değişkenin değerini doğrudan değiştirmeyi ifade eder. Bu tür durum değişiklikleri, programın beklenmeyen sonuçlar üretmesine ve kodun karmaşık hale gelmesine neden olabilir.

Örneğin:

let sayi = 10;

// Durum Değişimi
sayi = sayi + 5;
console.log(sayi); // Sonuç 15 olacaktır

Event Propagation (Olay Yayılması)

Olay yayılması, bir HTML öğesinde gerçekleşen bir olayın, öğe ağacındaki üst öğelere doğru yayılmasıdır. Bu, olay dinleyicilerinin (event listeners) üst öğelerden aşağıya doğru sırasıyla tetiklenmesine olanak tanır. Bu kavram genellikle DOM (Document Object Model) etkinliklerinde kullanılır.

Örneğin:

<div id="parent">
  <button id="child">Click Me</button>
</div>

<script>
document.getElementById('parent').addEventListener('click', function() {
  console.log('Parent clicked');
});

document.getElementById('child').addEventListener('click', function() {
  console.log('Child clicked');
});
</script>

Bu şekilde, önce çocuk öğenin olayı ele alınır, ardından olay yukarı doğru parent öğelere yayılır ve parent öğesinin olayı ele almasını sağlar.

Sonuç

JavaScript'te saf fonksiyonlar programları daha öngörülebilir ve test edilebilir hale getirirken, yan etkiler, durum değişimi ve olay yayılması gibi kavramlar programın karmaşıklığını artırabilir. Bu kavramları anlamak, daha sağlam ve etkili JavaScript kodları yazmanıza yardımcı olabilir.