Katmanya · Bestiyer

Çevirgen Solucan

function

Toprak kırmızısı, halkalı, tombul bir solucan. Kamburunu kemer gibi kaldırır: ağzı girdiyi alır, kuyruğundan sonuç çıkar.

İki anlatım

Başlangıç

Çevirgen Solucan’ın ağzına bir şey verirsin, kuyruğundan başka bir şey çıkar. Ona iki sayı verirsen toplamını, bir kelime verirsen büyük harfli halini çıkaran solucanlar var.

Solucan verdiğin şeyi yemez, yalnızca tadına bakar. Verdiğin şey yerinde kalır, kuyruktan yeni bir şey çıkar.

Solucan sen çağırana kadar uyur. Her çağırışında aynı işi baştan yapar.

Bazı solucanlar yürürken arkasında çamur izi bırakır, yani etraftaki bir şeyi değiştirir. Hiç iz bırakmayanlara saf solucan deriz.

İleri

Çevirgen Solucan bir fonksiyondur: aldığı girdilerle bir iş yapan ve bir sonuç döndüren, çoğu zaman bir ad verilen tarif.

Ne yapar

  • Çağrılınca çalışır. Tanımlamak çağırmak değildir: uyuyan solucan iş yapmaz.
  • Girdileri (argüman) alır, tek bir sonuç döndürür (return).
  • Saf solucan aynı girdiye her seferinde aynı sonucu verir, dışarıda iz bırakmaz.
  • Çamur izli solucan (yan etki) dışarıdaki bir değişkeni değiştirir, ekrana yazar, ağdan bir şey ister ya da kendisine verilen nesneyi değiştirir.

Ne yapamaz

  • Aynı anda iki sonuç döndüremez. İki şey gerekiyorsa onları bir dizi ya da nesne içine koyup tek sonuç olarak verir.
  • return dedikten sonra o çağrıda başka satır çalıştırmaz. Tek istisna finally bloğudur.
  • Sonuç döndürmeyi unutursa kuyruğundan Gelmeyen Hayalet (undefined) çıkar.
  • Saf bir solucan zarı, saati ya da dışarıdaki değişen bir değeri okuyamaz. Okursa artık saf değildir, çünkü aynı girdiye farklı sonuç verebilir.

Kod karşılığı

const ikiKati = (x) => x * 2;          // saf: iz yok
let sayac = 0;
function say(x) { sayac++; return x; } // çamur izi: sayac değişti
ikiKati(4);                            // → 8, her seferinde
(function () {})();                    // → undefined

İleri kurallar

  • Fonksiyon JavaScript’te bir değerdir: değişkene konur, başka bir fonksiyona girdi olarak verilir (callback), sonuç olarak döndürülür. typeof sonucu "function".
  • Sayı, metin gibi ilkel değerler fonksiyona kopya olarak gider. Nesne ve dizide fonksiyon aynı nesneye erişir: içini değiştirirse çağıranın nesnesi de değişir. Bu da bir çamur izidir.
  • Parametreye yeni bir nesne atamak ise çağıranın değişkenini değiştirmez. Solucan sana verilen kaplumbağanın çekmecesini değiştirebilir, senin elindeki adı başka bir kaplumbağaya çeviremez.
  • console.log da bir yan etkidir. Saf fonksiyonlar test etmesi en kolay olanlardır.

Nerede kırılır

  • “Yemek” kelimesi. “Solucan yediğini dönüştürür” demek girdinin tükendiğini düşündürür. Fonksiyon girdisini yok etmez. Bu yüzden solucan yemi yutmaz, tadına bakar: yem yerinde kalır, kuyruktan yeni bir şey çıkar.
  • Canlılık. Solucan istemez, seçmez. Aynı girdiye farklı sonuç veriyorsa sebep dışarıdaki bir şeydir, solucanın keyfi değil.
  • Çamur izi her zaman görünmez. Gerçek yan etkiler çoğu zaman gözle görülmez. Ancak çağrıdan önce ve sonra dünyaya bakınca anlaşılır.
Model sayfası: üç poz, üç ifade.
İlk göründüğü masal Solucanın çantası İlk göründüğü masal Script yerini bilir mi?

Nerede yaşar

Motor Dairesi’nde. Tarifin kendisi bir değerdir, Öbek’te durur. Çağrılınca çağrı yığınının tepesine bir kayıt çıkar, iş bitince iner.

Öbek ve yığının gövdesi derinde, Bellek Ovası’ndaki işaretlerdir. Motor Dairesi yalnızca tarayıcıda değil, Çarşı’daki Node.js gibi başka dükkânlarda da vardır.

Akrabaları