Podsumowanie – kalkulator kształtów
Część sekcji Programowanie obiektowe ścieżki Swift w Coddy. Lekcja 36 z 57.
Wyzwanie
TrudnyZbuduj kalkulator figur łączący polimorfizm i typy generyczne. Protokół Shape wymaga właściwości name oraz metod area() i perimeter() (obie zwracają Double). Zaimplementuj Rect, Circle (π jako 3.14) i Triangle (trzy boki, pole obliczane ze wzoru Herona przy użyciu sqrt z Foundation). Napisz funkcję generyczną largest<T>(_ items: [T], by key: (T) -> Double) -> T?. Uzupełnij report(_:), która zwraca po jednym wierszu na figurę z dwoma miejscami po przecinku (rect: area 12.00, perimeter 14.00), a następnie largest area: circle i largest perimeter: rect, oba wyszukane za pomocą largest.
Dostarczony kod odczytuje wiersze rect,3,4, circle,2 lub tri,3,4,5, tworzy [any Shape] i wypisuje każdy zwrócony wiersz.
Twój kod umieść w plikach Shape.swift, Rect.swift, Circle.swift, Triangle.swift i Functions.swift. main.swift zawiera dostarczony kod wejścia/wyjścia i nie można go edytować.
Spróbuj swoich sił
import Foundation
// Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
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) }
Wszystkie lekcje w sekcji Programowanie obiektowe
1Klasy i obiekty
Praca z plikamiDefiniowanie klasMetody i selfInicjalizatoryKlasy są referencjamiPowtórzenie — karta biblioteczna4Hermetyzacja
Kontrola dostępuTylko do odczytu z zewnątrzOchrona stanuInicjalizatory, które mogą zawieśćPodsumowanie — konto bankowe7Polimorfizm i typy generyczne
PolimorfizmRzutowanie typówFunkcje generyczneTypy generycznePodsumowanie – kalkulator kształtów2Struktury i typy wartościowe
StrukturySemantyka wartościMetody modyfikująceStruktura czy klasaPodsumowanie – element inwentarza5Dziedziczenie
PodklasyPrzesłanianie metodInicjalizatory i superfinal i hierarchiePodsumowanie — hierarchia pracowników8Standardowe protokoły
CustomStringConvertibleEquatableComparableHashablePodsumowanie — własne sortowanie11Projekt: Zarządzanie biblioteką
Książki i czytelnicyWypożyczanie książekPoćwicz samodzielnie: Edytor online Swift