סיכום - מחשבון צורות
חלק מהיחידה תכנות מונחה עצמים במסלול ה-Swift של Coddy. שיעור 36 מתוך 57.
אתגר
קשהבנו מחשבון צורות שמשלב פולימורפיזם וגנריקה. הפרוטוקול Shape דורש את name, את area() ואת perimeter() (שניהם מסוג Double). ממשו את Rect, את Circle (π בתור 3.14) ואת Triangle (שלוש צלעות, שטח לפי נוסחת הרון עם sqrt מתוך Foundation). כתבו פונקציה גנרית largest<T>(_ items: [T], by key: (T) -> Double) -> T?. השלימו את report(_:), שמחזירה שורה אחת לכל צורה עם שתי ספרות אחרי הנקודה (rect: area 12.00, perimeter 14.00), ולאחר מכן את largest area: circle ואת largest perimeter: rect, ששניהם נמצאים באמצעות largest.
הקוד שסופק קורא שורות rect,3,4, circle,2 או tri,3,4,5, בונה [any Shape] ומדפיס כל שורה שהוחזרה.
כתבו את הקוד שלכם בקבצים Shape.swift, Rect.swift, Circle.swift, Triangle.swift ו-Functions.swift. הקובץ main.swift מכיל את קוד הקלט/פלט שסופק ואי אפשר לערוך אותו.
נסו בעצמכם
import Foundation
// קוד קלט/פלט שסופק: יש להשאיר אותו כפי שהוא
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) }
כל השיעורים ביחידה תכנות מונחה עצמים
7פולימורפיזם וטיפוסים גנריים
פולימורפיזםהמרת טיפוסיםפונקציות גנריותטיפוסים גנרייםסיכום - מחשבון צורותתרגלו בעצמכם: Swift אונליין