Ôn tập: Máy tính hình dạng
Thuộc phần Lập trình hướng đối tượng trong hành trình Swift của Coddy. Bài học 36 trên 57.
Thử thách
KhóHãy xây dựng một chương trình tính toán hình học kết hợp tính đa hình và kiểu tổng quát. Giao thức Shape yêu cầu có name, area() và perimeter() (cả hai đều có kiểu Double). Hãy triển khai Rect, Circle (π là 3.14) và Triangle (ba cạnh, tính diện tích theo công thức Heron với sqrt từ Foundation). Viết một hàm tổng quát largest<T>(_ items: [T], by key: (T) -> Double) -> T?. Hoàn thiện report(_:), hàm này trả về một dòng cho mỗi hình với hai chữ số thập phân (rect: area 12.00, perimeter 14.00), sau đó là largest area: circle và largest perimeter: rect, cả hai đều được tìm bằng largest.
Code được cung cấp sẽ đọc các dòng rect,3,4, circle,2 hoặc tri,3,4,5, tạo [any Shape] và in ra từng dòng được trả về.
Code của bạn nằm trong các tệp Shape.swift, Rect.swift, Circle.swift, Triangle.swift và Functions.swift. main.swift chứa code đầu vào/đầu ra được cung cấp và bạn không thể chỉnh sửa tệp này.
Tự làm thử
import Foundation
// Đoạn code đầu vào/đầu ra có sẵn: giữ nguyên
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) }
Tất cả bài học trong Lập trình hướng đối tượng
1Lớp và đối tượng
Làm việc với tệpĐịnh nghĩa lớpPhương thức và selfHàm khởi tạoLớp là tham chiếuÔn tập: Thẻ thư viện2Struct và kiểu giá trị
StructNgữ nghĩa giá trịPhương thức thay đổiStruct hay classÔn tập: mặt hàng trong kho5Kế thừa
Lớp conGhi đè phương thứcHàm khởi tạo và superfinal và hệ phân cấpÔn tập: hệ phân cấp nhân viên8Các giao thức tiêu chuẩn
CustomStringConvertibleEquatableComparableHashableÔn tập: Sắp xếp tùy chỉnhTự luyện tập: Playground Swift