Ulasan: Kalkulator Bentuk
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan GO di Coddy. Pelajaran 33 dari 107.
Tantangan
MudahMari kita buat kalkulator bentuk yang menggabungkan semua konsep interface dari bab ini. Kamu akan membuat sistem yang dapat memproses berbagai bentuk geometri secara seragam melalui interface bersama, untuk menunjukkan kehebatan polimorfisme di Go.
Kamu akan mengatur kodemu dalam tiga file:
shape.go: Definisikan interfaceShapedengan dua method:Area() float64danPerimeter() float64. Buat juga fungsi bernamaDescribeShapeyang menerima bentuk apa pun yang memenuhiShapedan mengembalikan string berformat yang menampilkan luas dan kelilingnya.shapes.go: Buat dua struct yang memenuhi interfaceShape:Rectangledengan fieldWidthdanHeightCircledengan fieldRadius
Area()danPerimeter(), serta methodString()(yang menerapkanfmt.Stringer) untuk mengembalikan deskripsi bentuk yang mudah dibaca.main.go: Baca data bentuk dari input, buat bentuk yang sesuai, lalu gunakan fungsiDescribeShapeuntuk menampilkan informasi tentang masing-masing bentuk. Cetak juga setiap bentuk secara langsung untuk menunjukkan interfaceStringer.
Input berikut akan diberikan:
- Baris 1: Lebar Rectangle (float)
- Baris 2: Tinggi Rectangle (float)
- Baris 3: Radius Circle (float)
Untuk perhitungan, gunakan 3.14159 sebagai nilai pi. Keliling Circle adalah 2 * pi * radius.
Method String() milikmu harus mengembalikan:
- Rectangle:
Rectangle(Width x Height) - Circle:
Circle(Radius: R)
Fungsi DescribeShape harus mengembalikan:
Area: [area], Perimeter: [perimeter]Format semua nilai float dengan dua angka di belakang koma menggunakan %.2f.
Contohnya, jika inputnya adalah 4, 3, dan 5, outputmu seharusnya:
Rectangle(4.00 x 3.00)
Area: 12.00, Perimeter: 14.00
Circle(Radius: 5.00)
Area: 78.54, Perimeter: 31.42Cetak setiap bentuk terlebih dahulu menggunakan method String(), lalu cetak deskripsinya dari DescribeShape. Proses Rectangle terlebih dahulu, lalu Circle.
Coba sendiri
package main
import (
"fmt"
)
func main() {
// Baca nilai input
var width, height, radius float64
fmt.Scanln(&width)
fmt.Scanln(&height)
fmt.Scanln(&radius)
// TODO: Buat Rectangle dengan lebar dan tinggi yang diberikan
// TODO: Buat Circle dengan jari-jari yang diberikan
// TODO: Cetak Rectangle (menggunakan method String())
// TODO: Cetak deskripsi Rectangle menggunakan DescribeShape()
// TODO: Cetak Circle (menggunakan method String())
// TODO: Cetak deskripsi Circle menggunakan DescribeShape()
}
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP di Go
File EksternalWorkspace Go dan modulePaket dan ImporNama yang Diekspor dan Tidak DieksporPengantar OOP di Gostruct sebagai classMendefinisikan method pada structPointer receiver vs value receiverInisialisasi structFungsi KonstruktorUlasan: Kalkulator Sederhana4Interface
Pengenalan InterfaceImplementasi ImplisitInterface sebagai KontrakInterface Kosong (any)Type AssertionType SwitchKomposisi InterfaceInterface Stringer & ErrorUlasan: Kalkulator Bentuk7Enkapsulasi
Field yang Diekspor vs Tidak DieksporEnkapsulasi Tingkat PackageMethod Getter dan SetterPenyembunyian Informasi di GoRingkasan: Data Siswa10Generics (Go 1.18+)
Pengantar GenericsParameter TipeBatasan TipeStruct GenerikCara Alternatif untuk Method GenerikRingkasan Koleksi Generik2Mendalami Tipe dan Struct
Tipe Dasar dan KompositDefinisi Tipe KustomTag StructStruct AnonimStruct BersarangNilai Nol dan Nilai BawaanRangkuman: Buku Kontak5Komposisi daripada Pewarisan
Mengapa Go Tidak Memiliki PewarisanDasar Penyematan StructPromosi methodMenyematkan Beberapa StructPenyematan vs AgregasiMembayangi method yang DisematkanRangkuman: Hierarki Karyawan8Penanganan Error & OOP
Interface errorTipe Error KustomPembungkusan Error (fmt.Errorf)Error Sentinelerrors.Is() dan errors.As()Panic, Defer, dan RecoverRangkuman: Parser File3Pointer dan Memori
Dasar-Dasar Pointer di GoPointer ke StructPass by Value vs ReferenceFungsi new()Garbage Collection di GoRekap: Pembuat Linked List6Polimorfisme di Go
Polimorfisme melalui InterfaceDuck Typing di GoAturan Pemenuhan InterfaceKoleksi PolimorfikInjeksi DependensiRangkuman: Pemroses Pembayaran9Konkruensi & OOP
Dasar-dasar GoroutineChannel & KomunikasiChannel Ber-buffer vs Tanpa BufferPernyataan selectsync.Mutex & sync.RWMutexsync.WaitGroupDesain Struct yang Aman untuk ThreadRingkasan: Worker PoolLatihan sendiri: Compiler Go online