package main

import "fmt"

// nilaiDefault dipakai saat callback tidak diisi.
func nilaiDefault() int {
	return 42
}

// tujuh adalah contoh fungsi konkrit yang siap dipakai sebagai callback.
func tujuh() int {
	return 7
}

// jalankan menjalankan f dengan aman: nilai nil diganti nilaiDefault.
func jalankan(f func() int) int {
	if f == nil {
		fmt.Println("f bernilai nil, memakai fungsi bawaan")
		return nilaiDefault()
	}
	return f()
}

func main() {
	var f func() int // zero value function adalah nil.
	fmt.Println("f == nil:", f == nil)
	fmt.Printf("Tipe f: %T\n", f)

	fmt.Println("jalankan(nil) =", jalankan(nil))
	fmt.Println("jalankan(tujuh) =", jalankan(tujuh))
}
