Chaînes multilignes en Rust : comment ne pas perdre la tête avec les guillemets et les barres obliques
\n\nSalut, mon ami ! Si tu as déjà programmé en Python, tu sais que créer une chaîne multiligne là-bas est un jeu d'enfant : trois guillemets """...""" et le tour est joué. Mais dès que tu es passé à Rust, tu as soudain réalisé que l'astuce habituelle ne fonctionne pas. Et te voilà en train de chercher sur Google : « What is the syntax for a multiline string literal ? ». Ça te dit quelque chose ?
Ne t'inquiète pas, c'est la question la plus fréquente chez les débutants en Rust, qui a cumulé des milliers de vues sur Stack Overflow. Et aujourd'hui, nous allons enfin comprendre comment travailler avec de longues chaînes en Rust sans te prendre la tête. C'est parti !
\n\nPourquoi Rust n'aime-t-il pas les triples guillemets (comme Python) ?
\n\nRust est un langage système et strict. Il ne tolère pas les libertés. Les triples guillemets """ en Rust ne sont pas une syntaxe pour les chaînes multilignes, mais le début d'un commentaire ou d'une documentation (si ce sont ///). Donc si tu essaies d'écrire :
// ❌ Ça ne marche pas !\nlet text = """Ceci\nest une chaîne\nmultiligne""";\n\n\nLe compilateur te regardera d'un air désapprobateur et affichera une erreur. En Rust, on utilise une autre approche pour les chaînes multilignes — et elle est même plus cool qu'en Python !
\n\nMéthode n°1 : guillemets simples et saut de ligne
\n\nLa méthode la plus simple est de couper la chaîne dans le code en utilisant le caractère \n à l'intérieur de la chaîne. Mais c'est ennuyeux et illisible. Il est bien plus intéressant d'utiliser un vrai saut de ligne à l'intérieur des guillemets doubles. Rust le permet !
// ✅ Ça marche !\nlet poem = "Voici un exemple de chaîne,\nqui occupe deux lignes,\net c'est parfaitement légal en Rust.";\nprintln!("{}", poem);\n\n\nLa sortie contiendra les caractères de saut de ligne là où tu les as placés dans le code. Mais il y a un détail : si tu veux conserver les indentations (espaces en début de ligne), ils seront aussi inclus dans la chaîne. Parfois c'est utile, parfois non.
\n\nMéthode n°2 : échappement et barre oblique inverse — ton ami (et ton ennemi)
\n\nSi tu dois écrire une longue chaîne dans le code mais sans y ajouter de sauts de ligne (par exemple, pour la lisibilité), utilise une barre oblique inverse en fin de ligne :
\n\n// ✅ Chaîne sans sauts de ligne, mais lisible dans le code\nlet long_string = "C'est une très longue chaîne, \\\nqui est divisée sur plusieurs lignes dans le code, \\\nmais qui sera une seule ligne en mémoire sans \\n.";\nprintln!("{}", long_string);\n\n\nAttention : après la barre oblique inverse, il ne doit y avoir aucun espace — directement Entrée. Sinon, Rust pensera que tu échappes un espace, et tout cassera.
\n\nMéthode n°3 : Raw String Literals — la magie sans échappement
\n\nEt voici l'arme secrète de Rust. Si tu dois écrire une chaîne contenant beaucoup de guillemets, de barres obliques ou d'autres caractères spéciaux (par exemple, du JSON, une expression régulière ou un chemin Windows), utilise r"" — les littéraux de chaîne bruts.
À l'intérieur de r"...", tous les caractères sont interprétés littéralement. Aucun échappement !
// ✅ Raw string — pas de barres obliques !\nlet json = r#"{\n "name": "Rust",\n "version": 1.75,\n "features": ["sécurité", "vitesse"]\n}"#;\nprintln!("{}", json);\n\n\nMais que faire si la chaîne contient "# ? Pour cela, Rust permet d'augmenter le nombre de # autour des guillemets : r##"..."##, r###"..."### et ainsi de suite à l'infini. Choisis simplement un nombre de dièses qui ne se trouve pas à l'intérieur de la chaîne.
// ✅ Raw string avec échappement des dièses\nlet tricky = r###"Chaîne avec des "guillemets" et même "#" à l'intérieur !"###;\nprintln!("{}", tricky);\n\n\nMéthode n°4 : chaînes brutes multilignes — le couteau suisse pour les données complexes
\n\nMaintenant, combinons tout cela. Si tu dois écrire un bloc de texte multiligne avec des guillemets, des barres obliques et des indentations, utilise r#""# avec des sauts de ligne directement à l'intérieur :
Blogs
Book Recommendations
Lire aussi
Sécurité des applications C++ : top 10 des vulnérabilités et comment les éviter