Menu
Coddy logo textTech

Slices como parámetros de función

Parte de la sección Lógica y Flujo del Journey de Rust de Coddy. Lección 56 de 66.

Al escribir funciones que trabajan con cadenas, usar &str como tipo de parámetro en lugar de String hace que tus funciones sean mucho más flexibles y útiles.

Una función que toma un parámetro String solo puede aceptar cadenas con propiedad (owned strings), lo que limita cómo puedes llamarla:

fn print_message(text: String) {
    println!("{}", text);
}

// Esto funciona, pero toma la propiedad
let my_string = String::from("Hello");
print_message(my_string); // my_string ya no se puede usar después de esto

Sin embargo, una función que toma &str puede aceptar tanto referencias de String como literales de cadena, lo que la hace mucho más versátil:

fn print_message(text: &str) {
    println!("{}", text);
}

// Ahora puedes llamarla con cualquier tipo
let my_string = String::from("Hello");
print_message(&my_string); // Pasar una referencia a String
print_message("World");     // Pasar un literal de cadena directamente

Esta flexibilidad significa que tus funciones funcionan en más situaciones sin obligar a quienes las llaman a convertir sus datos o ceder la propiedad.

challenge icon

Desafío

Fácil

Recibirás dos entradas. La primera entrada es un mensaje de texto y la segunda entrada es la longitud máxima permitida para el mensaje. Crea una función llamada truncate_message que acepte como parámetros un segmento de cadena (&str) y una longitud máxima (usize). Si la longitud del mensaje supera la longitud máxima, la función debe devolver un segmento del mensaje hasta la longitud máxima. De lo contrario, debe devolver el mensaje completo. Imprime el resultado.

Requisitos:

  • Lee la primera entrada (el mensaje de texto) y elimina los espacios en blanco
  • Lee la segunda entrada (la longitud máxima) y elimina los espacios en blanco
  • Convierte la longitud máxima a usize
  • Define una función truncate_message que acepte dos parámetros:
    • Un segmento de cadena &str para el mensaje
    • Un usize para la longitud máxima
  • Dentro de la función, comprueba si la longitud del mensaje es mayor que la longitud máxima
  • Si es así, devuelve un segmento del mensaje desde el índice 0 hasta la longitud máxima usando &message[0..max_len]
  • Si no, devuelve el mensaje completo
  • Llama a la función con el mensaje de entrada y la longitud máxima
  • Imprime el resultado devuelto

Entrada:

  • Primera línea: Un mensaje de texto (por ejemplo, Hello World from Rust)
  • Segunda línea: Longitud máxima como número (por ejemplo, 11)

Salida:

  • El mensaje truncado si supera la longitud máxima, o el mensaje completo en caso contrario

Pruébalo tú mismo

use std::io;

// TODO: Define la función truncate_message aquí


fn main() {
    // Leer el mensaje de texto
    let mut message = String::new();
    io::stdin().read_line(&mut message).expect("Failed to read line");
    let message = message.trim();
    
    // Leer la longitud máxima
    let mut max_length_input = String::new();
    io::stdin().read_line(&mut max_length_input).expect("Failed to read line");
    let max_len: usize = max_length_input.trim().parse().expect("Invalid number");
    
    // TODO: Llamar a la función truncate_message y almacenar el resultado
    
    // TODO: Imprimir el resultado
}
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 Lógica y Flujo

Practica por tu cuenta: Compilador de Rust online