Fungsi adalah salah satu fondasi utama dalam setiap bahasa pemrograman. Tanpa fungsi, kode akan seperti film tanpa adegan berpindah: membosankan, berantakan, dan bikin kita ingin pulang sebelum selesai. Di Golang, fungsi bahkan bisa jadi salah satu alasan kenapa banyak developer betah berkutat karena sintaksnya sederhana, tapi kemampuan dan fleksibilitasnya luar biasa.
Pada artikel ini, kita akan membahas apa itu fungsi, cara mendeklarasikan fungsi, cara memanggil fungsi, return value, fungsi dengan banyak nilai kembali, fungsi variadic, fungsi sebagai parameter, hingga anonymous function, dengan gaya santai-lucu dan tetap berbobot.
Langsung saja kita mulai perjalanan ini!
Apa Itu Fungsi?
Secara sederhana:
Fungsi adalah sebuah blok kode yang bisa dipakai ulang, dilakukan saat diminta, dan biasanya berperan menyelesaikan satu tugas tertentu.
Analogi gampangnya:
Fungsi itu kayak tukang bakso langganan. Kamu panggil → dia kerja → dia kasih hasil.
Bedanya, fungsi tidak libur dan tidak pulang kampung waktu lebaran.
Deklarasi Fungsi di Golang
Format dasar deklarasi fungsi di Go seperti ini:
func namaFungsi(parameter) tipeKembalian {
// isi fungsi
}
Tiga hal penting:
-
func → kata kunci untuk mendefinisikan fungsi.
-
namaFungsi → huruf kecil = private, huruf besar = public (exported).
-
parameter dan return → opsional, tapi sering dipakai.
Mari kita lihat contoh paling standar:
func sapa() {
fmt.Println("Halo! Ini fungsi tanpa parameter.")
}
Fungsi di atas tidak punya parameter dan tidak mengembalikan nilai. Sederhana, tapi efektif.
Memanggil Fungsi
Untuk memanggil fungsi dalam Golang, caranya mudah sekali:
sapa()
Sama seperti memanggil teman dari jauh, tapi teman ini pasti datang.
Fungsi Dengan Parameter
Parameter memungkinkan kita mengirim data ke fungsi agar bisa diproses.
Contoh:
func halo(nama string) {
fmt.Println("Halo,", nama)
}
Pemanggilan:
halo("Budi")
Output:
Halo, Budi
Simpel, rapi, dan tidak ribut.
Fungsi Dengan Return Value
Tidak semua fungsi hanya menyapa. Fungsi kadang perlu mengembalikan hasil.
Formatnya:
func tambah(a int, b int) int {
return a + b
}
Pemanggilan:
hasil := tambah(3, 4)
fmt.Println("Hasil:", hasil)
Output:
Hasil: 7 Multiple Return Value (Go Punya, Bahasa Lain Iri)
Golang punya fitur keren: fungsi bisa mengembalikan lebih dari satu nilai!
Contoh:
func hitung(a int, b int) (int, int) {
jumlah := a + b
selisih := a - b
return jumlah, selisih
}
Pemanggilan:
jml, s := hitung(10, 3)
fmt.Println("Jumlah:", jml)
fmt.Println("Selisih:", s)
Output:
Jumlah: 13
Selisih: 7
Beberapa bahasa lain harus pakai array, object, tuple khusus, atau doa-doa tertentu.
Go? Tinggal tulis dua angka di return.
Named Return Value
Go juga punya fitur named return, semacam “mengisi label dulu baru direturn”.
Contoh:
func luasPersegi(sisi float64) (luas float64) {
luas = sisi * sisi
return
}
Perhatikan:
-
Nilai
luasotomatis direturn karena sudah diberi nama. Tidak wajib tapi bisa membuat kode lebih rapi kalau dipakai dengan bijak.
Fungsi Variadic (Parameter Tak Terbatas)
Pernah ingin membuat fungsi yang menerima banyak sekali nilai, tanpa batas?
Misalnya fungsi jumlah total angka:
func total(angka ...int) int {
jumlah := 0
for _, v := range angka {
jumlah += v
}
return jumlah
}
Pemanggilan:
fmt.Println(total(1, 2, 3))
fmt.Println(total(5, 10, 15, 20))
Output:
6
50
Huruf ... artinya parameter tersebut boleh diisi sebanyak apa pun, bahkan nol.
Anonymous Function
Golang juga mendukung fungsi tanpa nama.
Contoh:
func() {
fmt.Println("Ini anonymous function")
}()
Dipanggil langsung dengan tanda () di belakang.
Atau disimpan ke variabel:
say := func(nama string) {
fmt.Println("Halo", nama)
}
say("Mahmud") Fungsi Sebagai Parameter
Golang mendukung konsep function as first-class citizen.
Artinya fungsi bisa dikirim sebagai parameter.
Contoh:
func prosesAngka(angka int, f func(int) int) int {
return f(angka)
}
func kaliDua(x int) int {
return x * 2
}
hasil := prosesAngka(5, kaliDua)
fmt.Println(hasil)
Output:
10
Ini sangat berguna dalam:
-
callback
-
middleware
-
sistem event
custom logic
Fungsi Rekursif
Fungsi yang memanggil dirinya sendiri.
Contoh klasik: faktorial.
func faktorial(n int) int {
if n == 1 {
return 1
}
return n * faktorial(n-1)
}
Meskipun indah, gunakan rekursi dengan hati-hati.
Stack overflow itu nyata.
Fungsi di Dalam Package
Di Golang, nama fungsi public dimulai dengan huruf besar.
File: mathku/mathku.go
package mathku
func Tambah(a int, b int) int {
return a + b
}
Pemanggilan di file lain:
import "mathku"
hasil := mathku.Tambah(2, 3)
fmt.Println(hasil) Best Practice Dalam Menggunakan Fungsi
Untuk memastikan kode kamu bukan horor bagi programmer lain:
✔ Buat fungsi dengan satu tujuan
Fungsi yang melakukan 7 hal sekaligus = mimpi buruk debugging.
✔ Gunakan nama yang jelas
hitungLuas(), bukan hl().
✔ Hindari parameter terlalu banyak
Jika lebih dari 4, pakai struct.
✔ Return value sebaiknya jelas maknanya
Kalau perlu, gunakan named return.
✔ Hindari over-engineering
Tidak semua harus anonymous function, higher-order function, dsb.
Contoh Proyek Mini: Fungsi Lengkap
Berikut gabungan berbagai konsep:
package main
import "fmt"
// fungsi biasa
func salam(nama string) {
fmt.Println("Halo", nama)
}
// fungsi dengan return
func tambah(a, b int) int {
return a + b
}
// fungsi variadic
func total(angka ...int) int {
sum := 0
for _, v := range angka {
sum += v
}
return sum
}
// fungsi sebagai parameter
func operasi(a int, f func(int) int) int {
return f(a)
}
func main() {
salam("Doni")
fmt.Println("Tambah:", tambah(3, 4))
fmt.Println("Total:", total(1, 2, 3, 4, 5))
hasil := operasi(10, func(x int) int {
return x * x
})
fmt.Println("Kuadrat:", hasil)
}
Output:
Halo Doni
Tambah: 7
Total: 15
Kuadrat: 100
Semua konsep berkumpul dalam satu program kecil namun jelas.
Fungsi adalah jantung dari setiap program Golang. Dengan memahami:
-
cara deklarasi fungsi
-
cara pemanggilan
-
parameter
-
return value
-
multiple returns
-
variadic function
-
anonymous function
-
fungsi sebagai parameter
-
best practice
…maka kamu sudah punya bekal kuat untuk menulis program yang efisien dan enak dibaca.
Fungsi membantu menyederhanakan kode, menjaga struktur, dan membuat proyek scalable. Tanpa fungsi, dunia pemrograman akan jadi tempat yang gelap… seperti debug tanpa log.

0 Comments:
Posting Komentar