Menyimpan nilai ke dalam variable adalah operasi yang paling sering dilakukan program: menghitung total belanja, mengubah skor pemain, atau memperbarui sisa stok. Go menyediakan operator assignment = untuk penugasan biasa dan serangkaian bentuk gabungan seperti += yang memadukan operasi hitung dengan penugasan dalam satu langkah. Bentuk gabungan ini membuat kode lebih pendek dan mengurangi pengulangan nama variable yang panjang. Pada chapter ini kita mencoba semua operator gabungan, memakainya pada elemen map, lalu mempelajari multiple assignment yang mampu menukar dua nilai tanpa variable perantara.

Operator = dan Bentuk Gabungannya #

Operator assignment dasar = mengevaluasi ekspresi di sisi kanan, lalu menyimpan hasilnya ke variable di sisi kiri. Setiap operator aritmatika dan bitwise biner mempunyai bentuk gabungan yang setara, sebagaimana dirangkum tabel berikut:

Bentuk gabunganSetara dengan
x += 5x = x + 5
x -= 5x = x - 5
x *= 5x = x * 5
x /= 5x = x / 5
x %= 5x = x % 5
x &= 5x = x & 5
x |= 5x = x | 5
x ^= 5x = x ^ 5
x &^= 5x = x &^ 5
x <<= 2x = x << 2
x >>= 2x = x >> 2

Program berikut memakai hampir seluruh operator gabungan pada skenario kecil: saldo rekening, jumlah stok, dan hak akses berbentuk bit mask:

go
package main

import "fmt"

func main() {
	// Operator gabungan pada variable angka
	saldo := 1000
	saldo += 500
	fmt.Println("setelah setoran :", saldo)
	saldo -= 200
	fmt.Println("setelah tarikan :", saldo)

	stok := 30
	stok *= 3
	fmt.Println("setelah kalikan :", stok)
	stok /= 4
	fmt.Println("setelah bagi    :", stok)
	stok %= 5
	fmt.Println("sisa bagi       :", stok)

	// Operator bitwise juga punya bentuk gabungan
	izin := 0b0101
	izin |= 0b0010
	fmt.Printf("izin |= 0010    : %04b\n", izin)
	izin &^= 0b0001
	fmt.Printf("izin &^= 0001   : %04b\n", izin)

	// Operator gabungan pada elemen map
	skor := map[string]int{"Budi": 70}
	skor["Budi"] += 25
	skor["Siti"] += 10 // kunci baru mulai dari zero value 0
	fmt.Println("skor Budi:", skor["Budi"])
	fmt.Println("skor Siti:", skor["Siti"])

	// Multiple assignment menukar dua nilai tanpa variable sementara
	x, y := 1, 2
	x, y = y, x
	fmt.Println("x =", x, ", y =", y)
}

Output yang Dihasilkan:

text
setelah setoran : 1500
setelah tarikan : 1300
setelah kalikan : 90
setelah bagi    : 22
sisa bagi       : 2
izin |= 0010    : 0111
izin &^= 0001   : 0110
skor Budi: 95
skor Siti: 10
x = 2 , y = 1

Mari kita telaah baris demi baris program di atas:

  1. Baris 7-11 (saldo += 500 dan saldo -= 200): Nilai saldo berubah menjadi 1500 lalu 1300. Bentuk saldo += 500 membaca nilai lama, menjumlahkannya dengan 500, lalu menulis hasilnya kembali — persis seperti saldo = saldo + 500, tetapi nama saldo hanya ditulis sekali.
  2. Baris 16 (stok /= 4): Nilai 90 dibagi 4 menjadi 22, bukan 22.5, karena stok bertipe integer dan pembagian bulat memotong pecahan sebagaimana dibahas pada chapter Operator Aritmatika .
  3. Baris 18 (stok %= 5): Sisa bagi 22 oleh 5 adalah 2. Bentuk %= menuliskan sisa tersebut kembali ke stok.
  4. Baris 23-26 (izin |= 0b0010 dan izin &^= 0b0001): Operator bitwise gabungan menyalakan bit kedua (0101 menjadi 0111), lalu mematikan bit pertama (0111 menjadi 0110). Pola ini melanjutkan contoh mask permission pada chapter Operator Bitwise .
  5. Baris 29-33 (skor["Budi"] += 25 dst.): Operator gabungan juga sah dipakai pada elemen map. Assignment skor["Siti"] += 10 berhasil meskipun kunci "Siti" belum ada: pembacaan elemen map yang tidak dikenal menghasilkan zero value 0, sehingga hasilnya 10.

Multiple Assignment dan Pertukaran Nilai #

Go menugaskan beberapa nilai sekaligus dalam satu statement. Kedua sisi dipisahkan tanda sama dengan dan jumlah nilai di kedua sisi harus sama. Bentuk paling terkenal adalah pertukaran dua nilai pada baris 37 program di atas: x, y = y, x menugaskan nilai lama y (2) ke x dan nilai lama x (1) ke y secara serentak, tanpa variable penampung sementara. Pemakaian lain yang akan sering kita temui adalah menampung hasil fungsi yang mengembalikan beberapa nilai sekaligus — topik yang dibahas tuntas pada Section Fungsi .

Referensi #

Dari semua penugasan, ada satu bentuk yang tampil hampir di setiap loop: menaikkan atau menurunkan nilai tepat satu. Chapter Increment dan Decrement membahas operator ++ dan -- — beserta alasan Go membatasinya sebagai statement, bukan ekspresi.

Berkas Sumber

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

assignment.go

Unduh berkas
go
package main

import "fmt"

func main() {
	// Operator gabungan pada variable angka
	saldo := 1000
	saldo += 500
	fmt.Println("setelah setoran :", saldo)
	saldo -= 200
	fmt.Println("setelah tarikan :", saldo)

	stok := 30
	stok *= 3
	fmt.Println("setelah kalikan :", stok)
	stok /= 4
	fmt.Println("setelah bagi    :", stok)
	stok %= 5
	fmt.Println("sisa bagi       :", stok)

	// Operator bitwise juga punya bentuk gabungan
	izin := 0b0101
	izin |= 0b0010
	fmt.Printf("izin |= 0010    : %04b\n", izin)
	izin &^= 0b0001
	fmt.Printf("izin &^= 0001   : %04b\n", izin)

	// Operator gabungan pada elemen map
	skor := map[string]int{"Budi": 70}
	skor["Budi"] += 25
	skor["Siti"] += 10 // kunci baru mulai dari zero value 0
	fmt.Println("skor Budi:", skor["Budi"])
	fmt.Println("skor Siti:", skor["Siti"])

	// Multiple assignment menukar dua nilai tanpa variable sementara
	x, y := 1, 2
	x, y = y, x
	fmt.Println("x =", x, ", y =", y)
}