Swift Academy · Leçon

some P (types de résultat opaques) : masquer les types concrets

Renvoyez some P pour masquer le type de retour concret tout en garantissant sa conformité à P ; les appelants bénéficient des performances du typage statique sans exposer l’implémentation.

Leçon 1 sur 38 étapes

some P (types de résultat opaques) : masquer les types concrets est une leçon Swift Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 3. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Swift Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Swift Academy comprend 3 leçons au total.

Pourquoi utiliser des types de résultat opaques ?

Les types de résultat opaques utilisent some P pour masquer un type concret derrière un protocole. Le type concret est fixe pour cette fonction, mais les appelants ne voient que l'interface du protocole.

  • Encapsulation sans sacrifier les performances statiques
  • Idéal pour les fabriques et les API semblables aux DSL

Fabrique opaque de base

makeUnitCircle() renvoie some Shape. Les appelants peuvent appeler area(), mais ne peuvent pas dépendre du type concret.

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

Fixe pour chaque fonction

Le type masqué est fixe pour chaque fonction. Une autre fonction renvoyant some Shape peut masquer un type concret différent.

// 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 seul type masqué

Règle : une fonction dont le retour est opaque doit renvoyer le même type concret sur tous les chemins d'exécution. Des branches différentes → erreur de compilation.

// ❌ 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.

Types opaques et génériques

Les retours opaques se composent avec les génériques. L'appelant voit un Shape, tandis que vous gardez l'implémentation Scaled<Circle> privée.

// 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 * π

Quand choisir l'opacité

Utilisez des types opaques lorsque :

  • Vous souhaitez masquer l'implémentation tout en conservant le typage statique.
  • Les API doivent renvoyer une vue de protocole (par exemple, Shape) sans exposer les types concrets.
  • Vous créez des chaînes de traitement/DSL qui enchaînent des créateurs tout en restant génériques.

(Vous les comparerez aux types existentiels dans la prochaine leçon.)

Définition d'un résultat opaque

Vérification rapide : que garantit some P ?

Récapitulatif

Récapitulatif : les types de résultat opaques (some P) masquent les types concrets tout en conservant le dispatch statique. Le type sous-jacent est fixe pour chaque fonction ; utilisez-les pour des API propres, rapides et encapsulées.

Gratuit pour commencer

Apprends Swift avec un tuteur IA — gratuit

Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.

Cours
122
Leçons
409

Questions Fréquemment Posées

La leçon « some P (types de résultat opaques) : masquer les types concrets » est-elle gratuite ?

Oui — le texte complet de « some P (types de résultat opaques) : masquer les types concrets » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Swift Academy, passe à CoddyKit PRO. Le cours Swift Academy comprend 3 leçons au total.

Qu'est-ce que j'apprendrai dans « some P (types de résultat opaques) : masquer les types concrets » ?

Renvoyez some P pour masquer le type de retour concret tout en garantissant sa conformité à P ; les appelants bénéficient des performances du typage statique sans exposer l’implémentation. Tu pratiques Swift Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Swift Academy ?

Aucune expérience préalable n'est requise. Swift Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 3.

Combien de temps prend la leçon « some P (types de résultat opaques) : masquer les types concrets » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Swift Academy ?

Oui. Chaque leçon Swift Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. some P (types de résultat opaques) : masquer les types concrets
  2. any P (existentiel) : compromis et répartition dynamique
  3. Choisir entre some, any et les génériques
← Retour à Swift Academy