Program nyata jarang bekerja dengan satu nilai saja: sebuah transaksi menyimpan sekaligus harga, jumlah, dan diskon, sementara sebuah pembagian sekaligus menghasilkan hasil bagi dan sisa. Go mengakui pola ini lewat penugasan dan deklarasi yang menerima banyak variabel dalam satu baris — fitur yang membuat kode menjadi ringkas tanpa kehilangan kejelasan. Pada chapter ini kita akan mendeklarasikan banyak variabel sekaligus, menukar dua nilai tanpa variabel perantara, menerima banyak nilai balik dari fungsi, lalu memakai blank identifier untuk nilai yang tidak ingin disimpan.
Deklarasi Banyak Variabel Sekaligus #
Kata kunci var dan operator := sama-sama menerima daftar nama dan daftar nilai yang dipisahkan koma:
var a, b int // dua variabel int, keduanya zero value 0
var x, y = 10, 4 // dua variabel dengan nilai berbeda
p, q := "Budi", true // deklarasi pendek dua variabel sekaligusJumlah nama di kiri harus persis sama dengan jumlah nilai (atau tipe) di kanan. Ketidakcocokan jumlah ditolak compiler dengan pesan assignment mismatch: 2 variables but 1 value.
Blok var untuk Deklarasi Berkelompok #
Deklarasi yang berkaitan semantik bisa dikelompokkan dalam satu blok var (...) agar mudah dibaca — gaya yang sangat umum untuk variabel level package:
var (
nama = "Budi"
daerah = "Bandung"
)Blok ini murni gaya penulisan; hasilnya identik dengan dua baris var terpisah, tetapi mengelompokkan data yang saling terkait menjadi satu kesatuan yang mudah dipindai.
Menukar Nilai Dua Variabel #
Kebutuhan klasik pemrograman — menukar isi dua variabel — diselesaikan Go dalam satu baris:
x, y = y, xMekanismenya bekerja karena Go mengevaluasi seluruh sisi kanan terlebih dahulu menjadi daftar nilai, baru kemudian menyimpan nilai-nilai tersebut ke variabel di sisi kiri satu per satu. Nilai lama x dan y sudah tersimpan aman sebelum penimpaan dimulai, sehingga tidak perlu variabel sementara seperti temp di bahasa lain.
Nilai Balik Banyak dari Fungsi #
Penugasan multiple bersinergi dengan fungsi yang mengembalikan banyak nilai — fitur bawaan Go, bukan trik khusus. Fungsi bagiSisa di program utuh mendeklarasikan dua nilai balik (int, int) dan mengembalikan sekaligus hasil bagi serta sisanya:
func bagiSisa(a, b int) (int, int) {
return a / b, a % b
}Pemanggilnya menangkap kedua nilai dalam satu penugasan: hasil, sisa := bagiSisa(20, 6). Pola ini adalah fondasi idiom Go seperti nilai, err := fungsi() yang akan kita temui terus-menerus pada Section Error Handling.
Blank Identifier untuk Melewatkan Nilai #
Kadang kita hanya membutuhkan sebagian nilai balik. Aturan declared and not used melarang variabel menganggur, dan di sinilah blank identifier _ berperan: ia menerima nilai lalu langsung membuangnya tanpa pernah bisa dibaca:
_, hanyaSisa := bagiSisa(20, 6)Penugasan di atas menyimpan sisa bagi, sementara hasil bagi utamanya dibuang ke _. Identifier yang sama boleh dipakai berulang dalam satu program karena isinya memang tidak pernah dipakai.
Program Utuh #
Berkas deklarasi-multiple-demo.go merangkai keempat teknik di atas. Jalankan berkas tersebut dari direktori chapter:
go run deklarasi-multiple-demo.gopackage main
import "fmt"
func bagiSisa(a, b int) (int, int) {
return a / b, a % b
}
func main() {
var x, y = 10, 4
x, y = y, x
fmt.Println("Setelah ditukar:", x, y)
hasil, sisa := bagiSisa(20, 6)
fmt.Println("20 / 6 =", hasil, "sisa", sisa)
_, hanyaSisa := bagiSisa(20, 6)
fmt.Println("Sisa saja:", hanyaSisa)
var (
nama = "Budi"
daerah = "Bandung"
)
fmt.Println("Peserta:", nama, "dari", daerah)
}Output yang Dihasilkan:
Setelah ditukar: 4 10
20 / 6 = 3 sisa 2
Sisa saja: 2
Peserta: Budi dari BandungMari kita telaah baris demi baris program di atas:
- Baris 5 (
func bagiSisa(a, b int) (int, int)): mendeklarasikan fungsi dengan dua parameter bertipeintdan dua nilai balik bertipeint— deklarasi multiple juga berlaku pada parameter dan hasil. - Baris 10 (
var x, y = 10, 4): mendeklarasikan dua variabel sekaligus dengan nilai10dan4. - Baris 11 (
x, y = y, x): menukar kedua nilai tanpa variabel perantara; output membuktikanxmenjadi4danymenjadi10. - Baris 14 (
hasil, sisa := bagiSisa(20, 6)): menangkap dua nilai balik fungsi sekaligus, yaitu3dan2. - Baris 17 (
_, hanyaSisa := bagiSisa(20, 6)): membuang hasil bagi ke blank identifier dan hanya menyimpan sisa2. - Baris 20–23 (blok
var): mengelompokkan dua deklarasi terkait dalam satu blok sebelum keduanya dicetak bersama.
Dengan penugasan multiple, kita bisa menangkap hasil perhitungan majemuk secara alami. Satu aturan terakhir yang menentukan kenyamanan jangka panjang sebuah program besar adalah cara kita menamai semua variabel dan fungsi tersebut — topik penutup Section ini.
Referensi #
- Spesifikasi Go: Assignments — aturan penugasan dan evaluasi sisi kanan pada penugasan multiple.
- Effective Go: Multiple returns — filosofi fungsi bernilai balik banyak di Go.
Berkas Sumber
Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.
deklarasi-multiple-demo.go
Unduh berkaspackage main
import "fmt"
func bagiSisa(a, b int) (int, int) {
return a / b, a % b
}
func main() {
var x, y = 10, 4
x, y = y, x
fmt.Println("Setelah ditukar:", x, y)
hasil, sisa := bagiSisa(20, 6)
fmt.Println("20 / 6 =", hasil, "sisa", sisa)
_, hanyaSisa := bagiSisa(20, 6)
fmt.Println("Sisa saja:", hanyaSisa)
var (
nama = "Budi"
daerah = "Bandung"
)
fmt.Println("Peserta:", nama, "dari", daerah)
}