Menu
CoddyTech

Fungsi Variadik

Termasuk bagian Pengantar Luau dalam perjalanan Lua di Coddy. Pelajaran 27 dari 73.

Kamu telah menggunakan ... (varargs) Lua untuk menulis fungsi yang menerima argumen sebanyak apa pun. Luau memungkinkan kamu memberi tipe pada varargs, sehingga setiap argumen yang masuk akan diperiksa:

function sum(...: number): number
    local total = 0
    for _, n in ipairs({...}) do
        total = total + n
    end
    return total
end

print(sum(1, 2))           -- 3
print(sum(1, 2, 3, 4, 5))  -- 15

...: number menyatakan bahwa setiap argumen tambahan harus berupa angka: sum(1, "two") akan menyebabkan error tipe. Alat runtime yang digunakan adalah yang sudah kamu kenal:

  • {...} mengumpulkan varargs ke dalam array (di sini, sebuah {number})
  • select("#", ...) menghitung jumlah argumen yang diterima
  • ... dapat langsung diteruskan ke fungsi lain, misalnya math.max(...)

Seperti di Lua, ... harus menjadi parameter terakhir: parameter biasa (yang bertipe) diletakkan lebih dahulu, lalu bagian variadik mengumpulkan sisanya:

function joinWords(separator: string, ...: string): string
    return table.concat({...}, separator)
end

print(joinWords("-", "a", "b", "c"))  -- a-b-c
challenge icon

Tantangan

Mudah

Buat fungsi bernama sumAll yang menerima sejumlah argumen number (...: number) dan mengembalikan jumlahnya sebagai number.

Buat fungsi bernama countValues yang menerima sejumlah argumen string dan mengembalikan berapa banyak argumen yang diberikan, sebagai number: gunakan select("#", ...).

Buat fungsi bernama joinWords yang menerima separator: string wajib diikuti sejumlah argumen string, lalu mengembalikan semua argumen yang digabungkan dengan pemisah tersebut (gunakan table.concat pada {...}): tipe pengembaliannya string.

Panggil dan cetak setiap pemanggilan pada barisnya sendiri:

  1. sumAll(5, 10, 15)
  2. sumAll(1, 2, 3, 4, 5)
  3. countValues("a", "b", "c", "d")
  4. joinWords("-", "apple", "banana", "cherry")
  5. joinWords(" | ", "red", "green", "blue")

Coba sendiri

-- Tulis kodemu di sini
-- sumAll(...: number): number       -- lakukan perulangan pada {...}
-- countValues(...: string): number  -- select("#", ...)
-- joinWords(separator: string, ...: string): string
-- lalu cetak kelima hasilnya
quiz iconUji dirimu

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

Semua pelajaran di Pengantar Luau

Latihan sendiri: Compiler Luau online