package main

import "fmt"

// naikkanSalin menerima salinan nilai angka; perubahan tidak terlihat pemanggil.
func naikkanSalin(angka int) {
	angka = angka + 10
	fmt.Println("Di dalam naikkanSalin:", angka)
}

// naikkanPointer menerima alamat variabel lalu mengubah isi variabel aslinya.
func naikkanPointer(angka *int) {
	*angka = *angka + 10
}

// ubahElemen mengubah elemen slice; perubahan terlihat oleh pemanggil.
func ubahElemen(buah []string) {
	buah[0] = "jeruk"
}

// tambahElemen melakukan append pada salinan header slice.
// Perubahan panjang tidak terlihat oleh pemanggil.
func tambahElemen(buah []string) {
	buah = append(buah, "mangga")
	fmt.Println("Di dalam tambahElemen:", len(buah))
}

func main() {
	skor := 5
	naikkanSalin(skor)
	fmt.Println("Skor pemanggil:", skor)

	naikkanPointer(&skor)
	fmt.Println("Skor setelah naikkanPointer:", skor)

	daftar := []string{"apel", "pisang"}
	ubahElemen(daftar)
	fmt.Println("Setelah ubahElemen:", daftar)

	tambahElemen(daftar)
	fmt.Println("Setelah tambahElemen:", daftar)
}
