BAB 5: Comment - Seni Menulis Catatan dalam Kode - Abd. Asis

BAB 5: Comment - Seni Menulis Catatan dalam Kode

Tadi kita udah berhasil bikin program Hello World pertama, sekarang waktunya belajar tentang salah satu hal yang sangat penting dalam dunia programming: comment. Comment itu seperti catatan pribadi yang kamu tulis untuk diri sendiri (dan programmer lain) tentang apa yang sedang dilakukan oleh kode tersebut.

Bayangkan comment seperti sticky notes yang kamu tempel di buku pelajaran. Ketika kamu baca ulang beberapa bulan kemudian, sticky notes itu membantu kamu ingat kenapa kamu menulis sesuatu atau apa maksud dari bagian tersebut. Begitu juga dengan comment dalam kode!

Mengapa Comment Itu Penting?

Comment bukan hanya sekadar “hiasan” dalam kode. Ada beberapa alasan penting kenapa kamu harus membiasakan diri menulis comment:

Membantu Memahami Kode Ketika kamu atau orang lain membaca kode kamu 6 bulan kemudian, comment akan membantu memahami maksud dan tujuan dari setiap bagian kode.

Mempermudah Debugging Saat ada bug atau error, comment yang baik akan membantu kamu cepat menemukan bagian mana yang bermasalah.

Dokumentasi Otomatis Go memiliki tools khusus yang bisa mengubah comment menjadi dokumentasi otomatis untuk package atau function kamu.

Komunikasi Tim Jika kamu kerja dalam tim, comment adalah cara untuk berkomunikasi dengan anggota tim lainnya tentang cara kerja kode.

Jenis-Jenis Comment di Go

Go menyediakan dua jenis comment yang bisa kamu gunakan, masing-masing dengan kegunaannya sendiri.

Single-Line Comment (//)

Single-line comment adalah jenis comment yang paling umum digunakan. Comment ini dimulai dengan dua garis miring (//) dan berlaku hanya untuk satu baris.

package main

import "fmt"

func main() {
    // Ini adalah comment untuk menjelaskan kode di bawahnya
    fmt.Println("Hello, World!")
    
    // Comment ini menjelaskan kenapa kita print nama
    nama := "Alice"
    fmt.Println("Halo,", nama)
    
    // Kode di bawah ini akan menampilkan angka
    angka := 42
    fmt.Println("Angka favorit:", angka) // Comment juga bisa di akhir baris
}

Keunggulan single-line comment:

  • Mudah dan cepat untuk menulis
  • Cocok untuk penjelasan singkat
  • Bisa diletakkan di akhir baris kode

Multi-Line Comment (/* */)

Multi-line comment berguna ketika kamu perlu menulis penjelasan yang panjang atau ingin meng-comment beberapa baris sekaligus. Comment ini dimulai dengan /* dan diakhiri dengan */.

package main

import "fmt"

/*
Ini adalah contoh multi-line comment.
Comment ini bisa mencakup beberapa baris sekaligus.
Berguna untuk penjelasan yang panjang atau untuk
men-disable beberapa baris kode sementara.
*/

func main() {
    fmt.Println("Program berjalan!")
    
    /*
    Blok kode ini sementara di-comment
    karena masih dalam tahap development
    
    user := getUserInput()
    processUser(user)
    saveToDatabase(user)
    */
    
    fmt.Println("Program selesai!")
}

Keunggulan multi-line comment:

  • Bisa mencakup beberapa baris
  • Cocok untuk dokumentasi panjang
  • Berguna untuk men-disable blok kode sementara

Best Practices untuk Comment

Tidak semua comment itu baik. Ada art tersendiri dalam menulis comment yang efektif:

Comment yang Baik

// calculateTax menghitung pajak berdasarkan income dan rate
func calculateTax(income float64, rate float64) float64 {
    // Pastikan rate dalam bentuk desimal (0.15 untuk 15%)
    if rate > 1 {
        rate = rate / 100
    }
    
    return income * rate
}

// getUserAge meminta input umur dari user dengan validasi
func getUserAge() int {
    // Loop sampai user memasukkan input yang valid
    for {
        fmt.Print("Masukkan umur kamu: ")
        var age int
        _, err := fmt.Scanf("%d", &age)
        
        // Validasi input: harus angka dan masuk akal
        if err != nil || age < 0 || age > 120 {
            fmt.Println("Input tidak valid, coba lagi!")
            continue
        }
        
        return age
    }
}

Comment yang Kurang Baik

// Bad: comment yang hanya mengulang kode
func main() {
    // Print hello world
    fmt.Println("Hello, World!")
    
    // Declare variable x equals 5
    x := 5
    
    // Add 1 to x
    x = x + 1
    
    // Print x
    fmt.Println(x)
}

Prinsip comment yang baik:

  • Jelaskan WHY (kenapa), bukan WHAT (apa)
  • Fokus pada business logic dan alasan di balik keputusan
  • Hindari comment yang hanya mengulang kode
  • Update comment ketika kode berubah

Documentation Comment untuk Function

Go memiliki konvensi khusus untuk documentation comment. Comment yang dimulai dengan nama function akan otomatis dijadikan dokumentasi oleh tools Go.

package main

import "fmt"

// greetUser menerima nama user dan menampilkan greeting yang ramah.
// Function ini akan menambahkan kata "Halo" di depan nama dan
// menampilkannya ke console.
func greetUser(name string) {
    fmt.Printf("Halo, %s! Selamat datang!\n", name)
}

// calculateCircleArea menghitung luas lingkaran berdasarkan radius.
// Menggunakan rumus: π × r²
// Parameter radius harus berupa bilangan positif.
func calculateCircleArea(radius float64) float64 {
    const pi = 3.14159
    return pi * radius * radius
}

// isEven mengecek apakah sebuah angka adalah bilangan genap.
// Return true jika genap, false jika ganjil.
func isEven(number int) bool {
    return number%2 == 0
}

func main() {
    greetUser("Alice")
    
    area := calculateCircleArea(5.0)
    fmt.Printf("Luas lingkaran: %.2f\n", area)
    
    if isEven(10) {
        fmt.Println("10 adalah bilangan genap")
    }
}

Comment untuk Men-disable Kode

Salah satu fungsi praktis comment adalah untuk sementara mematikan bagian kode tanpa menghapusnya:

package main

import "fmt"

func main() {
    fmt.Println("Program dimulai")
    
    // Fitur login sementara di-disable
    // authenticateUser()
    // if !isLoggedIn {
    //     fmt.Println("Please login first")
    //     return
    // }
    
    fmt.Println("Menjalankan program utama...")
    
    /*
    Fitur ini masih dalam development:
    
    sendEmail()
    updateDatabase()
    generateReport()
    */
    
    fmt.Println("Program selesai")
}

Tips untuk commenting out code:

  • Gunakan // untuk satu atau beberapa baris
  • Gunakan /* */ untuk blok kode yang besar
  • Jangan lupa beri keterangan kenapa di-comment
  • Hapus comment code yang sudah tidak diperlukan

Package Documentation Comment

Go juga memiliki konvensi untuk documentation comment pada level package:

// Package calculator menyediakan function-function untuk operasi matematika dasar.
// Package ini mencakup operasi penjumlahan, pengurangan, perkalian, dan pembagian
// dengan handling error untuk kasus-kasus khusus seperti pembagian dengan nol.
//
// Contoh penggunaan:
//   result := calculator.Add(5, 3)
//   fmt.Println(result) // Output: 8
package calculator

import "errors"

// Add menjumlahkan dua bilangan dan return hasilnya
func Add(a, b float64) float64 {
    return a + b
}

// Divide membagi bilangan pertama dengan bilangan kedua.
// Return error jika pembagi adalah nol.
func Divide(a, b float64) (float64, error) {
    if b == 0 {
        return 0, errors.New("tidak bisa membagi dengan nol")
    }
    return a / b, nil
}

Comment dalam Situasi Khusus

TODO Comment

func processPayment(amount float64) {
    // TODO: Implementasi validasi input amount
    // TODO: Tambahkan logging untuk audit trail
    // TODO: Integrate dengan payment gateway
    
    fmt.Printf("Processing payment: $%.2f\n", amount)
}

FIXME Comment

func calculateDiscount(price float64, percentage float64) float64 {
    // FIXME: Bug - percentage bisa lebih dari 100% 
    // Perlu tambah validasi sebelum calculation
    return price * (percentage / 100)
}

HACK Comment

func workaroundBug() {
    // HACK: Temporary workaround untuk bug di external library
    // Remove this setelah library di-update ke versi 2.1.0
    time.Sleep(100 * time.Millisecond)
}

Tools untuk Melihat Documentation

Go memiliki built-in tools untuk melihat documentation dari comment:

# Melihat documentation package
go doc fmt

# Melihat documentation function tertentu
go doc fmt.Println

# Generate documentation dalam format web
godoc -http=:6060

Praktek dengan Comment

Mari coba buat program sederhana dengan comment yang baik:

package main

import (
    "fmt"
    "strconv"
)

// Program ini adalah kalkulator sederhana yang bisa melakukan
// operasi matematika dasar: tambah, kurang, kali, bagi

// add menjumlahkan dua bilangan
func add(a, b float64) float64 {
    return a + b
}

// subtract mengurangkan bilangan kedua dari bilangan pertama
func subtract(a, b float64) float64 {
    return a - b
}

// multiply mengalikan dua bilangan
func multiply(a, b float64) float64 {
    return a * b
}

// divide membagi bilangan pertama dengan bilangan kedua
// Return 0 jika pembagi adalah nol untuk menghindari panic
func divide(a, b float64) float64 {
    if b == 0 {
        fmt.Println("Error: Tidak bisa membagi dengan nol!")
        return 0
    }
    return a / b
}

func main() {
    // Input bilangan pertama
    fmt.Print("Masukkan bilangan pertama: ")
    var input1 string
    fmt.Scanln(&input1)
    num1, _ := strconv.ParseFloat(input1, 64)
    
    // Input operasi
    fmt.Print("Pilih operasi (+, -, *, /): ")
    var operation string
    fmt.Scanln(&operation)
    
    // Input bilangan kedua
    fmt.Print("Masukkan bilangan kedua: ")
    var input2 string
    fmt.Scanln(&input2)
    num2, _ := strconv.ParseFloat(input2, 64)
    
    // Proses berdasarkan operasi yang dipilih
    var result float64
    switch operation {
    case "+":
        result = add(num1, num2)
    case "-":
        result = subtract(num1, num2)
    case "*":
        result = multiply(num1, num2)
    case "/":
        result = divide(num1, num2)
    default:
        fmt.Println("Operasi tidak valid!")
        return
    }
    
    // Tampilkan hasil
    fmt.Printf("Hasil: %.2f %s %.2f = %.2f\n", num1, operation, num2, result)
}

Kapan Harus Menulis Comment?

Tulis comment ketika:

  • Logic business yang kompleks
  • Algoritma yang tidak obvious
  • Workaround atau hack sementara
  • API publik atau function yang akan digunakan orang lain
  • Konfigurasi atau konstanta yang penting

Jangan tulis comment untuk:

  • Kode yang sudah self-explanatory
  • Setiap baris kode (over-commenting)
  • Comment yang hanya mengulang kode

Tips Terakhir

  1. Keep it simple - Comment yang mudah dibaca lebih baik dari yang rumit
  2. Update comment - Jangan lupa update comment kalau kode berubah
  3. Focus on WHY - Jelaskan kenapa, bukan apa
  4. Use TODO/FIXME - Untuk menandai hal yang perlu dikerjakan nanti
  5. Documentation comment - Ikuti konvensi Go untuk public API

Comment yang baik adalah investasi untuk masa depan. Ketika kamu atau tim kamu perlu maintain atau develop kode lebih lanjut, comment yang baik akan menghemat banyak waktu dan mengurangi confusion.

Remember: kode ditulis sekali tapi dibaca berkali-kali. Make it easy to read! 😊