package main

import "fmt"

// proses menjalankan fungsi transformasi terhadap setiap elemen data.
func proses(data []int, transform func(int) int) []int {
	hasil := make([]int, 0, len(data))
	for _, v := range data {
		hasil = append(hasil, transform(v))
	}
	return hasil
}

func main() {
	// Anonymous function disimpan dalam variabel.
	kuadrat := func(x int) int {
		return x * x
	}
	fmt.Println("kuadrat(6) =", kuadrat(6))

	// IIFE: anonymous function langsung dipanggil tanpa nama.
	func() {
		fmt.Println("Halo dari fungsi tanpa nama")
	}()

	// Anonymous function berparameter langsung dipanggil.
	hasil := func(a, b int) int {
		return a*b + 10
	}(4, 5)
	fmt.Println("hasil =", hasil)

	// Anonymous function dikirim sebagai argumen.
	bilangan := []int{3, 8, 2}
	dobel := proses(bilangan, func(v int) int { return v * 2 })
	fmt.Println("dobel =", dobel)
}
