Inférence de type
Laissez le compilateur déterminer les types.
Inférence de type est une leçon Scala for Backend Engineering & Functional Programming gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. 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 Scala for Backend Engineering & Functional Programming, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Scala for Backend Engineering & Functional Programming comprend 4 leçons au total.
Qu'est-ce que l'inférence de type ?
Scala est à typage statique, mais vous devez rarement écrire les types. Le compilateur les déduit à partir de la valeur située à droite.
Vous bénéficiez ainsi de la sécurité des types et de la concision d'un langage dynamique.
val n = 42 // inferred Int
val label = "hi" // inferred StringInférence à partir de littéraux
Lorsque vous écrivez val x = 5, le compilateur voit le littéral Int et attribue à x le type Int.
Un littéral décimal devient un Double, et un texte entre guillemets devient une String.
object Main extends App {
val count = 5
val ratio = 1.5
println(count + ratio)
}Inférence des valeurs de retour de fonctions
Le compilateur peut également déduire le type de retour d'une méthode à partir de son corps.
Ici, square renvoie un Int, car son corps multiplie deux valeurs Int. Vous n'avez pas eu besoin de l'indiquer.
object Main extends App {
def square(x: Int) = x * x
println(square(6))
}Les paramètres nécessitent toujours un type
L'inférence a ses limites. Les paramètres d'une méthode doivent être annotés, car le compilateur n'a aucune information à partir de laquelle les déduire.
L'extrait ci-dessous ne pourrait pas être compilé sans le : Int sur x.
def increment(x: Int) = x + 1 // type on x is requiredType commun inféré
Lorsque les valeurs peuvent avoir plusieurs types, Scala infère le type commun le plus spécifique.
Mélanger un Int et un Double dans une opération arithmétique élargit le résultat en Double.
object Main extends App {
val mixed = 3 + 2.0 // Double
println(mixed)
}Inférence dans les collections
Les collections déduisent le type de leurs éléments à partir des valeurs que vous y placez.
Une liste d'entiers devient automatiquement List[Int] ; vous conservez donc toute la sécurité des types sans annotations.
object Main extends App {
val nums = List(1, 2, 3) // List[Int]
println(nums.sum)
}Quand l'inférence vous surprend
Parfois, l'inférence choisit un type plus large que vous ne le souhaitez. Une liste de nombres mélangés peut inférer List[Double], voire List[AnyVal].
Si le type inféré ne convient pas à vos besoins, ajoutez une annotation explicite.
val a = List(1, 2.0) // List[Double]
val b = List(1, "two") // List[Any]Remplacer l'inférence par des annotations
Vous pouvez toujours être explicite. Annoter un type documente votre intention et remplace une inférence trop restrictive.
Ici, le littéral 7 est volontairement élargi en Long.
val seconds: Long = 7
val data: List[Int] = List(1, 2, 3)API publiques : soyez explicite
Une règle de style courante consiste à laisser l'inférence gérer les val locaux, mais à écrire explicitement les types de retour des méthodes publiques.
Le contrat de votre bibliothèque reste ainsi stable, même si l'implémentation change.
def total(items: List[Int]): Int = items.sumL'inférence préserve la sécurité des types
L'inférence n'affaiblit pas le système de types. Le compilateur rejette toujours les opérations invalides.
Ci-dessous, name est inféré comme une String ; la multiplier par un nombre échoue donc à la compilation, comme il se doit.
val name = "Lia"
val bad = name * 3 // error: value * is not a member of String in this senseUn val inféré reste immuable
L'inférence complète uniquement le type. Elle ne modifie pas le caractère mutable ou non d'une liaison.
Un val n = 10 reste immuable et fixé comme un Int ; le compilateur vous a simplement évité d'écrire : Int.
object Main extends App {
val n = 10 // inferred Int, still a val
println(n * n)
}Vérification rapide
Dans quel cas Scala exige-t-il encore que vous écriviez un type ?
Récapitulatif
L'inférence de type permet à Scala de rester concis sans perdre la sécurité du typage statique.
- Les
vallocaux et les types de retour sont généralement inférés. - Les paramètres des méthodes doivent être annotés.
- L'inférence choisit le type commun le plus spécifique.
- Utilisez une annotation explicite pour les API publiques ou pour remplacer une inférence surprenante.
Questions Fréquemment Posées
La leçon « Inférence de type » est-elle gratuite ?
Oui — le texte complet de « Inférence de type » 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 Scala for Backend Engineering & Functional Programming, passe à CoddyKit PRO. Le cours Scala for Backend Engineering & Functional Programming comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Inférence de type » ?
Laissez le compilateur déterminer les types. Tu pratiques Scala for Backend Engineering & Functional Programming 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 Scala for Backend Engineering & Functional Programming ?
Aucune expérience préalable n'est requise. Scala for Backend Engineering & Functional Programming 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 4.
Combien de temps prend la leçon « Inférence de type » ?
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 Scala for Backend Engineering & Functional Programming ?
Oui. Chaque leçon Scala for Backend Engineering & Functional Programming 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.