Go From Zero to Hero #11: Mengenal Fungsi (Function) di Go — Cara Membuat Kode Lebih Clean dan Reusable

Go From Zero to Hero #11: Mengenal Fungsi (Function) di Go — Cara Membuat Kode Lebih Clean dan Reusable

Table of Contents

Halo Go Developers! Selamat datang kembali di seri Go From Zero to Hero.

Di artikel kesepuluh kemarin, kita sudah berhasil menantang diri kita dengan menaklukkan logika bertingkat (Nested Loop). Kita belajar bagaimana sebuah perulangan bisa berjalan di dalam perulangan lainnya untuk memecahkan kasus-kasus yang kompleks. Logika berpikirmu pasti sudah jauh lebih tajam sekarang!

Nah, seiring dengan semakin kompleksnya program yang kita buat, pernah gak sih kamu merasa capek karena harus menulis kode yang sama berulang-ulang? Misalnya, kamu butuh menghitung luas lingkaran di baris ke-10, lalu di baris ke-50 kamu harus menulis rumus yang sama lagi.

Kalau kodemu masih ditulis seperti itu, selamat! Kamu sedang membuat sebuah maha karya yang biasa disebut para programmer sebagai “Spaghetti Code”—kode yang ruwet, panjang, saling melilit, dan bikin pusing tujuh keliling saat mau diperbaiki.

Di artikel kesebelas ini, kita akan belajar cara menyembuhkan penyakit Spaghetti Code tersebut menggunakan Fungsi (Function). Ini adalah gerbang awalmu untuk masuk ke dunia clean code dan pemrograman modular!

Sudah siap merapikan kodemu agar terlihat seperti pro? Yuk, siapkan teks editor favoritmu, ambil posisi duduk paling nyaman, dan mari kita mulai!


Apa itu Fungsi (Function)?

Sederhananya, bayangkan fungsi sebagai sebuah robot dapur otomatis.

  1. Kamu masukkan bahan makanan (Input / Parameter).
  2. Si robot melakukan tugasnya di dalam mesin (proses memotong atau memasak).
  3. Robot memberikan makanan yang sudah jadi kepadamu (Output / Return Value).

Hebatnya, kamu bisa menyuruh robot ini bekerja kapan saja hanya dengan memanggil namanya, tanpa perlu tahu atau menulis ulang bagaimana cara detail dia memotong sayur di dalam mesinnya setiap kali bekerja.

Di dalam Go-lang, fungsi dideklarasikan menggunakan kata kunci func. Mari kita bedah cara menggunakannya!


1. Anatomi Fungsi Paling Dasar di Go

Mari kita mulai dari yang paling sederhana: fungsi tanpa input (parameter) dan tanpa output (return value).

package main

import "fmt"

// 1. Deklarasi fungsi bernama "sapaMahasiswa"
func sapaMahasiswa() {
    fmt.Println("Halo! Selamat belajar Alpro 2, tetap semangat ya!")
}

func main() {
    // 2. Memanggil fungsi di dalam main
    sapaMahasiswa()
    sapaMahasiswa() // Bisa dipanggil berkali-kali!
}

Info

Aturan Penamaan Fungsi di Go: Nama fungsi di Go sebaiknya menggunakan gaya camelCase (misal: hitungLuas, cetakHasil). Jika nama fungsi diawali dengan huruf besar (misal: SapaMahasiswa), artinya fungsi tersebut bisa diakses oleh package lain (Exported).

2. Menggunakan Parameter (Input Data)

Fungsi akan jauh lebih berguna jika bisa menerima data untuk diolah. Data yang dimasukkan ke dalam fungsi ini disebut Parameter.

package main

import "fmt"

// Fungsi ini menerima parameter "nama" (string) dan "umur" (int)
func perkenalan(nama string, umur int) {
    fmt.Printf("Halo, nama saya %s dan saya berumur %d tahun.\n", nama, umur)
}

func main() {
    // Memanggil fungsi dengan mengirimkan nilai (argumen)
    perkenalan("Budi", 19)
    perkenalan("Siti", 20)
}

💡 Trik Hemat Ketik di Go-lang Jika beberapa parameter yang bersebelahan memiliki tipe data yang sama, kamu tidak perlu menulis tipe datanya berulang-ulang. Cukup tulis di bagian akhir saja:

// Daripada menulis panjang seperti ini:
func tambah(a int, b int, c int)

// Lebih baik tulis singkat seperti ini (Go style):
func tambah(a, b, c int)

3. Mengembalikan Nilai (Return Value)

Sebuah fungsi tidak hanya bertugas mencetak teks ke layar terminal, tetapi sering kali harus mengembalikan sebuah nilai hasil perhitungan agar bisa diolah lebih lanjut oleh baris kode lainnya.

Untuk mengembalikan nilai, kita harus mendefinisikan tipe data kembalian setelah tanda kurung parameter, dan menggunakan kata kunci return.

package main

import "fmt"

// Fungsi ini menerima satu integer dan mengembalikan hasil berupa integer
func hitungLuasPersegi(sisi int) int {
    luas := sisi * sisi
    return luas // Mengembalikan nilai luas ke pemanggil
}

func main() {
    // Menyimpan hasil kembalian fungsi ke dalam variabel
    hasil := hitungLuasPersegi(5)
    fmt.Println("Luas persegi dengan sisi 5 adalah:", hasil)
}

4. Keunggulan Go: Multiple Return Values!

Di bahasa pemrograman lain seperti Java atau C, sebuah fungsi biasanya hanya bisa mengembalikan satu nilai saja. Tapi di Go-lang, kamu bisa mengembalikan banyak nilai sekaligus!

Fitur andalan Go ini sangat sering dipakai di industri, terutama untuk mengembalikan hasil perhitungan sekaligus status erornya.

package main

import "fmt"

// Fungsi ini mengembalikan dua nilai sekaligus: luas dan keliling
func hitungPersegi(sisi int) (int, int) {
    luas := sisi * sisi
    keliling := 4 * sisi
    return luas, keliling
}

func main() {
    // Menangkap kedua nilai kembalian secara berurutan
    l, k := hitungPersegi(10)
    fmt.Printf("Luas: %d, Keliling: %d\n", l, k)
}

Bagaimana Kalau Kita Hanya Butuh Satu Nilai Saja?

Ingat aturan emas Go-lang: variabel yang dideklarasikan wajib digunakan atau program akan eror saat dijalankan. Jika kamu hanya butuh nilai luas dan ingin mengabaikan keliling, gunakan Blank Identifier berupa garis bawah (_).

// Kita mengabaikan nilai kedua (keliling) menggunakan '_'
luasSaja, _ := hitungPersegi(10)
fmt.Println("Luasnya saja:", luasSaja)

Kesimpulan & Penutup

Selamat, Kodemu Sekarang Jauh Lebih Rapi! 🧠

Dengan memahami fungsi, kamu sudah selangkah lebih dekat untuk menulis kode berstandar industri. Kode programmu kini tidak lagi menumpuk panjang di dalam main, melainkan terbagi menjadi blok-blok kecil yang mandiri (modular), mudah dibaca, dan bisa digunakan berulang kali (reusable).

Yuk, Nyicip Eksperimen Kecil! 🛠️

Coba buat sebuah fungsi bernama hitungLuasSegitiga yang menerima parameter alas dan tinggi bertipe float64, lalu mengembalikan nilai luasnya. Panggil fungsi tersebut di dalam main dan cetak hasilnya!

Berhasil membuatnya? Yuk, bagikan hasil eksperimen kodemu di kolom komentar!

🎯 Tantangan Untukmu (Challenge!)

Buatlah sebuah program Go dengan fungsi bernama cekKelulusan yang menerima parameter nilai (int). Fungsi ini harus mengembalikan nilai berupa string:

Jika nilai 75 ke atas, kembalikan teks “LULUS”.

Jika nilai di bawah 75, kembalikan teks “REMIDI”.

Tunjukkan potongan kodemu di kolom komentar di bawah agar kita bisa saling mengoreksi dan belajar bersama!

Bocoran Artikel Selanjutnya 🚀

Fungsi yang kita pelajari hari ini baru mengirimkan salinan datanya saja (Pass by Value). Di artikel berikutnya, kita akan membahas konsep yang sangat seru dan krusial, yaitu Kupas Tuntas Pointer di Go: Cara Kerja Alamat Memori, Operator & dan *.

Materi ini akan menjadi kunci penting agar kamu bisa memanipulasi data asli secara langsung di dalam fungsi! Sampai jumpa di artikel berikutnya, tetap semangat, dan happy coding!

Tags :
Share :
comments powered by Disqus

Related Posts

Go From Zero to Hero #09: Menguasai While-Loop dan Repeat-Until Ala Go-lang

Go From Zero to Hero #09: Menguasai While-Loop dan Repeat-Until Ala Go-lang

Halo Go Developers! Selamat datang kembali di seri Go From Zero to Hero. Di artikel ketujuh kemarin, kita sudah berhasil memberi arahan komputer untuk melakukan tugas berulang-ulang lewat satu-satunya …

Go From Zero to Hero #08: Logika Perulangan - Menguasai Looping dengan Satu Kata Kunci (FOR)

Go From Zero to Hero #08: Logika Perulangan - Menguasai Looping dengan Satu Kata Kunci (FOR)

Haloo Go Developers! Selamat datang kembali di seri belajar Go From Zero to Hero. Di artikel sebelumnya, kita sudah belajar cara mengatur jalan raya alur program kita menggunakan switch case. Kita …

Go From Zero to Hero #06: Logika Percabangan Bagian 1 - mengenal if, else if, dan else

Go From Zero to Hero #06: Logika Percabangan Bagian 1 - mengenal if, else if, dan else

Haloo Go Developers! Selamat datang kembali di seri belajar Go From Zero to Hero. Di artikel kemarin kita telah berhasil membedah konsep Casting (Konversi Tipe Data) dan menjinakkan Operator Modulo …