Variadic Functions
Fungsi variadic adalah fungsi yang bisa menerima jumlah parameter yang tidak tetap (variabel).
Contoh Masalah
Bagaimana cara membuat fungsi yang bisa menerima jumlah parameter yang berbeda-beda? Misalnya:
- Menjumlahkan beberapa angka
- Menggabungkan beberapa string
- Mencari nilai maksimum dari beberapa angka
Penyelesaian
package main
import (
"fmt"
"strings"
)
// 1. Fungsi untuk menjumlahkan beberapa angka
func sum(numbers ...int) int {
total := 0
for _, num := range numbers {
total += num
}
return total
}
// 2. Fungsi untuk menggabungkan string dengan pemisah
func join(separator string, texts ...string) string {
return strings.Join(texts, separator)
}
// 3. Fungsi untuk mencari nilai maksimum
func max(first int, rest ...int) int {
maxNum := first
for _, num := range rest {
if num > maxNum {
maxNum = num
}
}
return maxNum
}
// 4. Fungsi dengan parameter normal dan variadic
func greeting(prefix string, names ...string) {
for _, name := range names {
fmt.Printf("%s %s\n", prefix, name)
}
}
func main() {
// Contoh 1: Penjumlahan
fmt.Println("Sum(1, 2, 3):", sum(1, 2, 3))
fmt.Println("Sum(5, 10, 15, 20):", sum(5, 10, 15, 20))
// Menggunakan slice sebagai parameter
numbers := []int{1, 2, 3, 4, 5}
fmt.Println("Sum(numbers...):", sum(numbers...))
// Contoh 2: Penggabungan string
fmt.Println("\nJoin dengan koma:",
join(", ", "apple", "banana", "orange"))
fmt.Println("Join dengan spasi:",
join(" ", "Hello", "World", "!"))
// Contoh 3: Nilai maksimum
fmt.Println("\nMax(1, 2, 3, 4):", max(1, 2, 3, 4))
fmt.Println("Max(10, 5, 8, 12, 3):", max(10, 5, 8, 12, 3))
// Contoh 4: Greeting
fmt.Println("\nGreeting:")
greeting("Hello", "Alice", "Bob", "Charlie")
// Menggunakan slice untuk greeting
names := []string{"David", "Eve", "Frank"}
greeting("Hi", names...)
}
Penjelasan Kode
Parameter Variadic
- Menggunakan
...sebelum tipe - Harus di akhir parameter
- Diterima sebagai slice
- Menggunakan
Menggunakan Slice
- Bisa passing slice dengan
... - Slice harus sesuai tipe
- Bisa passing slice dengan
Kombinasi Parameter
- Bisa gabung dengan parameter normal
- Variadic harus terakhir
Output
Sum(1, 2, 3): 6
Sum(5, 10, 15, 20): 50
Sum(numbers...): 15
Join dengan koma: apple, banana, orange
Join dengan spasi: Hello World !
Max(1, 2, 3, 4): 4
Max(10, 5, 8, 12, 3): 12
Greeting:
Hello Alice
Hello Bob
Hello Charlie
Hi David
Hi Eve
Hi Frank
Tips
- Gunakan untuk parameter dengan jumlah tidak tetap
- Parameter variadic harus di akhir
- Perhatikan performa saat menggunakan slice besar
- Dokumentasikan penggunaan yang valid
- Bisa kombinasikan dengan parameter normal