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 typesOpaque : 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.14any 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
- some P (types de résultat opaques) : masquer les types concrets
- any P (existentiel) : compromis et répartition dynamique
- Choisir entre some, any et les génériques