Fungsi Variadik (...)
Termasuk bagian Logika dan Alur dalam perjalanan Lua di Coddy. Pelajaran 11 dari 54.
Terkadang kamu membutuhkan fungsi yang dapat menerima jumlah argumen berapa pun. Mungkin kamu ingin menghitung jumlah dua angka, atau tiga, atau sepuluh, tanpa menulis fungsi terpisah untuk setiap kasus. Lua menyediakan sintaks khusus untuk ini: tiga titik ...
Ketika kamu menempatkan ... dalam daftar parameter fungsi, fungsi tersebut menjadi fungsi variadik yang menerima argumen sebanyak apa pun:
function sum(...)
-- Isi fungsi
endDi dalam fungsi, kamu bisa mengakses argumen ini dengan menggunakan ... lagi. Agar lebih mudah mengolahnya, kamu bisa mengemasnya ke dalam sebuah tabel menggunakan kurung kurawal:
function sum(...)
local args = {...}
local total = 0
for i = 1, #args do
total = total + args[i]
end
return total
end
print(sum(5, 10, 15)) -- output: 30
print(sum(1, 2, 3, 4, 5)) -- output: 15Ekspresi {...} membuat tabel bergaya list yang berisi semua argumen yang diteruskan ke fungsi. Setelah itu, kamu bisa melakukan perulangan melalui tabel ini seperti tabel lainnya, menggunakan operator panjang # atau ipairs().
Tantangan
MudahTulis fungsi calculateAverage yang menerima sejumlah argumen numerik dan mengembalikan rata-ratanya.
Gunakan sintaks variadik ... untuk menerima jumlah argumen yang fleksibel, memasukkannya ke dalam tabel, menghitung jumlahnya, lalu membaginya dengan banyaknya argumen.
Catatan: Kode awal (yang ditandai "Don't touch this code") membaca angka dari input, mengonversi setiap angka dari teks menjadi angka menggunakan tonumber(), lalu menyimpannya dalam tabel bernama numbers. Pada akhirnya, kode tersebut memanggil fungsimu menggunakan unpack(numbers), yang menyebarkan nilai-nilai tabel sebagai argumen individual, sehingga fungsimu menerimanya sebagai .... Kamu tidak perlu mengubah atau memahami kode ini secara terperinci, cukup fokus menulis calculateAverage.
Logika:
- Masukkan semua argumen ke dalam tabel menggunakan
{...} - Lakukan perulangan melalui tabel untuk menghitung jumlah semua angka
- Bagi jumlahnya dengan banyaknya argumen untuk mendapatkan rata-rata
- Kembalikan rata-rata sebagai angka
Parameter:
...(angka): Jumlah argumen numerik yang bervariasi
Nilai yang dikembalikan: Rata-rata dari semua angka yang diberikan (angka)
Coba sendiri
-- Jangan ubah kode ini --
local numbers = {}
while true do
local input = io.read()
if input == nil or input == "" then
break
end
local num = tonumber(input)
if num then
table.insert(numbers, num)
end
end
-------------------------
function calculateAverage(...)
-- Tulis kodemu di sini
end
local average = calculateAverage(unpack(numbers))
print("Average: " .. average)
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