Les classes en ligne dans Kotlin vous permettent d'envelopper une valeur unique avec un type personnalisé pour améliorer la sécurité et la lisibilité du code. Contrairement aux classes normales, les classes en ligne n'ajoutent pas de surcharge d'exécution puisqu'elles sont « intégrées » par le compilateur, ce qui signifie qu'aucun objet réel n'est créé au moment de l'exécution. Cet article explore pourquoi et où utiliser les classes en ligne, en quoi elles diffèrent des typealias et inclut des exemples.
Sécurité des types : les classes en ligne aident à empêcher l'utilisation accidentelle de types de données similaires. Par exemple, un UserId et un ProductId peuvent tous deux être représentés sous forme de chaînes, mais ce ne sont pas des concepts interchangeables. Les classes en ligne garantissent qu'elles restent des types distincts au moment de la compilation.
Performances d'exécution : Avec les classes en ligne, Kotlin supprime le besoin de créer des objets wrapper en insérant la valeur encapsulée dans la mesure du possible. Cela les rend plus efficaces pour les performances qui transmettent souvent de petites valeurs telles que des identifiants, des codes ou des identifiants.
Code lisible : les classes en ligne donnent des noms significatifs à des valeurs autrement génériques, rendant le code plus explicite et plus facile à comprendre.
Pour définir une classe en ligne dans Kotlin, utilisez l'annotation @JvmInline avec la classe de valeur et assurez-vous qu'elle ne contient qu'une seule propriété val :
@JvmInline value class UserId(val id: String) @JvmInline value class ProductId(val id: String) fun fetchUser(userId: UserId) { println("Fetching user with ID: ${userId.id}") } fun main() { fetchUser(UserId("1")) // OK fetchUser(ProductId("1")) // NOT OK. Even though inlined type is String }
Dans l'exemple ci-dessus, UserId et ProductId sont des classes en ligne qui encapsulent String. Même s'ils ont le même type sous-jacent (String), Kotlin les traite comme des types distincts, évitant ainsi les confusions accidentelles.
Les cours en ligne sont particulièrement utiles lorsque vous devez :
typealias en Kotlin est une autre façon d'ajouter du sens à un type sans en créer un nouveau. Cependant, contrairement aux classes en ligne, typealias crée uniquement un alias sans sécurité de type réelle au moment de la compilation :
typealias UserId = String typealias ProductId = String fun printProductId(id: ProductId) { println("Product ID: $id") } // The following would compile, even though it's an incorrect usage. val userId: UserId = "user_id" printProductId(userId) // Will print Product ID: user_id
Avec typealias, UserId et ProductId ne sont que des alias de String, donc Kotlin les traite comme interchangeables, ce qui risque une mauvaise utilisation accidentelle. Les classes en ligne évitent ce problème en créant des types distincts pour UserId et ProductId au moment de la compilation.
Les classes en ligne dans Kotlin offrent un moyen robuste d'ajouter la sécurité des types, d'améliorer la lisibilité du code et d'optimiser les performances des wrappers légers autour des valeurs. Ils sont particulièrement utiles pour les identifiants ou les petites valeurs qui autrement créeraient une allocation d'objet inutile. En utilisant des classes en ligne, vous obtenez le meilleur des deux mondes : la sécurité au moment de la compilation sans surcharge d'exécution.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!