Cadenas multilínea en Rust: sintaxis, ejemplos y secretos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Cadenas multilínea en Rust: cómo no volverse loco con comillas y barras invertidas

\n\n

¡Hola, amigo! Si alguna vez has programado en Python, sabes que hacer una cadena multilínea allí es pan comido: tres comillas """...""" y listo. Pero en cuanto pasas a Rust, te das cuenta de que el truco habitual no funciona. Y ahí estás, buscando en Google: «What is the syntax for a multiline string literal?». ¿Te suena?

\n\n

No te preocupes, esta es la pregunta más popular entre los principiantes en Rust, que ha acumulado miles de visitas en Stack Overflow. Y hoy vamos a entender de una vez por todas cómo trabajar con cadenas largas en Rust sin volverte loco. ¡Allá vamos!

\n\n

¿Por qué Rust no ama las comillas triples (como Python)?

\n\n

Rust es un lenguaje de sistemas y estricto. No perdona las libertades. Las comillas triples """ en Rust no son sintaxis para cadenas multilínea, sino el inicio de un comentario o documentación (si es ///). Así que si intentas escribir:

\n\n
// ❌ ¡Esto no funciona!\nlet text = """Esto\nes multilínea\ncadena""";\n
\n\n

El compilador te mirará con desaprobación y te dará un error. En Rust se usa otro enfoque para las cadenas multilínea, ¡y es incluso mejor que en Python!

\n\n

Método n.º 1: comillas normales y salto de línea

\n\n

La forma más sencilla es simplemente romper la cadena en el código usando el carácter \\n dentro de la cadena. Pero esto es aburrido y poco legible. Es mucho más interesante usar un salto de línea real dentro de las comillas dobles. ¡Rust lo permite!

\n\n
// ✅ ¡Funciona!\nlet poem = "Este es un ejemplo de cadena,\nque ocupa dos líneas,\ny es completamente legal en Rust.";\nprintln!("{}", poem);\n
\n\n

La salida contendrá los caracteres de salto de línea donde los hayas puesto en el código. Pero hay un detalle: si quieres conservar la sangría (espacios al inicio de las líneas), también se incluirán en la cadena. A veces es útil, a veces no.

\n\n

Método n.º 2: escape y barra invertida: tu amiga (y enemiga)

\n\n

Si necesitas escribir una cadena larga en el código pero sin añadir saltos de línea (por ejemplo, para legibilidad), usa la barra invertida al final de la línea:

\n\n
// ✅ Cadena sin saltos, pero legible en el código\nlet long_string = "Esta es una cadena muy larga, \\\nque en el código está dividida en varias líneas, \\\npero en memoria será una sola línea sin \\n.";\nprintln!("{}", long_string);\n
\n\n

Ten en cuenta: después de la barra invertida no debe haber espacios, inmediatamente Enter. De lo contrario, Rust pensará que estás escapando un espacio y todo se romperá.

\n\n

Método n.º 3: Raw String Literals: magia sin escape

\n\n

Y esto es el arma secreta de Rust. Si necesitas escribir una cadena que contenga muchas comillas, barras invertidas u otros caracteres especiales (por ejemplo, JSON, expresiones regulares o rutas de Windows), usa r"" — literales de cadena cruda.

\n\n

Dentro de r"..." todos los caracteres se toman literalmente. ¡Sin escape!

\n\n
// ✅ Raw string: ¡sin barras invertidas!\nlet json = r#"{\n    "name": "Rust",\n    "version": 1.75,\n    "features": ["seguridad", "velocidad"]\n}"#;\nprintln!("{}", json);\n
\n\n

Pero, ¿qué pasa si dentro de la cadena aparece "#? Para eso, Rust permite aumentar el número de # alrededor de las comillas: r##"..."##, r###"..."### y así hasta el infinito. Simplemente elige un número de almohadillas que no aparezca dentro de la cadena.

\n\n
// ✅ Raw string con escape de almohadillas\nlet tricky = r###"Cadena con "comillas" e incluso "#" dentro!"###;\nprintln!("{}", tricky);\n
\n\n

Método n.º 4: raw strings multilínea: la navaja suiza para datos complejos

\n\n

Y ahora combinemos todo. Si necesitas escribir un bloque de texto multilínea con comillas, barras invertidas y sangría, usa r#""# con saltos de línea directamente dentro:

Blogs

Book Recommendations