Sejauh ini seluruh logika program kita berada di dalam satu fungsi: main. Ketika program membesar, menumpuk seluruh kode di satu tempat membuat program sulit dibaca, diuji, dan diperbaiki. Fungsi (function) memecah program menjadi unit kecil bernama: kita mendefinisikan sekali, lalu memanggil unit tersebut berkali-kali dari tempat mana pun. Pada chapter ini kita akan mendefinisikan fungsi dengan keyword func, mengisi daftar parameter, menentukan tipe kembalian (return type), lalu memakai bentuk fungsi tanpa parameter maupun nilai kembalian.
Anatomi Fungsi #
Deklarasi fungsi Go selalu dimulai dengan keyword func, diikuti nama fungsi, daftar parameter di dalam tanda kurung, tipe kembalian, dan badan fungsi di dalam kurung kurawal. Bentuk paling lengkap tampak seperti ini:
func tambah(a int, b int) int {
return a + b
}Tabel berikut memetakan peran setiap bagian deklarasi di atas:
| Bagian | Contoh | Peran |
|---|---|---|
| Keyword | func | Menandai awal deklarasi fungsi |
| Nama fungsi | tambah | Pengenal yang dipanggil dari kode lain |
| Parameter | (a int, b int) | Nilai masukan yang diterima fungsi |
| Tipe kembalian | int | Tipe nilai yang dikirim balik ke pemanggil |
| Badan fungsi | { return a + b } | Blok kode yang dieksekusi |
Ketika fungsi memiliki tipe kembalian, badan fungsi wajib memuat statement return di setiap jalur eksekusi, dan nilai yang dikirim harus cocok dengan tipe yang dideklarasikan. Pemanggil fungsi tambah(3, 4) menerima nilai 7 bertipe int dan dapat menyimpannya ke variabel seperti nilai biasa.
Menggabungkan Parameter Bertipe Sama #
Go mengizinkan parameter bertipe sama digabung dengan tipe yang dituliskan sekali di akhir daftar. Deklarasi func hitungLuas(panjang, lebar int) int memiliki arti yang sama persis dengan func hitungLuas(panjang int, lebar int) int. Bentuk gabungan lebih ringkas dan menjadi gaya yang umum kita temui di kode Go idiomatik. Pemanggilannya tidak berubah: hitungLuas(5, 4) mengirim angka 5 ke parameter panjang dan angka 4 ke parameter lebar, lalu menerima hasil 20.
Fungsi Tanpa Parameter dan Tanpa Nilai Kembalian #
Tidak semua fungsi butuh masukan atau keluaran. Fungsi sapa() di bawah tidak menerima parameter dan tidak mendeklarasikan tipe kembalian, sehingga kurung parameter dibiarkan kosong:
func sapa() {
fmt.Println("Halo, selamat belajar fungsi!")
}Fungsi seperti ini menjalankan sebuah aksi — mencetak sapaan — tanpa menghasilkan nilai yang perlu ditampung pemanggilnya. Go tidak punya keyword khusus semacam void; tipe kembalian yang hilang sudah cukup menyatakan bahwa fungsi tidak mengembalikan apa pun.
Return Kosong untuk Berhenti Lebih Awal #
Fungsi tanpa tipe kembalian tetap boleh memakai statement return tanpa nilai. Bentuk ini berperan sebagai pintu keluar cepat (early exit): eksekusi fungsi berhenti seketika dan kontrol kembali ke pemanggil. Pada fungsi tanda berikut, statement return memotong jalur eksekusi saat positif bernilai false sehingga pencetakan kedua tidak pernah terjadi:
func tanda(positif bool) {
if !positif {
fmt.Println("Bilangan non-positif")
return
}
fmt.Println("Bilangan positif")
}Program Utuh #
Berkas mendefinisikan.go pada bagian bawah halaman menggabungkan keempat bentuk fungsi di atas dalam satu program yang dapat dijalankan. Jalankan berkas tersebut dari direktori chapter dengan perintah berikut:
go run mendefinisikan.goOutput yang Dihasilkan:
tambah(3, 4) = 7
hitungLuas(5, 4) = 20
Halo, selamat belajar fungsi!
Bilangan positif
Bilangan non-positifMari kita telaah baris demi baris program di atas:
- Baris 6 (
func tambah(a int, b int) int): mendeklarasikan fungsitambahdengan dua parameter bertipeintyang ditulis terpisah dan nilai kembalianint. - Baris 11 (
func hitungLuas(panjang, lebar int) int): memakai bentuk gabungan — dua parameter bertipeintdengan tipe yang disebut sekali. - Baris 16 (
func sapa()): fungsi tanpa parameter dan tanpa nilai kembalian yang hanya mencetak satu baris sapaan. - Baris 22–24 (
if !positif ... return): memeriksa kebalikan kondisi lalu keluar lebih awal lewatreturnkosong, sehingga baris cetak di bawahnya dilewati saat argumenfalse. - Baris 29–39 (isi
main): memanggil setiap fungsi — hasiltambahditampung variabelhasil, sementarasapa,tanda(true), dantanda(false)dipanggil langsung untuk efek cetaknya.
Nilai kembalian tidak selalu berupa hasil perhitungan. Pola yang paling sering dipakai program Go nyata adalah mengembalikan pasangan nilai dan galat — misalnya (int, error) — yang akan kita bahas tuntas pada chapter Multiple Return Values
dan padanan konsepnya di Error Interface
.
Referensi #
- Function declarations — Go Spec — aturan resmi bentuk deklarasi fungsi.
- Go’s declaration syntax — Go Blog — alasan tipe kembalian ditulis setelah parameter.
- Effective Go: names — konvensi penamaan fungsi yang idiomatik.
Berkas Sumber
Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.
mendefinisikan.go
Unduh berkaspackage main
import "fmt"
// tambah menjumlahkan dua bilangan bulat lalu mengembalikan hasilnya.
func tambah(a int, b int) int {
return a + b
}
// hitungLuas memakai parameter bertipe sama yang boleh digabung.
func hitungLuas(panjang, lebar int) int {
return panjang * lebar
}
// sapa tidak menerima parameter dan tidak mengembalikan nilai apa pun.
func sapa() {
fmt.Println("Halo, selamat belajar fungsi!")
}
// tanda mencetak label bilangan dan berhenti lebih awal lewat return kosong.
func tanda(positif bool) {
if !positif {
fmt.Println("Bilangan non-positif")
return
}
fmt.Println("Bilangan positif")
}
func main() {
hasil := tambah(3, 4)
fmt.Println("tambah(3, 4) =", hasil)
fmt.Println("hitungLuas(5, 4) =", hitungLuas(5, 4))
sapa()
tanda(true)
tanda(false)
}