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: 3Saat 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.
Tantangan
MudahTulis fungsi createMultiplier yang membuat fungsi pengali dengan faktor tertentu, lalu langsung menggunakannya untuk mengalikan angka yang diberikan.
Logika:
- Buat fungsi bersarang di dalam
createMultiplieryang menerima parameter angka - Fungsi bersarang tersebut harus mengalikan parameternya dengan
factordari fungsi luar - Fungsi bersarang tersebut akan membentuk closure yang mengingat nilai
factor - Panggil fungsi pengali dengan parameter
numberdan kembalikan hasilnya
Parameter:
factor(angka): Nilai pengalinumber(angka): Angka yang akan dikalikan
Nilai Kembalian:
- Hasil perkalian
numberdenganfactor(angka)
Coba sendiri
function createMultiplier(factor, number)
local multiply = function(x)
return x * factor
end
-- Gunakan fungsi multiply di bawah ini
endPelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Logika dan Alur
1Iterasi Tabel Tingkat Lanjut
Iterasi dengan pairs()Iterasi dengan ipairs()pairs() vs. ipairs()Rangkuman: Lembar Karakter2Fungsi library tabel Lainnya
table.concat()Pembuatan tabel & unpack()table.sort()Pengurutan Kustom dengan FungsiRangkuman, Papan Skor Tertinggi3Konsep Fungsi Tingkat Lanjut
Mengembalikan Beberapa NilaiFungsi Variadik (...)Fungsi sebagai Nilai Kelas SatuFungsi AnonimApa Itu Closure?Ulasan: Penangan Event SederhanaLatihan sendiri: Compiler Lua online