Menu
Coddy logo textTech

String vs. &str

Parte de la sección Logic & Flow del Journey de Rust de Coddy — lección 54 de 66.

Rust tiene dos tipos principales de cadenas que sirven para diferentes propósitos: String y &str. Comprender la diferencia entre ellos es crucial para trabajar de manera efectiva con texto en Rust.

Un String es una cadena de texto con propiedad (owned) y asignada en el montículo (heap) que puedes modificar. Cuando creas un String, tu programa es el propietario de esos datos y es responsable de gestionar su memoria. Puedes aumentarlo, reducirlo y cambiar su contenido porque es mutable cuando se declara con mut.

let mut my_string = String::from("Hello");
my_string.push_str(" World"); // Esto funciona porque String tiene un dueño y es mutable

En cambio, &str (pronunciado "string slice") es una vista prestada e inmutable de los datos de una cadena. No es el propietario de los datos a los que apunta; es simplemente una referencia a algún contenido de cadena que existe en otro lugar. Los literales de cadena como "Hello" son en realidad de tipo &str.

let my_slice: &str = "Hello World"; // Esto es un slice de cadena

Piensa en String como poseer un libro en el que puedes escribir y modificar, mientras que &str es como pedir prestado el libro de otra persona: puedes leerlo, pero no puedes cambiarlo. Esta distinción es fundamental para el sistema de propiedad (ownership) de Rust y ayuda a garantizar la seguridad de la memoria.

quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Hoja de referencia

Rust tiene dos tipos principales de cadenas:

  • String - cadena con propiedad (owned), asignada en el montón (heap) y mutable
  • &str - segmento de cadena prestado (borrowed) e inmutable (referencia a datos de cadena)

Creando un String:

let mut my_string = String::from("Hello");
my_string.push_str(" World");

Los literales de cadena son de tipo &str:

let my_slice: &str = "Hello World";

String es dueño de sus datos y puede ser modificado, mientras que &str es una referencia que no se puede cambiar.

Pruébalo tú mismo

Esta lección no incluye un desafío de código.

quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Logic & Flow