Menu
CoddyTech

Method Getter dan Setter

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan GO di Coddy. Pelajaran 49 dari 107.

Karena field yang tidak diekspor tidak dapat diakses langsung dari luar package, kamu perlu menyediakan method yang memungkinkan akses terkontrol. Method ini biasanya disebut getter dan setter.

Di Go, konvensi untuk getter sederhana: gunakan nama field dengan huruf pertama kapital. Jangan tambahkan awalan "Get", cukup gunakan Balance(), bukan GetBalance():

type BankAccount struct {
    balance int  // tidak diekspor
}

// Getter: mengembalikan nilai
func (b *BankAccount) Balance() int {
    return b.balance
}

// Setter: mengubah nilai dengan validasi
func (b *BankAccount) SetBalance(amount int) {
    if amount >= 0 {
        b.balance = amount
    }
}

Kekuatan sebenarnya dari setter adalah menambahkan validasi atau logika bisnis. Alih-alih membiarkan kode eksternal menetapkan nilai apa pun secara langsung, kamu mengontrol apa yang diizinkan:

func (b *BankAccount) Deposit(amount int) bool {
    if amount <= 0 {
        return false
    }
    b.balance += amount
    return true
}

method Deposit ini bertindak sebagai setter khusus yang menerapkan aturan: setoran negatif tidak diizinkan. Kode eksternal harus menggunakan method milikmu agar struct selalu berada dalam kondisi yang valid. Inilah enkapsulasi dalam praktik: menyembunyikan data sambil menyediakan perilaku yang terkontrol.

challenge icon

Tantangan

Mudah

Mari buat konverter suhu yang menunjukkan enkapsulasi yang tepat menggunakan method getter dan setter. Kamu akan membuat struct yang menyimpan suhu secara internal dalam Celsius, tetapi menyediakan akses terkontrol melalui method dengan validasi.

Kamu akan mengatur kodemu dalam dua file:

  • temperature.go: Buat struct Temperature dengan field celsius yang tidak diekspor (float64). Implementasikan method berikut:
    • Celsius() - getter yang mengembalikan suhu saat ini dalam Celsius
    • SetCelsius(value float64) - setter yang hanya menerima nilai pada atau di atas nol mutlak (-273.15). Jika nilainya di bawah ambang ini, suhu harus tetap tidak berubah.
    • Fahrenheit() - mengembalikan suhu yang dikonversi ke Fahrenheit menggunakan rumus: (celsius * 9/5) + 32
    • SetFahrenheit(value float64) - mengonversi input dari Fahrenheit ke Celsius dan menyimpannya, tetapi hanya jika nilai Celsius hasil konversi berada pada atau di atas -273.15
    Tambahkan juga constructor NewTemperature(celsius float64) *Temperature yang membuat suhu dengan nilai awal yang diberikan (anggap input untuk constructor valid).
  • main.go: Baca nilai suhu dari input dan tunjukkan method getter/setter. Buat suhu, tampilkan nilainya dalam kedua satuan, lalu coba atur nilai baru dan tampilkan hasilnya.

Input berikut akan diberikan:

  • Baris 1: Nilai Celsius awal
  • Baris 2: Nilai Celsius baru yang akan diatur
  • Baris 3: Nilai Fahrenheit baru yang akan diatur

Format semua output suhu dengan dua angka di belakang koma. Cetak urutan berikut:

  1. Setelah dibuat: C: [celsius] F: [fahrenheit]
  2. Setelah mengatur Celsius: C: [celsius] F: [fahrenheit]
  3. Setelah mengatur Fahrenheit: C: [celsius] F: [fahrenheit]

Misalnya, jika diberikan 25, -300, dan 212, outputmu seharusnya:

C: 25.00 F: 77.00
C: 25.00 F: 77.00
C: 100.00 F: 212.00

Perhatikan bahwa baris kedua menunjukkan nilai yang tidak berubah karena -300 berada di bawah nol mutlak, sehingga setter menolaknya. Baris ketiga menunjukkan suhu setelah berhasil mengatur 212°F (yang dikonversi menjadi 100°C). Inilah keunggulan setter. Setter menerapkan aturan yang menjaga datamu tetap valid.

Coba sendiri

package main

import (
	"fmt"
)

func main() {
	// Baca nilai input
	var initialCelsius float64
	var newCelsius float64
	var newFahrenheit float64
	fmt.Scanln(&initialCelsius)
	fmt.Scanln(&newCelsius)
	fmt.Scanln(&newFahrenheit)

	// TODO: Buat Temperature baru menggunakan konstruktor

	// TODO: Cetak nilai awal dalam format "C: [celsius] F: [fahrenheit]" dengan 2 angka di belakang koma

	// TODO: Coba atur nilai Celsius baru dan cetak hasilnya

	// TODO: Coba atur nilai Fahrenheit baru dan cetak hasilnya
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Go online