Menu
CoddyTech

Apa Itu Closure?

Termasuk bagian Logika dan Alur dalam perjalanan Lua di Coddy. Pelajaran 14 dari 54.

Kamu telah mempelajari bahwa fungsi dapat disimpan dalam variabel, diteruskan sebagai argumen, dan dikembalikan oleh fungsi lain. Sekarang kita akan menjelajahi salah satu konsekuensi paling hebat dari hal ini: closure.

Closure terjadi ketika fungsi bersarang "mengingat" variabel lokal dari fungsi yang membungkusnya, bahkan setelah fungsi luar tersebut selesai dijalankan. Awalnya, ini mungkin terdengar aneh: bagaimana sebuah variabel masih bisa ada setelah fungsi yang membuatnya selesai?

Berikut contoh sederhana yang menunjukkan konsep ini:

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

local counter = createCounter()
print(counter())  -- output: 1
print(counter())  -- output: 2
print(counter())  -- output: 3

Saat createCounter() dipanggil, fungsi ini membuat variabel lokal count dan mengembalikan fungsi anonim. Biasanya, kamu mungkin mengira count akan menghilang setelah createCounter() selesai. Namun, fungsi yang dikembalikan tetap dapat mengakses count. Fungsi itu mempertahankan akses ke variabel tersebut.

Setiap kali kamu memanggil counter(), fungsi ini mengakses dan mengubah variabel count yang sama, yang dibuat saat createCounter() pertama kali dijalankan. Fungsi bagian dalam membawa lingkungannya, sehingga mempertahankan status di antara pemanggilan.

challenge icon

Tantangan

Mudah

Tulis fungsi createMultiplier yang membuat fungsi pengali dengan faktor tertentu, lalu langsung menggunakannya untuk mengalikan angka yang diberikan.

Logika:

  • Buat fungsi bersarang di dalam createMultiplier yang menerima parameter angka
  • Fungsi bersarang tersebut harus mengalikan parameternya dengan factor dari fungsi luar
  • Fungsi bersarang tersebut akan membentuk closure yang mengingat nilai factor
  • Panggil fungsi pengali dengan parameter number dan kembalikan hasilnya

Parameter:

  • factor (angka): Nilai pengali
  • number (angka): Angka yang akan dikalikan

Nilai Kembalian:

  • Hasil perkalian number dengan factor (angka)

Coba sendiri

function createMultiplier(factor, number)
    local multiply = function(x)
        return x * factor
    end
    
    -- Gunakan fungsi multiply di bawah ini

end
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Logika dan Alur

Latihan sendiri: Compiler Lua online