Menu
CoddyTech

Mendefinisikan Method pada Struct

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

Di Go, method adalah fungsi yang dimiliki oleh tipe tertentu. Berbeda dengan fungsi biasa yang berdiri sendiri, method melekat pada struct dan memungkinkan kamu menentukan perilaku untuk tipe data kustommu.

Untuk mendefinisikan method, letakkan receiver di antara kata kunci func dan nama method. Receiver menentukan tipe yang memiliki method tersebut.

type Person struct {
    Name string
    Age  int
}

func (p Person) greet() {
    fmt.Printf("Hello, my name is %s\n", p.Name)
}

Dalam contoh ini, (p Person) adalah penerima, sehingga greet menjadi method dari tipe Person. Variabel p mewakili instans Person yang menjadi sasaran pemanggilan method tersebut, mirip dengan this dalam bahasa lain.

Kamu kemudian dapat memanggil method menggunakan notasi titik pada instance Person mana pun, sehingga struct-mu dapat melakukan tindakan yang terkait dengan datanya.

challenge icon

Tantangan

Mudah

Dalam tantangan ini, kamu akan berlatih mendefinisikan method pada struct dengan membuat sistem manajemen buku sederhana. Kamu akan membuat struct Book dan mendefinisikan method yang memungkinkan buku menampilkan informasinya.

Catatan penting: Karena judul buku dan nama penulis dapat berisi spasi, kamu perlu menggunakan bufio.Scanner untuk membaca seluruh baris input. Fungsi fmt.Scanln berhenti membaca pada spasi pertama, sehingga judul dan nama penulis yang terdiri dari beberapa kata tidak akan terbaca dengan benar. Gunakan bufio.NewScanner(os.Stdin) dan panggil scanner.Scan(), lalu scanner.Text() untuk membaca baris secara lengkap.

Kamu akan menerima tiga input:

  • String yang mewakili judul buku (misalnya, "The Go Programming Language")
  • String yang mewakili nama penulis (misalnya, "Alan Donovan")
  • String yang mewakili jumlah halaman (misalnya, "380")

Tugasmu adalah:

  1. Mendefinisikan struct Book dengan tiga field: Title (string), Author (string), dan Pages (int)
  2. Membuat method bernama displayInfo dengan penerima nilai yang mencetak informasi buku dalam format: "Title: [title], Author: [author], Pages: [pages]"
  3. Membuat method bernama getDescription dengan penerima nilai yang mengembalikan string dalam format: "[title] by [author]"
  4. Menggunakan bufio.Scanner untuk membaca baris input dengan benar:
    • Membuat scanner: scanner := bufio.NewScanner(os.Stdin)
    • Untuk setiap baris input: panggil scanner.Scan(), lalu scanner.Text()
    • Ini memastikan judul dan nama penulis yang mengandung spasi terbaca dengan benar
  5. Mengurai input untuk membuat instance Book
  6. Memanggil method displayInfo untuk mencetak informasi buku
  7. Memanggil method getDescription dan mencetak deskripsi yang dikembalikan

Method harus menggunakan variabel penerima untuk mengakses field struct dan menjalankan operasi masing-masing. Ingat, method dengan penerima nilai bekerja menggunakan salinan instance struct.

Coba sendiri

package main

import (
    "bufio"
    "fmt"
    "os"
    "strconv"
)

// TODO: Definisikan struct Book-mu di sini

// TODO: Definisikan method displayInfo-mu di sini

// TODO: Definisikan method getDescription-mu di sini

func main() {
    // Buat scanner untuk membaca baris input
    scanner := bufio.NewScanner(os.Stdin)
    
    // Baca judul
    scanner.Scan()
    title := scanner.Text()
    
    // Baca nama penulis
    scanner.Scan()
    author := scanner.Text()
    
    // Baca jumlah halaman
    scanner.Scan()
    pagesStr := scanner.Text()
    
    // Ubah string pages menjadi bilangan bulat
    pages, _ := strconv.Atoi(pagesStr)
    
    // TODO: Buat instance Book dan panggil method-nya
    
}
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