0Pricing
Swift Academy · Leçon

Choisir entre some, any et les génériques

Choisissez les génériques pour un typage statique homogène, some P pour masquer un type concret fixe et any P pour le polymorphisme hétérogène.

Choisir entre some, any et les génériques est une leçon Swift Academy gratuite sur CoddyKit. Ceci est la leçon 3 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.

Quand choisir quelle option ?

Règle générale :

  • Génériques : même type concret pour chaque appel ; meilleurs contrôles à la compilation et meilleures performances.
  • some P : masque le type de retour concret, fixe pour chaque fonction.
  • any P : mélange des conformes (hétérogènes), avec dispatch dynamique.

Génériques : homogènes

Les génériques sont idéaux pour les données homogènes et l'optimisation (dispatch statique, insertion directe).

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 } }

// Generic: one concrete Shape type per call site (homogeneous)
func totalAreaGeneric<S: Sequence, T: Shape>(_ xs: S) -> Double where S.Element == T {
    xs.reduce(0) { $0 + $1.area() }
}
print(totalAreaGeneric([Circle(r:1), Circle(r:2)]))  // OK
// totalAreaGeneric([Circle(r:1), Square(s:2)])      // ❌ different types

Opaque : masqué mais fixe

some P renvoie un type fixe mais masqué. C'est idéal lorsque vous souhaitez une encapsulation sans perdre les performances statiques.

// Opaque factory hides the concrete type while guaranteeing Shape
func unitShape(flag: Bool) -> some Shape {
    // Must return the SAME underlying type on all paths; pick one.
    Circle(r: 1)
}
let s = unitShape(flag: true)
print(String(format: "%.2f", s.area()))  // 3.14

any P : hétérogène

any P permet de regrouper des types mixtes dans une même collection ou variable ; les méthodes sont distribuées dynamiquement via l'interface du protocole.

// Existential: store mixed conformers
let mixed: [any Shape] = [Circle(r: 1), Square(s: 2)]
let sum = mixed.reduce(0) { $0 + $1.area() }   // dynamic dispatch
print(String(format: "%.2f", sum))

Comparaison des formes d'API

Choisissez l'interface exposée :

  • Générique : l'appelant contrôle le type concret.
  • Opaque : vous masquez le type, qui reste fixe pour chaque fonction.
  • Existentiel : les types concrets peuvent varier dynamiquement.
// Three API shapes for the same idea: "make a Shape"

// 1) Generic return — exposes concrete type to caller
func makeGeneric<T: Shape>(_ t: T) -> T { t }

// 2) Opaque return — hides concrete type but fixed
func makeOpaqueCircle() -> some Shape { Circle(r: 1) }

// 3) Existential return — can return any conformer
func makeExistential(_ big: Bool) -> any Shape { big ? Square(s: 3) : Circle(r: 1) }

let g: Circle = makeGeneric(Circle(r: 2))      // caller knows concrete type
let o = makeOpaqueCircle()                      // caller sees only Shape
let e = makeExistential(true)                   // could be Circle or Square at runtime
print(g.area(), o.area(), e.area())

Aide-mémoire

Recommandations :

  • Préférez les génériques pour les performances et le typage fort lorsque les données sont homogènes.
  • Utilisez some P pour masquer les types de retour et conserver des API stables.
  • Utilisez any P pour les collections de modules d'extension ou les collections mixtes.
  • Évitez any P pour les protocoles comportant des types associés ou Self, sauf si vous effacez le type.

Vérification : choisir some, any ou les génériques

Vérification rapide : quelle option masque un type de retour concret fixe derrière le protocole P ?

Récapitulatif

Récapitulatif :

  • Génériques = homogènes, les plus rapides et les plus statiques.
  • some P = type concret masqué, fixe pour chaque fonction.
  • any P = hétérogènes, avec dispatch dynamique.

Questions Fréquemment Posées

La leçon « Choisir entre some, any et les génériques » est-elle gratuite ?

Oui — le texte complet de « Choisir entre some, any et les génériques » 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 « Choisir entre some, any et les génériques » ?

Choisissez les génériques pour un typage statique homogène, some P pour masquer un type concret fixe et any P pour le polymorphisme hétérogène. 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 3 sur 3.

Combien de temps prend la leçon « Choisir entre some, any et les génériques » ?

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