Ripasso - Calcolatore di forme
Fa parte della sezione Programmazione orientata agli oggetti del percorso Swift di Coddy. Lezione 36 di 57.
Sfida
DifficileCrea un calcolatore di forme che combina polimorfismo e generici. Il protocollo Shape richiede name, area() e perimeter() (entrambi Double). Implementa Rect, Circle (π come 3.14) e Triangle (tre lati, area calcolata con la formula di Erone usando sqrt da Foundation). Scrivi una funzione generica largest<T>(_ items: [T], by key: (T) -> Double) -> T?. Completa report(_:), che restituisce una riga per forma con due decimali (rect: area 12.00, perimeter 14.00), poi largest area: circle e largest perimeter: rect, entrambi trovati con largest.
Il codice fornito legge righe rect,3,4, circle,2 o tri,3,4,5, crea [any Shape] e stampa ogni riga restituita.
Il tuo codice va inserito in Shape.swift, Rect.swift, Circle.swift, Triangle.swift e Functions.swift. main.swift contiene il codice di input/output fornito e non può essere modificato.
Provalo tu
import Foundation
// Codice di input/output fornito: lascialo così com'è
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) }
Tutte le lezioni di Programmazione orientata agli oggetti
1Classi e oggetti
Lavorare con i fileDefinire le classiMetodi e selfInizializzatoriLe classi sono riferimentiRiepilogo - Tessera della biblioteca4Incapsulamento
Controllo degli accessiSola lettura dall’esternoProteggere lo statoInizializzatori che possono fallireRiepilogo - Conto bancario7Polimorfismo e tipi generici
PolimorfismoCasting dei tipiFunzioni genericheTipi genericiRipasso - Calcolatore di forme2Struct e tipi valore
Le structSemantica dei valoriMetodi mutantiStruct o classeRiepilogo - Articolo di inventario5Ereditarietà
SottoclassiSovrascrivere i metodiInizializzatori e superfinal e gerarchieRiepilogo - Gerarchia dei dipendenti8Protocolli standard
CustomStringConvertibleEquatableComparableHashableRiepilogo - Ordinamento personalizzato11Progetto: Gestione della biblioteca
Libri e utentiPrestito dei libriEsercitati da solo: Playground Swift