La magie des chaînes : pourquoi le formatage en Kotlin est un art
\n\nImaginez : vous écrivez une application de suivi d'entraînements sportifs. Vous devez afficher un message : "Bonjour, Alexeï ! Votre temps : 42,5 km en 2:15:07. Meilleur résultat de 3,2% meilleur.". Si vous assemblez une telle chaîne par concaténation à la Java — le code se transforme en bouillie de plus et de guillemets. Le formatage de chaînes en Kotlin résout ce problème de manière élégante et puissante.
\n\nDans cet article, nous allons analyser 5 approches du Kotlin String formatting. Vous apprendrez quand utiliser l'interpolation, quand utiliser le bon vieux String.format(), et quand utiliser des modèles avancés. C'est parti !
1. Interpolation de chaînes : le pain et le beurre de Kotlin
\n\nLa technique la plus populaire et la plus simple — l'interpolation de chaînes en Kotlin. Elle est intégrée directement dans le langage : utilisez le signe dollar $ pour insérer une variable et ${} pour les expressions.
val name = "Anna"\nval age = 28\nval message = "Je m'appelle $name, j'ai $age ans."\nprintln(message) // Je m'appelle Anna, j'ai 28 ans.\n\n// Expressions avec accolades\nval price = 49.99\nval discount = 0.2\nval finalPrice = "Prix avec réduction : ${price * (1 - discount)} roubles."\nprintln(finalPrice) // Prix avec réduction : 39.992 roubles.\n\nAvantages : lisibilité, rapidité, aucun appel superflu. Inconvénients : pas de contrôle du format des nombres (par exemple, le nombre de décimales).
\n\nQuand l'utiliser
\n- \n
- Messages simples, logs, textes d'interface \n
- Quand un réglage précis du format des nombres ou des dates n'est pas nécessaire \n
- À l'intérieur de
println()ou deStringBuilder\n
2. String.format() : l'héritage de Java en Kotlin
\n\nSi vous avez besoin de contrôler le format — String.format() en Kotlin vient à la rescousse. C'est un pont direct vers la méthode Java String.format() avec les mêmes spécificateurs (%s, %d, %.2f).
val pi = 3.1415926535\nval formatted = String.format("Nombre π avec trois décimales : %.3f", pi)\nprintln(formatted) // Nombre π avec trois décimales : 3.142\n\n// Plusieurs arguments\nval name = "Ivan"\nval score = 95\nval result = String.format("%s a obtenu %d points sur 100", name, score)\nprintln(result) // Ivan a obtenu 95 points sur 100\n\nUn détail important : le formatage de chaînes Kotlin String.format n'est pas type-safe — si vous passez un mauvais type, vous obtiendrez une exception à l'exécution. Pour une vérification statique, utilisez des méthodes spécifiques à Kotlin (voir section 5).
\n\n3. MessageFormat : quand vous avez besoin de modèles avec des espaces réservés
\n\nPour les modèles complexes avec des arguments répétés ou la localisation — MessageFormat en Kotlin. Il sait choisir la forme du mot (singulier/pluriel) et formater les dates.
\n\nimport java.text.MessageFormat\n\nval pattern = "{0} a {1} {0,choice,0#pomme|1#pomme|2#pommes}."\nval result = MessageFormat.format(pattern, "Petit", 5)\nprintln(result) // Petit a 5 pommes.\n\n// Avec une date\nval datePattern = "Aujourd'hui {0,date,long}. Heure : {0,time,short}"\nval now = java.util.Date()\nprintln(MessageFormat.format(datePattern, now))\n\nQuand choisir : internationalisation (i18n), déclinaisons complexes, modèles avec 5+ arguments. Inconvénient : syntaxe lourde et dépendance à java.text.
4. Extensions Kotlin : concision et sécurité de type
\n\nLa communauté Kotlin adore les extensions pour le formatage de chaînes. Vous pouvez écrire votre propre solution ou utiliser des bibliothèques prêtes à l'emploi (par exemple, kotlinx.string).
// Extension très simple\nfun String.format(vararg args: Any?): String {\n return String.format(this, *args)\n}\n\n// Utilisation\nval template = "Bonjour, %s ! Votre solde : %.2f EUR"\nval msg = template.format("Maxime", 1234.5678)\nprintln(msg) // B