Latihan 1 dari materi Interface & Polymorphism di Go — praktek dengan editor kode interaktif, test case otomatis, dan hint terpandu. Langsung jalan di browser.
Kode awal sudah punya interface Shape dengan method Area() float64, struct Circle dengan field R dan Area = 3.14 * c.R * c.R, dan slice shapes berisi Circle{R: 5}. Biarkan semuanya.
Buat struct Rectangle dengan field W dan H (keduanya float64), lalu method Area() float64 yang mengembalikan r.W * r.H. Gak perlu menulis implements: punya method Area, berarti Rectangle sudah sebuah Shape.
Buat fungsi totalArea(shapes []Shape) float64 yang menjumlahkan s.Area() dari semua isi slice, tanpa peduli tipe aslinya.
Di main, tambahkan Rectangle{W: 4, H: 6} ke slice shapes, lalu ganti baris cetaknya jadi fmt.Println("Total:", totalArea(shapes)).
Output-nya 78.5 + 24:
Total: 102.5
totalArea juga dicoba dengan bentuk lain: totalArea([]Shape{Circle{R: 1}, Rectangle{W: 2, H: 3}}) harus 9.14.
Hint
Rectangle cukup punya method Area() float64 supaya otomatis jadi Shape. totalArea gak perlu tahu tipe aslinya, cukup memanggil Area() di tiap isi slice.
Tulis type Rectangle struct { W float64; H float64 } dan func (r Rectangle) Area() float64 { ... }, lalu func totalArea(shapes []Shape) float64 dengan total := 0.0 dan for _, s := range shapes.
func totalArea(shapes []Shape) float64 { total := 0.0; for _, s := range shapes { total += s.Area() }; return total }, lalu di main: fmt.Println("Total:", totalArea(shapes))
</>{ }.css=>#idfn()
Versi baru
HyperSheets
bagian dari BelajarWeb.dev
0%
Membuka gerbang…
HyperSheets
Memperbarui Aplikasi
Versi baru tersedia. Halaman akan dimuat ulang otomatis...