package main

import "fmt"

// inisialisasiState memvalidasi invariant sebelum dipakai.
func inisialisasiState(state map[string]int) {
	defer func() {
		if r := recover(); r != nil {
			fmt.Println("panic ditangkap:", r)
		}
	}()
	if state == nil {
		panic("state belum diinisialisasi")
	}
	fmt.Println("state siap, jumlah kunci:", len(state))
}

// bagi mengembalikan hasil pembagian, atau menangkap panic pembagi nol.
func bagi(pembilang, pembagi int) (hasil int, tertangkap bool) {
	defer func() {
		if recover() != nil {
			tertangkap = true
		}
	}()
	return pembilang / pembagi, false
}

func main() {
	inisialisasiState(map[string]int{"stok": 12})
	inisialisasiState(nil)

	hasil, tertangkap := bagi(100, 4)
	fmt.Println("hasil:", hasil, "tertangkap:", tertangkap)

	hasil, tertangkap = bagi(100, 0)
	fmt.Println("hasil:", hasil, "tertangkap:", tertangkap)

	fmt.Println("program tetap berjalan sampai baris ini")
}
