Fungsi Anonim
Termasuk bagian Logika dan Alur dalam perjalanan Lua di Coddy. Pelajaran 13 dari 54.
Sekarang kamu memahami bahwa fungsi dapat disimpan dalam variabel dan diteruskan, ada cara yang lebih ringkas untuk menulisnya. Daripada selalu memberi nama pada fungsi, kamu dapat membuatnya langsung di tempat yang kamu perlukan. Fungsi ini disebut fungsi anonim.
Fungsi anonim adalah fungsi tanpa nama. Kamu mendefinisikannya dengan menggunakan kata kunci function, yang langsung diikuti parameter dan isi fungsi:
function(a, b)
return a + b
endIni membuat nilai fungsi yang bisa langsung digunakan. Fungsi anonim sangat berguna saat meneruskan fungsi sebagai argumen ke fungsi lain. Ingat contoh pengurutan kustom sebelumnya? Berikut tampilannya dengan fungsi anonim:
local players = {
{name = "Alice", score = 150},
{name = "Bob", score = 200},
{name = "Charlie", score = 175}
}
table.sort(players, function(a, b)
return a.score > b.score
end)Alih-alih mendefinisikan fungsi terpisah dengan nama untuk perbandingan, fungsi dibuat langsung sebagai argumen kedua untuk table.sort(). Ini membuat kode lebih ringkas dan menjaga logika pengurutan tepat di tempat penggunaannya.
Tantangan
MudahTulis fungsi filterByThreshold yang menerima numbers dan threshold, lalu mengembalikan tabel baru yang hanya berisi angka yang lebih besar dari threshold.
Editor sudah memiliki fungsi pembantu, filter(list, keep): fungsi ini memanggil keep(value) untuk setiap nilai dan mengembalikan tabel baru yang berisi nilai-nilai yang membuat keep mengembalikan true. Panggil filter dan berikan pemeriksaannya sebagai fungsi anonim yang ditulis langsung dalam pemanggilan, seperti saat pelajaran memberikan fungsi ke table.sort(). Jangan simpan pemeriksaan itu dalam variabel atau memberinya nama.
Parameter:
numbers(table): Tabel bergaya list yang berisi nilai numerikthreshold(number): Nilai minimum (eksklusif) untuk penyaringan
Nilai kembalian: Tabel yang hanya berisi angka yang lebih besar dari threshold (table)
Coba sendiri
local function filter(list, keep)
local result = {}
for _, value in ipairs(list) do
if keep(value) then
table.insert(result, value)
end
end
return result
end
function filterByThreshold(numbers, threshold)
-- Tulis kodemu di sini
end
Pelajaran 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