Formatage de chaînes en Kotlin : 5 approches pour les pros

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

La magie des chaînes : pourquoi le formatage en Kotlin est un art

\n\n

Imaginez : 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\n

Dans 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 !

\n\n

1. Interpolation de chaînes : le pain et le beurre de Kotlin

\n\n

La 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.

\n\n
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\n

Avantages : lisibilité, rapidité, aucun appel superflu. Inconvénients : pas de contrôle du format des nombres (par exemple, le nombre de décimales).

\n\n

Quand 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 de StringBuilder
  • \n
\n\n

2. String.format() : l'héritage de Java en Kotlin

\n\n

Si 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).

\n\n
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\n

Un 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\n

3. MessageFormat : quand vous avez besoin de modèles avec des espaces réservés

\n\n

Pour 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\n
import 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\n

Quand choisir : internationalisation (i18n), déclinaisons complexes, modèles avec 5+ arguments. Inconvénient : syntaxe lourde et dépendance à java.text.

\n\n

4. Extensions Kotlin : concision et sécurité de type

\n\n

La 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).

\n\n
// 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                

Blogs

Book Recommendations