Menu
CoddyTech

Pengenalan Interface

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

Interface di Go mendefinisikan sekumpulan tanda tangan method tanpa mengimplementasikannya. Interface menjelaskan apa yang dapat dilakukan oleh suatu tipe, bukan bagaimana cara melakukannya. Tipe apa pun yang mengimplementasikan semua method dalam sebuah interface otomatis memenuhi interface tersebut.

Berikut cara mendefinisikan interface:

type Speaker interface {
    Speak() string
}

Interface Speaker ini mengharuskan setiap tipe yang mengimplementasikannya memiliki method Speak() yang mengembalikan string. Sekarang, struct apa pun dengan method ini dapat digunakan di mana pun Speaker diharapkan.

type Dog struct {
    Name string
}

func (d Dog) Speak() string {
    return d.Name + " says woof!"
}

type Cat struct {
    Name string
}

func (c Cat) Speak() string {
    return c.Name + " says meow!"
}

Dog dan Cat sama-sama memenuhi interface Speaker karena keduanya memiliki method Speak() dengan signature yang benar. Sekarang kamu bisa menulis fungsi yang menerima Speaker apa pun:

func MakeSound(s Speaker) {
    fmt.Println(s.Speak())
}

func main() {
    dog := Dog{Name: "Buddy"}
    cat := Cat{Name: "Whiskers"}
    
    MakeSound(dog)  // Buddy berkata guk!
    MakeSound(cat)  // Whiskers berkata meong!
}

Antarmuka memungkinkan kamu menulis kode yang fleksibel dan dapat digunakan kembali, yang berfungsi dengan tipe apa pun yang memenuhi persyaratan antarmuka, apa pun implementasi yang mendasarinya.

challenge icon

Tantangan

Mudah

Mari buat sistem deskripsi kendaraan yang menunjukkan cara interface memungkinkan berbagai tipe berbagi perilaku umum. Kamu akan membuat interface yang dapat dipenuhi oleh beberapa tipe kendaraan, lalu menggunakannya untuk mendeskripsikan kendaraan apa pun dengan cara yang seragam.

Kamu akan mengatur kodemu dalam dua file:

  • vehicles.go: Definisikan interface Describer dengan satu method Describe() string. Lalu buat dua struct yang memenuhi interface ini:
    • Car dengan field Brand dan Model (keduanya bertipe string)
    • Bicycle dengan field Type (string) dan Gears (int)
    Setiap struct harus memiliki method Describe() yang mengembalikan string deskriptif tentang kendaraan tersebut.
  • main.go: Buat fungsi bernama PrintDescription yang menerima Describer apa pun dan mencetak hasil pemanggilan method Describe()-nya. Baca informasi kendaraan dari input, buat satu Car dan satu Bicycle, lalu gunakan fungsimu untuk mencetak deskripsi masing-masing.

Input berikut akan diberikan:

  • Baris 1: Merek Car
  • Baris 2: Model Car
  • Baris 3: Tipe Bicycle
  • Baris 4: Jumlah gigi (integer)

Method Describe()-mu harus mengembalikan string dengan format berikut:

  • Car: [Brand] [Model]
  • Bicycle: [Type] bike with [Gears] gears

Contohnya, jika diberikan Toyota, Camry, Mountain, dan 21, output-mu seharusnya:

Toyota Camry
Mountain bike with 21 gears

Inti pentingnya adalah fungsi PrintDescription-mu dapat bekerja dengan tipe apa pun yang memiliki method Describe(). Fungsi ini tidak perlu mengetahui apakah yang ditanganinya adalah Car, Bicycle, atau tipe kendaraan lain yang mungkin kamu tambahkan nanti.

Coba sendiri

package main

import (
	"fmt"
)

// TODO: Buat fungsi PrintDescription yang menerima Describer apa pun
// dan mencetak hasil pemanggilan method Describe() miliknya

func main() {
	// Baca input
	var carBrand string
	var carModel string
	var bicycleType string
	var gears int

	fmt.Scanln(&carBrand)
	fmt.Scanln(&carModel)
	fmt.Scanln(&bicycleType)
	fmt.Scanln(&gears)

	// TODO: Buat Car dengan merek dan model dari input

	// TODO: Buat Bicycle dengan jenis dan jumlah gigi dari input

	// TODO: Gunakan PrintDescription untuk mencetak deskripsi mobil

	// TODO: Gunakan PrintDescription untuk mencetak deskripsi sepeda
}
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