0Pricing
Swift Academy · Lezione

some P (tipi risultato opachi): nascondere i tipi concreti

Restituisca some P per nascondere il tipo restituito concreto, garantendo al contempo la conformità a P ; chi utilizza il codice ottiene prestazioni del controllo statico dei tipi senza esporre l'implementazione.

some P (tipi risultato opachi): nascondere i tipi concreti è una lezione Swift Academy gratuita su CoddyKit. Questa è la lezione 1 di 3. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Swift Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Swift Academy include 3 lezioni in totale.

Perché usare i tipi di risultato opachi?

I tipi di risultato opachi usano some P per nascondere un tipo concreto dietro un protocollo. Il tipo concreto è fisso per quella funzione, ma chi la chiama vede solo l'interfaccia del protocollo.

  • Incapsulamento senza rinunciare alle prestazioni del dispatch statico
  • Ideali per factory e API simili a DSL

Factory opaca di base

makeUnitCircle() restituisce some Shape. Chi la chiama può invocare area(), ma non può fare affidamento sul tipo concreto.

protocol Shape {
    func area() -> Double
}
struct Circle: Shape {
    let r: Double
    func area() -> Double { .pi * r * r }
}
struct Square: Shape {
    let s: Double
    func area() -> Double { s * s }
}

// Opaque factory: callers know it's a Shape, not which one
func makeUnitCircle() -> some Shape {
    Circle(r: 1.0)    // concrete type is hidden
}

let sh = makeUnitCircle()
print(String(format: "%.2f", sh.area()))  // 3.14

Fisso per funzione

Il tipo nascosto è fisso per funzione. Un'altra funzione che restituisce some Shape può nascondere un tipo concreto diverso.

// Each function using "some Shape" chooses one hidden concrete type.
// Within the same function, it must always be the same concrete type.
func makeSquare(side: Double) -> some Shape {
    Square(s: side)   // fixed to Square for this function
}

let a = makeUnitCircle()
let b = makeUnitCircle()
print(a.area() == b.area())  // true for two unit circles

let q = makeSquare(side: 2)
print(q.area())              // 4.0

Un solo tipo nascosto

Regola: una funzione con un valore restituito opaco deve restituire lo stesso tipo concreto lungo ogni percorso. Rami diversi → errore di compilazione.

// ❌ This would NOT compile, because different branches return different concrete types:
// func makeShape(flag: Bool) -> some Shape {
//     if flag {
//         return Circle(r: 1)
//     } else {
//         return Square(s: 1) // error: underlying type must be the same
//     }
// }
// Rule: an opaque-returning function must always produce the same concrete type.

Tipi opachi con i generics

I valori restituiti opachi si combinano con i generics. Chi chiama vede uno Shape, mentre lei mantiene privata l'implementazione Scaled<Circle>.

// A generic decorator that also conforms to Shape
struct Scaled<S: Shape>: Shape {
    let base: S
    let k: Double
    func area() -> Double { base.area() * k * k }
}

// Factory still hides the concrete generic type
func makeScaledUnitCircle(k: Double) -> some Shape {
    Scaled(base: Circle(r: 1.0), k: k)
}

let s1 = makeScaledUnitCircle(k: 2)
print(s1.area())  // 4 * π

Quando scegliere i tipi opachi

Usi i tipi opachi quando:

  • Vuole nascondere l'implementazione mantenendo però la tipizzazione statica.
  • Le API devono restituire una vista del protocollo (ad esempio Shape) senza esporre i tipi concreti.
  • Costruisce pipeline/DSL che concatenano builder rimanendo generiche.

(Nel prossimo corso confronterà questi tipi con i tipi esistenziali.)

Definizione di tipo di risultato opaco

Verifica rapida: che cosa garantisce some P?

Riepilogo

Riepilogo: i tipi di risultato opachi (some P) nascondono i tipi concreti, ma mantengono il dispatch statico. Il tipo sottostante è fisso per funzione; li usi per creare API pulite, veloci e incapsulate.

Domande Frequenti

La lezione «some P (tipi risultato opachi): nascondere i tipi concreti» è gratuita?

Sì — il testo completo di «some P (tipi risultato opachi): nascondere i tipi concreti» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Swift Academy, passa a CoddyKit PRO. Il corso Swift Academy include 3 lezioni in totale.

Cosa imparerò in «some P (tipi risultato opachi): nascondere i tipi concreti»?

Restituisca some P per nascondere il tipo restituito concreto, garantendo al contempo la conformità a P ; chi utilizza il codice ottiene prestazioni del controllo statico dei tipi senza esporre l'imp… Eserciti Swift Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Swift Academy?

Non è richiesta alcuna esperienza precedente. Swift Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 3.

Quanto tempo richiede la lezione «some P (tipi risultato opachi): nascondere i tipi concreti»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Swift Academy?

Sì. Ogni lezione Swift Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. some P (tipi risultato opachi): nascondere i tipi concreti
  2. any P (esistenziale): compromessi e dispatch dinamico
  3. Scegliere tra some, any e generics
← Torna a Swift Academy