08. Komentar dan catatan untuk dirimu sendiri
Kamu sudah mengenal komentar sebentar di Bab 07: teks yang diabaikan Go saat mengompilasi file. Komentar memungkinkanmu meninggalkan catatan untuk programmer yang paling pelupa yang pernah kamu kenal — dirimu sendiri, minggu depan. Komentar yang baik mengubah dinding kode menjadi sesuatu yang bisa kamu baca kembali.
Seperti di Bab 07, contoh pendek hanya menampilkan baris yang masuk
ke dalam main.
Dua jenis komentar
Sebuah komentar satu baris dimulai dengan
//. Semua dari sana hingga akhir baris diabaikan:
// Seluruh baris ini adalah catatan untuk manusia.
fmt.Println("Hi") // Catatan juga bisa berada setelah kode.Untuk blok catatan multi-baris, gunakan beberapa
baris // berturut-turut, atau gunakan komentar
blok. Komentar blok dimulai dengan /* dan diakhiri
dengan */, dan Go mengabaikan semua yang ada di
antaranya:
/*
This is a longer note. It can run for several lines.
Go ignores all of it.
*/
fmt.Println("Still runs.")Gunakan baris // untuk catatan pendek dan untuk
mematikan satu baris kode. Gunakan blok /* */ untuk
paragraf di bagian atas file atau penjelasan yang lebih panjang.
Buka exercises/08/01-comment-styles.go. File ini punya
tiga panggilan fmt.Println. Tambahkan komentar
// satu baris di atas yang pertama, komentar di akhir baris
setelah yang kedua, dan blok /* */ di bagian atas yang
menjelaskan file ini. Jalankan — outputnya tidak boleh berubah.
Komentar mengapa, bukan apa
Kesalahan paling umum pada pemula adalah komentar yang hanya mengulang kode:
fmt.Println("Score:", 0) // cetak skor, 0
fmt.Println("Bonus:", 10) // cetak bonus, 10Komentar itu tidak menambahkan apa pun — kodenya sudah mengatakan apa yang dilakukannya. Komentar yang berguna menjelaskan mengapa, atau memperingatkan tentang sesuatu yang mengejutkan:
fmt.Println("Score:", 0) // pemain selalu memulai ronde dari nol
fmt.Println("Bonus:", 10) // bonus karena selesai di bawah parAturan yang bagus: kalau komentar dan kode mengatakan hal yang sama, hapus komentarnya. Simpan untuk mengapa, gotcha, dan hal yang tidak jelas.
Mengomentari kode
Komentar punya pekerjaan kedua: mematikan kode tanpa menghapusnya — salah satu trik debugging paling berguna.
Misalkan sebuah program berperilaku salah dan kamu mencurigai satu
baris. Taruh // di depannya dan jalankan lagi:
fmt.Println("Step 1")
// fmt.Println("Step 2")
fmt.Println("Step 3")Sekarang "Step 2" tidak pernah dicetak. Kalau masalahnya hilang, kamu
menemukan pelakunya. Untuk mengaktifkan kembali baris tersebut, hapus
// — lebih cepat dan lebih aman daripada menghapus dan
mengetik ulang nanti.
Untuk mematikan seluruh blok, taruh // di depan setiap
baris, atau bungkus dengan blok /* */:
/*
fmt.Println("These three")
fmt.Println("lines are")
fmt.Println("all switched off")
*/
fmt.Println("Only this line runs.")Komentar blok berakhir di */ pertama yang dilihat Go,
dan blok tidak bisa bersarang. Apa pun yang mengikuti */
pertama itu diperlakukan sebagai kode lagi, yang biasanya menghasilkan
syntax error. Kalau kamu lupa penutup */ sama
sekali, Go berhenti dengan comment not terminated. Simpan
penutup */ di barisnya sendiri di akhir.
Saat mengomentari kode membuat program gagal dikompilasi
Ini aturan yang tidak dimiliki banyak bahasa lain: Go menolak mengompilasi file yang meng-import sebuah package tapi tidak memakainya.
Jadi mengomentari kode bisa menimbulkan error. Misalkan
hello.go di folder go-work kamu punya satu
fmt.Println dan kamu mengomentarinya:
package main
import "fmt"
func main() {
// fmt.Println("Hi")
}Jalankan go run hello.go dan kamu mendapat:
# command-line-arguments
.\hello.go:3:8: "fmt" imported and not used
Error-nya menunjuk ke baris 3, yaitu import, bukan ke
komentarnya. Mengomentari baris terakhir yang memakai fmt
membuat tidak ada lagi yang memakainya. Ada dua cara keluar: pertahankan
setidaknya satu baris yang memakai fmt, atau komentari juga
import-nya:
package main
// import "fmt"
func main() {
// fmt.Println("Hi")
}Versi itu berhasil dikompilasi, dan tidak mencetak apa pun. Variabel mengikuti aturan yang sama, seperti yang ditunjukkan Bab 10.
Ekstensi Go untuk VS Code mungkin menghapus baris import
yang tidak terpakai dengan sendirinya saat kamu menyimpan. Kalau begitu,
kamu tidak akan melihat error ini, dan baris import "fmt"
sudah hilang dari file. Saat kamu memakai fmt lagi,
ekstensi itu menambahkan barisnya kembali pada penyimpanan berikutnya,
atau kamu bisa mengetiknya sendiri.
Header untuk setiap file
Kebiasaan yang layak dibangun: mulai setiap file dengan blok komentar pendek yang menjelaskan untuk apa file itu. Dirimu di masa depan akan berterima kasih kepada dirimu sekarang.
/*
Greeting program.
Asks for nothing; just prints a friendly welcome banner.
Written while learning Chapter 08.
*/
package main
import "fmt"
func main() {
fmt.Println("Welcome!")
}PR
File PR ada di exercises/08/homework/. Setiap file harus
tetap bisa dikompilasi setelah kamu ubah, jadi biarkan setidaknya satu
baris yang memakai fmt tetap aktif.
Soal 1 — Beri anotasi pada program
Buka exercises/08/homework/01-annotate.go. File ini
punya beberapa baris kode yang berfungsi tanpa komentar. Tambahkan
header /* */ atau // yang menjelaskan apa yang
dilakukan file, ditambah minimal dua komentar // satu baris
yang menjelaskan mengapa sebuah baris ada di sana (bukan
apa yang dilakukannya). Output tidak boleh berubah.
Soal 2 — Temukan bug dengan mengomentari
Buka exercises/08/homework/02-comment-out.go. Salah satu
baris fmt.Println-nya menghasilkan output yang seharusnya
tidak ada. Komentari tepat satu baris sehingga program hanya
mencetak:
start
end
Lakukan dengan menambahkan //, bukan dengan menghapus
barisnya.
Soal 3 — Matikan sebuah blok
Buka exercises/08/homework/03-block-off.go. Menggunakan
satu blok komentar /* */, matikan tiga baris
fmt.Println di tengah sehingga hanya baris pertama dan
terakhir yang dicetak. Jalankan untuk memastikan.
Tantangan — Mengapa, bukan apa
Buka exercises/08/homework/04-why-not-what.go. File ini
penuh dengan komentar yang tidak berguna karena hanya mengulang kode.
Tulis ulang setiap komentar agar menjelaskan mengapa baris itu
ada, atau hapus kalau tidak ada yang berguna untuk dikatakan. Targetkan
komentar yang lebih sedikit tapi lebih baik.
Stuck atau sudah selesai? Buka halaman solusi PR.