Menu
Coddy logo textTech

Closure Nedir?

Coddy'nin Lua Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 14 / 54.

Fonksiyonların değişkenlerde saklanabildiğini, bağımsız değişken olarak geçirilebildiğini ve diğer fonksiyonlardan döndürülebildiğini öğrendin. Şimdi bunun en güçlü sonuçlarından birini, closure’ları inceleyeceğiz.

Bir closure, iç içe geçmiş bir fonksiyonun, dışındaki fonksiyonun yerel değişkenlerini, dıştaki fonksiyonun çalışmasını tamamlamasından sonra bile “hatırlaması” durumunda ortaya çıkar. Bu ilk başta kulağa tuhaf gelebilir: Onu oluşturan fonksiyon tamamlandıktan sonra bir değişken nasıl hâlâ var olabilir?

İşte bu kavramı gösteren basit bir örnek:

function createCounter()
    local count = 0
    
    return function()
        count = count + 1
        return count
    end
end

local counter = createCounter()
print(counter())  -- Çıktı: 1
print(counter())  -- Çıktı: 2
print(counter())  -- Çıktı: 3

createCounter() çağrıldığında yerel bir count değişkeni oluşturur ve anonim bir işlev döndürür. Normalde, createCounter() tamamlandığında count değişkeninin ortadan kalkmasını beklersiniz. Ancak döndürülen işlev hâlâ count değişkenine erişebilir. Bu işlev, söz konusu değişkeni “kapsar”.

counter() işlevini her çağırdığınızda, createCounter() ilk kez çalıştırıldığında oluşturulan aynı count değişkenine erişir ve onu değiştirir. İç işlev, ortamını beraberinde taşır ve çağrılar arasındaki durumu korur.

challenge icon

Görev

Kolay

Belirli bir çarpanla çarpan bir işlev oluşturan ve ardından bunu verilen bir sayıyı çarpmak için hemen kullanan createMultiplier işlevini yazın.

Mantık:

  • createMultiplier içinde bir sayı parametresi alan iç içe bir işlev oluşturun
  • İç içe işlev, parametresini dış işlevdeki factor ile çarpmalıdır
  • İç içe işlev, factor değerini hatırlayan bir kapanım oluşturur
  • Çarpan işlevini number parametresiyle çağırın ve sonucu döndürün

Parametreler:

  • factor (number): Çarpan değeri
  • number (number): Çarpılacak sayı

Döndürür:

  • number ile factor değerinin çarpılmasının sonucu (number)

Kendin dene

function createMultiplier(factor, number)
    local multiply = function(x)
        return x * factor
    end
    
    -- Aşağıda multiply fonksiyonunu kullan

end
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Mantık ve Akış bölümündeki tüm dersler

Kendi başına pratik yap: Online Lua derleyicisi