Rangkuman: Kalkulator Bentuk
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Swift di Coddy. Pelajaran 36 dari 57.
Tantangan
SulitBuat kalkulator bentuk yang menggabungkan polimorfisme dan generik. Protokol Shape mewajibkan name, area() dan perimeter() (keduanya bertipe Double). Implementasikan Rect, Circle (π sebagai 3.14) dan Triangle (tiga sisi, luas dihitung dengan rumus Heron menggunakan sqrt dari Foundation). Tulis fungsi generik largest<T>(_ items: [T], by key: (T) -> Double) -> T?. Lengkapi report(_:), yang mengembalikan satu baris untuk setiap bentuk dengan dua angka desimal (rect: area 12.00, perimeter 14.00), lalu largest area: circle dan largest perimeter: rect, keduanya dicari menggunakan largest.
Kode yang disediakan membaca baris rect,3,4, circle,2 atau tri,3,4,5, membuat [any Shape] dan mencetak setiap baris yang dikembalikan.
Tulis kodemu di Shape.swift, Rect.swift, Circle.swift, Triangle.swift dan Functions.swift. main.swift berisi kode input/output yang disediakan dan tidak boleh diedit.
Coba sendiri
import Foundation
// Kode input/output yang disediakan: biarkan apa adanya
var input: [String] = []
while let line = readLine() { input.append(line) }
var shapes: [any Shape] = []
for line in input {
let p = line.split(separator: ",").map(String.init)
let v = p.dropFirst().map { Double($0)! }
switch p[0] {
case "rect": shapes.append(Rect(w: v[0], h: v[1]))
case "circle": shapes.append(Circle(r: v[0]))
default: shapes.append(Triangle(a: v[0], b: v[1], c: v[2]))
}
}
for line in report(shapes) { print(line) }
Semua pelajaran di Pemrograman Berorientasi Objek
1Class dan Object
Bekerja dengan FileMendefinisikan ClassMethod dan selfInitializerClass adalah ReferensiUlasan: Kartu Perpustakaan4Enkapsulasi
Kontrol AksesHanya Bisa Dibaca dari LuarMelindungi StateInitializer yang Bisa GagalRangkuman: Rekening Bank7Polimorfisme dan Generik
PolimorfismeKonversi TipeFungsi GenerikTipe GenerikRangkuman: Kalkulator Bentuk2Struct dan Tipe Nilai
StructSemantik NilaiMethod yang Mengubah NilaiStruct atau classRangkuman, Item Inventaris11Proyek: Manajemen Perpustakaan
Buku dan AnggotaPeminjaman BukuLatihan sendiri: Playground Swift