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, 10

Komentar 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 par

Aturan 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.