Montrer une valeur
L'interpolation — glisser une expression dans un texte, sans rien assembler à la main.
La sous-section précédente a assemblé une phrase à coups de +, et l’a trouvée lourde. Voici
l’écriture plus légère qu’elle annonçait — et elle règle du même coup une question qu’on n’avait
pas encore posée : Console.print n’accepte qu’un texte, alors comment montrer un nombre ?
En glissant la valeur dans le texte, à l’endroit où elle doit paraître.
@entry(demarrer)
object MonProgramme {
demarrer() {
var nom := "Simon Magus";
var age := 42;
var taille := 1.83;
var inscrit := true;
Console.print(text: $"{nom}, {age} ans, {taille} m");
Console.print(text: $"inscrit : {inscrit}");
Console.print(text: $"dans dix ans : {age + 10} ans");
}
}
Trois lignes en sortie, et pas une conversion écrite à la main.
$"…" — un texte à trous
Un texte préfixé d’un $ n’est plus un texte ordinaire : ce qu’il porte entre accolades est
une expression, évaluée et insérée à sa place.
$"{nom}, {age} ans, {taille} m"
Trois trous, trois valeurs, et trois types différents — un texte, un entier, un flottant. Vous n’avez rien eu à convertir : c’est le compilateur qui s’en charge, et il sait de quel type est chaque trou parce qu’il connaît déjà le type de chaque variable.
Le sigle $ a été choisi parce qu’il était libre. Il n’était employé nulle part ailleurs
dans le langage — le compilateur le refusait même comme caractère invalide. Il n’y avait donc
aucune ambiguïté à lever pour lui donner ce rôle, contrairement à la forme f"…" de Python,
où f est un nom valide comme un autre.
N’importe quelle expression, pas seulement un nom
Un trou n’est pas limité à une variable. Tout ce qui produit une valeur y tient :
$"dans dix ans : {age + 10} ans"
Le calcul se fait à l’endroit où on lit son résultat — pas trois lignes plus haut dans une variable qui ne sert qu’à ça.
Ce que cela remplace
Reprenez le + de la sous-section précédente et essayez d’y glisser un nombre : ça ne suffit
plus. Coller deux textes marchait ; coller un texte et un entier demande d’abord de convertir
l’entier en texte.
Console.print(text: nom + ", " + age.toText() + " ans");
Cette écriture existe, et vous la rencontrerez — mais .toText() n’est pas offert par défaut :
il faut le demander, ce qui se voit en tête de fichier. On y viendra quand le besoin s’en fera
sentir.
L’interpolation évite les deux corvées d’un coup : rien à coller, rien à convertir, et la phrase se lit dans l’ordre où elle sortira.
À vous
- Ajoutez une ligne qui montre la taille en centimètres :
{taille * 100}. - Mettez un texte entier dans un trou :
$"{"bonjour"}". Ça marche, et ça n’a aucun intérêt — mais ça dit bien qu’un trou reçoit une expression, pas un nom de variable. - Retirez le
$devant un des textes et exécutez : les accolades redeviennent des accolades, et s’affichent telles quelles.