Menu
CoddyTech

Penerima Pointer

Termasuk bagian Logika & Alur dalam perjalanan GO di Coddy. Pelajaran 8 dari 68.

Receiver nilai bekerja dengan salinan struct, sedangkan receiver pointer bekerja langsung dengan instance struct asli. Saat kamu mendefinisikan method dengan receiver pointer, method tersebut dapat mengubah data asli karena menerima pointer ke struct, bukan salinannya.

Untuk membuat receiver pointer, tambahkan tanda bintang * sebelum nama tipe dalam deklarasi receiver:

type Person struct {
    Name string
    Age  int
}

func (p *Person) haveBirthday() {
    p.Age++  // Ini mengubah struct asli
}

Dalam contoh ini, (p *Person) adalah receiver pointer. Saat kamu memanggil method haveBirthday pada instance Person, method tersebut menerima pointer ke struct asli. Setiap perubahan pada field struct melalui pointer ini akan mengubah data asli secara permanen.

Pointer receiver sangat penting saat method-mu perlu memperbarui field struct, sehingga cocok untuk operasi yang mengubah keadaan datamu.

challenge icon

Tantangan

Mudah

Dalam tantangan ini, kamu akan berlatih membuat method dengan pointer receiver dengan membangun sistem rekening bank sederhana. Kamu akan membuat struct Account dan mendefinisikan method yang dapat mengubah saldo rekening menggunakan pointer receiver.

Kamu akan menerima tiga input:

  • String yang mewakili nama pemilik rekening (misalnya, "John Smith")
  • String yang mewakili saldo awal rekening (misalnya, "1000.50")
  • String yang mewakili jumlah transaksi (misalnya, "250.75")

Tugasmu adalah:

  1. Mendefinisikan struct Account dengan dua field: Name (string) dan Balance (float64)
  2. Membuat method bernama deposit dengan pointer receiver yang menambahkan jumlah yang diberikan ke saldo rekening
  3. Membuat method bernama withdraw dengan pointer receiver yang mengurangi jumlah yang diberikan dari saldo rekening
  4. Membuat method bernama displayBalance dengan value receiver yang menampilkan informasi rekening dalam format: "Account: [name], Balance: $[balance]"
  5. Mengurai input untuk membuat instance Account
  6. Memanggil displayBalance untuk menampilkan saldo awal
  7. Memanggil deposit dengan jumlah transaksi
  8. Memanggil displayBalance untuk menampilkan saldo setelah deposit
  9. Memanggil withdraw dengan jumlah transaksi
  10. Memanggil displayBalance untuk menampilkan saldo akhir

Saldo harus ditampilkan dengan presisi dua angka desimal. Tantangan ini menunjukkan bagaimana pointer receiver memungkinkan method mengubah data struct asli, berbeda dengan value receiver yang bekerja dengan salinan.

Coba sendiri

package main

import (
	"fmt"
	"strconv"
)

// TODO: Definisikan struct Account di sini

// TODO: Definisikan method deposit dengan penerima pointer di sini

// TODO: Definisikan method withdraw dengan penerima pointer di sini

// TODO: Definisikan method displayBalance dengan penerima nilai di sini

func main() {
	// Baca input
	var name string
	var initialBalanceStr string
	var transactionAmountStr string
	
	fmt.Scanln(&name)
	fmt.Scanln(&initialBalanceStr)
	fmt.Scanln(&transactionAmountStr)
	
	// Konversi input string ke tipe data yang sesuai
	initialBalance, _ := strconv.ParseFloat(initialBalanceStr, 64)
	transactionAmount, _ := strconv.ParseFloat(transactionAmountStr, 64)
	
	// TODO: Buat instance Account
	
	// TODO: Tampilkan saldo awal, lakukan deposit, tampilkan saldo, lakukan penarikan, lalu tampilkan saldo akhir
}
quiz iconUji dirimu

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

Semua pelajaran di Logika & Alur

Latihan sendiri: Compiler Go online