Pelajaran modul (3/5)
Fungsi variadik
Fungsi variadik menerima sejumlah argumen yang berubah-ubah
tipe yang sama. Anda mendeklarasikannya dengan meletakkan ... sebelum tipe yang terakhir
parameter. Di dalam fungsi, parameternya adalah slice.
Pernyataan
func sum(nums ...int) int {
tot := 0
for _, n := range nums {
tot += n
}
return tot
}
sum() // 0 (nums = []int{})
sum(1) // 1
sum(1, 2, 3, 4) // 10Hanya parameter last yang dapat bersifat variadik:
func log(prefix string, values ...any) { ... } // ok
// func wrong(...int, suffix string) {} // ERROREMenyebarkan sepotong
Jika Anda sudah memiliki sepotong, Anda bisa meneruskannya ke fungsi variadik dengan
...:
nums := []int{1, 2, 3}
sum(nums...) // 6 — espande lo slice nei singoli argomentiTanda "..." muncul setelah irisan. Tanpa spread Anda akan mendapatkan tipe
kesalahan: Anda akan meneruskan []int di mana fungsi mengharapkan urutan
dari int.
nums adalah sebuah irisan, bukan wadah baru
Di dalam fungsi nums memiliki tipe []int. Semua irisan standar
pekerjaan operasi: len(nums), nums[0], range, dll.
Kasus penggunaan klasik: fmt.Println
Semua fungsi Print* Print* bersifat variadik:
// signature (semplificata):
// func Println(a ...any) (n int, err error)
fmt.Println("ciao", 42, true)
args := []any{"a", "b", "c"}
fmt.Println(args...)Cobalah
Definisikan sum(nums ...int) int yang mengembalikan jumlah semua argumen.
Tunjukkan petunjuk
Di dalam fungsi `nums` memiliki tipe `[]int`.
Solusi tersedia setelah 3 upaya
Panggil fungsi penjumlahan yang ada dengan meneruskan angka irisan dengan spread `angka...`.
Tunjukkan petunjuk
Tanda `...` muncul SETELAH nama irisan.
Solusi tersedia setelah 3 upaya
Di dalam `func f(args ...string)`, tipe apa yang `args`?
func f(args ...string) {
_ = args
}Rekap
...Tsebagai parameter TERAKHIR = fungsi variadik; di dalamnya ada[]T.- Dipanggil dengan nilai tunggal: kompiler mengumpulkannya menjadi sebuah irisan.
- Dipanggil dengan irisan yang sudah ada:
slice...(menyebar, menggunakan kembali irisan tersebut). - Semua fungsi
fmt.Print*bersifat variadik. - Hanya parameter terakhir yang dapat bersifat variadik.