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:

go
func tambah(a int, b int) int {
	return a + b
}

Tabel berikut memetakan peran setiap bagian deklarasi di atas:

BagianContohPeran
KeywordfuncMenandai awal deklarasi fungsi
Nama fungsitambahPengenal yang dipanggil dari kode lain
Parameter(a int, b int)Nilai masukan yang diterima fungsi
Tipe kembalianintTipe 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:

go
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:

go
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:

bash
go run mendefinisikan.go

Output yang Dihasilkan:

text
tambah(3, 4) = 7
hitungLuas(5, 4) = 20
Halo, selamat belajar fungsi!
Bilangan positif
Bilangan non-positif

Mari kita telaah baris demi baris program di atas:

  1. Baris 6 (func tambah(a int, b int) int): mendeklarasikan fungsi tambah dengan dua parameter bertipe int yang ditulis terpisah dan nilai kembalian int.
  2. Baris 11 (func hitungLuas(panjang, lebar int) int): memakai bentuk gabungan — dua parameter bertipe int dengan tipe yang disebut sekali.
  3. Baris 16 (func sapa()): fungsi tanpa parameter dan tanpa nilai kembalian yang hanya mencetak satu baris sapaan.
  4. Baris 22–24 (if !positif ... return): memeriksa kebalikan kondisi lalu keluar lebih awal lewat return kosong, sehingga baris cetak di bawahnya dilewati saat argumen false.
  5. Baris 29–39 (isi main): memanggil setiap fungsi — hasil tambah ditampung variabel hasil, sementara sapa, tanda(true), dan tanda(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 #

Berkas Sumber

Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.

mendefinisikan.go

Unduh berkas
go
package 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)
}