Lewati ke isi

Pertemuan 5: Function dan Error Handling

Seiring membesarnya aplikasi, kita tidak mungkin menumpuk semua kode di dalam func main(). Kita harus memecahnya menjadi potongan-potongan kecil yang bisa digunakan berulang kali.

1. Function (Fungsi)

Function adalah blok kode yang diberi nama dan dibuat untuk melakukan tugas spesifik.

A. Fungsi Dasar & Parameter:

package main
import "fmt"

// Fungsi yang menerima data (parameter)
func sapaUser(nama string) {
    fmt.Printf("Halo, %s! Selamat datang kembali.\n", nama)
}

func main() {
    sapaUser("Rangga") // Memanggil fungsi
}

B. Multiple Return Values (Keunikan Golang):
Di bahasa lain, fungsi biasanya hanya bisa mengembalikan 1 nilai. Di Go, fungsi bisa mengembalikan 2 nilai atau lebih sekaligus. Ini sangat berguna!

func hitungLuasKeliling(p, l int) (int, int) {
    luas := p * l
    keliling := 2 * (p + l)
    return luas, keliling
}

func main() {
    // Menangkap 2 nilai sekaligus
    hasilLuas, hasilKeliling := hitungLuasKeliling(10, 5)
    fmt.Println("Luas:", hasilLuas, "Keliling:", hasilKeliling)
}

2. Error Handling (Cara Golang)

Golang tidak menggunakan try-catch seperti Java atau PHP. Di Go, Error diperlakukan sebagai sebuah nilai biasa yang dikembalikan oleh fungsi.

import (
    "errors"
    "fmt"
)

// Mengembalikan hasil pembagian DAN error (jika ada)
func bagiAngka(a, b int) (int, error) {
    if b == 0 {
        return 0, errors.New("gagal: tidak bisa membagi dengan angka nol")
    }
    return a / b, nil // nil berarti "Kosong" (Tidak ada error)
}

func main() {
    hasil, err := bagiAngka(10, 0)

    // Pola Wajib Golang: Cek apakah error tidak kosong (!= nil)
    if err != nil {
        fmt.Println("Terjadi Kesalahan:", err.Error())
        return // Hentikan proses
    }

    fmt.Println("Hasil pembagian:", hasil)
}

Tugas Mandiri (Studi Kasus: E-Wallet)

Tantangan: "Sistem Pembayaran E-Wallet Sederhana"
Buatlah sebuah program Go dengan ketentuan:
1. Buat folder dan inisialisasi module baru bernama tugas-ewallet.
2. Buat sebuah fungsi bernama bayarTagihan dengan parameter:
- saldo - jumlahTagihan (bertipe integer biasa int)
- Mengembalikan tipe data error.
3. Di dalam fungsi bayarTagihan:
- Jika *saldo kurang dari jumlahTagihan, kembalikan error dengan pesan "Saldo tidak mencukupi!".
- Jika cukup, kurangi *saldo dengan jumlahTagihan, lalu kembalikan nil (tidak ada error).
4. Di dalam func main():
- Buat variabel saldoUtama sebesar 50.000.
- Coba lakukan pembayaran pertama sebesar 30.000 menggunakan fungsi bayarTagihan(&saldoUtama, 30000). Cek errornya, jika sukses tampilkan sisa saldo.
- Coba lakukan pembayaran kedua sebesar 25.000. Cek errornya. Karena saldo sisa 20.000, harusnya pembayaran ini gagal dan menampilkan pesan error.

Output yang Diharapkan:

=== TRANSAKSI 1 (Rp. 30.000) ===
Pembayaran Berhasil! Sisa Saldo: Rp. 20000

=== TRANSAKSI 2 (Rp. 25.000) ===
Pembayaran Gagal: Saldo tidak mencukupi!
Sisa Saldo Akhir: Rp. 20000