BAB 6: Variable - Abd. Asis

BAB 6: Variable

Variable adalah salah satu konsep fundamental dalam programming. Di Go, variable digunakan untuk menyimpan data yang dapat berubah selama program berjalan. Bab ini akan membahas berbagai cara mendeklarasikan dan menggunakan variable di Go.

Apa itu Variable?

Variable adalah lokasi penyimpanan di memori yang memiliki nama dan dapat menyimpan nilai. Nilai ini dapat berubah selama program berjalan, berbeda dengan constant yang nilainya tetap.

Di Go, variable harus dideklarasikan sebelum digunakan dan memiliki type yang spesifik.

Mendeklarasikan Variable dengan var

Cara paling dasar untuk mendeklarasikan variable di Go adalah menggunakan keyword var:

package main

import "fmt"

func main() {
    var nama string
    fmt.Println(nama) // Output: "" (string kosong)
}

Deklarasi dengan Inisialisasi

Kita dapat memberikan nilai awal saat mendeklarasikan variable:

package main

import "fmt"

func main() {
    var nama string = "Budi"
    var umur int = 25
    
    fmt.Println(nama) // Output: Budi
    fmt.Println(umur) // Output: 25
}

Type Inference

Go dapat menebak type variable berdasarkan nilai yang diberikan:

package main

import "fmt"

func main() {
    var nama = "Siti"      // Go tahu ini string
    var umur = 30          // Go tahu ini int
    var tinggi = 165.5     // Go tahu ini float64
    var menikah = true     // Go tahu ini bool
    
    fmt.Println(nama, umur, tinggi, menikah)
}

Multiple Variable Declaration

Kita dapat mendeklarasikan beberapa variable sekaligus:

package main

import "fmt"

func main() {
    // Deklarasi multiple variable dengan type yang sama
    var a, b, c int = 1, 2, 3
    
    // Deklarasi multiple variable dengan type berbeda
    var nama, umur, tinggi = "Ali", 28, 170.0
    
    fmt.Println(a, b, c)
    fmt.Println(nama, umur, tinggi)
}

Grouped Variable Declaration

Untuk kode yang lebih rapi, kita dapat mengelompokkan deklarasi variable:

package main

import "fmt"

func main() {
    var (
        nama    string = "Ahmad"
        umur    int    = 35
        tinggi  float64 = 175.5
        menikah bool   = true
    )
    
    fmt.Println(nama, umur, tinggi, menikah)
}

Short Variable Declaration (:=)

Di dalam function, kita dapat menggunakan shorthand := untuk mendeklarasikan dan menginisialisasi variable:

package main

import "fmt"

func main() {
    nama := "Dewi"
    umur := 27
    tinggi := 160.0
    
    fmt.Println(nama, umur, tinggi)
}

Catatan penting: Syntax := hanya bisa digunakan di dalam function, tidak bisa di package level.

Zero Values

Ketika variable dideklarasikan tanpa nilai awal, Go memberikan zero value berdasarkan type-nya:

package main

import "fmt"

func main() {
    var (
        number   int     // 0
        text     string  // ""
        flag     bool    // false
        pointer  *int    // nil
    )
    
    fmt.Printf("int: %d\n", number)
    fmt.Printf("string: '%s'\n", text)
    fmt.Printf("bool: %t\n", flag)
    fmt.Printf("pointer: %v\n", pointer)
}

Daftar Zero Values

  • Numeric types (int, float64, dll): 0
  • String: "" (empty string)
  • Boolean: false
  • Pointers, slices, maps, channels: nil

Variable Redeclaration dengan :=

Dengan :=, kita dapat redeclare variable jika minimal ada satu variable baru:

package main

import "fmt"

func main() {
    nama := "Andi"
    fmt.Println(nama) // Output: Andi
    
    // Redeclaration dengan variable baru
    nama, umur := "Budi", 25
    fmt.Println(nama, umur) // Output: Budi 25
}

Variable Scope

Variable memiliki scope (ruang lingkup) berdasarkan di mana mereka dideklarasikan:

Package Level Variable

package main

import "fmt"

// Package level variable
var globalVar = "Saya bisa diakses di mana saja dalam package"

func main() {
    fmt.Println(globalVar)
    contohFunction()
}

func contohFunction() {
    fmt.Println(globalVar) // Bisa mengakses variable global
}

Function Level Variable

package main

import "fmt"

func main() {
    // Function level variable
    localVar := "Saya hanya bisa diakses dalam function ini"
    fmt.Println(localVar)
    
    if true {
        // Block level variable
        blockVar := "Saya hanya bisa diakses dalam block ini"
        fmt.Println(localVar)  // Bisa akses function variable
        fmt.Println(blockVar)  // Bisa akses block variable
    }
    
    // fmt.Println(blockVar) // ERROR! blockVar tidak bisa diakses di sini
}

Assignment dan Reassignment

Setelah variable dideklarasikan, kita dapat mengubah nilainya:

package main

import "fmt"

func main() {
    var nama string = "Awal"
    fmt.Println(nama) // Output: Awal
    
    nama = "Berubah"
    fmt.Println(nama) // Output: Berubah
    
    // Multiple assignment
    var a, b int = 1, 2
    a, b = b, a // Tukar nilai
    fmt.Println(a, b) // Output: 2 1
}

Blank Identifier (_)

Blank identifier digunakan untuk mengabaikan nilai yang tidak diperlukan:

package main

import "fmt"

func getData() (string, int) {
    return "Nama", 25
}

func main() {
    // Hanya ambil nama, abaikan umur
    nama, _ := getData()
    fmt.Println(nama)
    
    // Hanya ambil umur, abaikan nama
    _, umur := getData()
    fmt.Println(umur)
}

Variable dengan Pointer

Variable dapat menyimpan alamat memori dari variable lain menggunakan pointer:

package main

import "fmt"

func main() {
    var angka int = 42
    var pointer *int = &angka
    
    fmt.Println("Nilai angka:", angka)        // Output: 42
    fmt.Println("Alamat angka:", &angka)      // Output: alamat memori
    fmt.Println("Nilai pointer:", pointer)    // Output: alamat memori yang sama
    fmt.Println("Nilai yang ditunjuk:", *pointer) // Output: 42
}

Best Practices

1. Gunakan Nama Variable yang Deskriptif

// Kurang baik
var n string
var a int

// Lebih baik
var namaUser string
var umurUser int

2. Gunakan := untuk Local Variable

func main() {
    // Lebih singkat dan jelas
    nama := "Budi"
    umur := 25
    
    // Daripada
    var nama string = "Budi"
    var umur int = 25
}
var (
    serverHost = "localhost"
    serverPort = 8080
    serverSSL  = false
)

4. Inisialisasi Variable Dekat dengan Penggunaan

func prosesData() {
    // Tidak perlu deklarasi di awal jika tidak langsung digunakan
    
    // ... kode lain ...
    
    // Deklarasi ketika dibutuhkan
    hasil := hitungSesuatu()
    fmt.Println(hasil)
}

Latihan

Latihan 1: Deklarasi Basic

Buat program yang mendeklarasikan variable untuk data personal:

package main

import "fmt"

func main() {
    // TODO: Deklarasikan variable berikut:
    // - nama (string): "Andi Pratama"
    // - umur (int): 28
    // - gaji (float64): 5500000.50
    // - sudahMenikah (bool): true
    
    // Tampilkan semua variable
}

Latihan 2: Multiple Assignment

package main

import "fmt"

func main() {
    // TODO: Gunakan multiple assignment untuk:
    a, b := 10, 20
    // 1. Tukar nilai a dan b
    // 2. Tampilkan hasilnya
}

Latihan 3: Zero Values

package main

import "fmt"

func main() {
    // TODO: Deklarasikan variable tanpa nilai awal dan tampilkan zero value untuk:
    // - int, string, bool, float64
}

Kesimpulan

Variable adalah fondasi dalam programming Go. Poin-poin penting yang harus diingat:

  • Gunakan var untuk deklarasi eksplisit
  • Gunakan := untuk shorthand di dalam function
  • Go memiliki type inference yang membantu
  • Setiap type memiliki zero value
  • Variable memiliki scope berdasarkan lokasi deklarasi
  • Gunakan blank identifier _ untuk mengabaikan nilai

Dengan memahami variable dengan baik, kita dapat menulis kode Go yang efisien dan mudah dibaca. Di bab selanjutnya, kita akan belajar tentang berbagai data type yang tersedia di Go.