Functions

Fungsi adalah blok kode yang bisa digunakan ulang untuk melakukan tugas tertentu.

Contoh Masalah

Bagaimana cara membuat kode yang bisa digunakan ulang? Misalnya:

  1. Menghitung luas dan keliling bangun datar
  2. Mengubah format teks
  3. Melakukan validasi data

Penyelesaian

package main

import (
    "fmt"
    "strings"
)

// 1. Fungsi sederhana tanpa parameter dan return
func sayHello() {
    fmt.Println("Hello, Gopher!")
}

// 2. Fungsi dengan parameter
func hitungLuas(panjang, lebar float64) float64 {
    return panjang * lebar
}

// 3. Fungsi dengan multiple return
func hitungLuasKeliling(panjang, lebar float64) (float64, float64) {
    luas := panjang * lebar
    keliling := 2 * (panjang + lebar)
    return luas, keliling
}

// 4. Fungsi dengan named return values
func hitungPersegi(sisi float64) (luas float64, keliling float64) {
    luas = sisi * sisi
    keliling = 4 * sisi
    return // naked return
}

// 5. Fungsi sebagai parameter
func prosesAngka(angka int, fn func(int) int) int {
    return fn(angka)
}

func kuadrat(n int) int {
    return n * n
}

func main() {
    // Memanggil fungsi sederhana
    sayHello()

    // Memanggil fungsi dengan parameter
    fmt.Printf("\nLuas persegi panjang: %.2f\n", 
        hitungLuas(5.0, 3.0))

    // Memanggil fungsi dengan multiple return
    luas, keliling := hitungLuasKeliling(6.0, 4.0)
    fmt.Printf("\nPersegi Panjang 6x4:\n")
    fmt.Printf("Luas: %.2f\n", luas)
    fmt.Printf("Keliling: %.2f\n", keliling)

    // Memanggil fungsi dengan named return
    l, k := hitungPersegi(5.0)
    fmt.Printf("\nPersegi 5x5:\n")
    fmt.Printf("Luas: %.2f\n", l)
    fmt.Printf("Keliling: %.2f\n", k)

    // Menggunakan fungsi sebagai parameter
    hasil := prosesAngka(5, kuadrat)
    fmt.Printf("\nKuadrat dari 5: %d\n", hasil)
}

Penjelasan Kode

  1. Deklarasi Fungsi

    • Format: func nama(parameter) return_type
    • Parameter opsional
    • Return type opsional
  2. Jenis Return

    • Single return: satu nilai
    • Multiple return: beberapa nilai
    • Named return: variabel return dideklarasikan
  3. Parameter Fungsi

    • Bisa kosong
    • Bisa satu atau lebih
    • Tipe sama bisa digabung

Output

Hello, Gopher!

Luas persegi panjang: 15.00

Persegi Panjang 6x4:
Luas: 24.00
Keliling: 20.00

Persegi 5x5:
Luas: 25.00
Keliling: 20.00

Kuadrat dari 5: 25

Tips

  • Buat fungsi yang fokus pada satu tugas
  • Gunakan nama yang jelas dan deskriptif
  • Perhatikan tipe data parameter dan return
  • Dokumentasikan fungsi yang kompleks
  • Fungsi adalah first-class citizen di Go