مراجعة - حاسبة الأشكال
جزء من قسم البرمجة كائنية التوجه في رحلة 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) }
جميع دروس البرمجة كائنية التوجه
1الأصناف والكائنات
العمل مع الملفاتتعريف الأصنافالأساليب وselfالمُهيِّئاتالأصناف هي مراجعمراجعة - بطاقة المكتبة4التغليف
التحكم في الوصولللقراءة فقط من الخارجحماية الحالةالمهيئات القابلة للفشلمراجعة - الحساب البنكي7تعدد الأشكال والأنواع العامة
تعدد الأشكالتحويل الأنواعالدوال العامةالأنواع العامةمراجعة - حاسبة الأشكالتدرّب بنفسك: Playground لـ Swift