Menu
Coddy logo textTech

Slices como Parâmetros de Função

Parte da seção Logic & Flow do Journey de Rust da Coddy — lição 56 de 66.

Ao escrever funções que trabalham com strings, usar &str como um tipo de parâmetro em vez de String torna suas funções muito mais flexíveis e úteis.

Uma função que recebe um parâmetro String pode aceitar apenas strings com propriedade (owned), o que limita como você pode chamá-la:

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

// Isso funciona, mas assume a posse (ownership)
let my_string = String::from("Hello");
print_message(my_string); // my_string não é mais utilizável após isso

No entanto, uma função que recebe &str pode aceitar tanto referências de String quanto literais de string, tornando-a muito mais versátil:

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

// Agora você pode chamá-la com qualquer um dos tipos
let my_string = String::from("Hello");
print_message(&my_string); // Passa uma referência para String
print_message("World");     // Passa um literal de string diretamente

Essa flexibilidade significa que suas funções funcionam em mais situações sem forçar quem as chama a converter seus dados ou abrir mão da posse.

challenge icon

Desafio

Fácil

Você receberá duas entradas. A primeira entrada é uma mensagem de texto e a segunda entrada é o comprimento máximo permitido para a mensagem. Crie uma função chamada truncate_message que recebe um slice de string (&str) e um comprimento máximo (usize) como parâmetros. Se o comprimento da mensagem exceder o máximo, a função deve retornar um slice da mensagem até o comprimento máximo. Caso contrário, ela deve retornar a mensagem inteira. Imprima o resultado.

Requisitos:

  • Leia a primeira entrada (a mensagem de texto) e remova os espaços em branco (trim)
  • Leia a segunda entrada (o comprimento máximo) e remova os espaços em branco (trim)
  • Converta (parse) o comprimento máximo para usize
  • Defina uma função truncate_message que recebe dois parâmetros:
    • Um slice de string &str para a mensagem
    • Um usize para o comprimento máximo
  • Dentro da função, verifique se o comprimento da mensagem é maior que o comprimento máximo
  • Se sim, retorne um slice da mensagem do índice 0 até o comprimento máximo usando &message[0..max_len]
  • Se não, retorne a mensagem inteira
  • Chame a função com a mensagem de entrada e o comprimento máximo
  • Imprima o resultado retornado

Entrada:

  • Primeira linha: Uma mensagem de texto (ex: Hello World from Rust)
  • Segunda linha: Comprimento máximo como um número (ex: 11)

Saída:

  • A mensagem truncada se ela exceder o comprimento máximo, ou a mensagem completa caso contrário

Folha de consulta

Usar &str como um tipo de parâmetro torna as funções mais flexíveis do que usar String, pois elas podem aceitar tanto referências de string quanto literais de string:

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

let my_string = String::from("Hello");
print_message(&my_string); // Passa uma referência para String
print_message("World");     // Passa um literal de string diretamente

Para retornar um slice de uma string até um certo comprimento, use a sintaxe de slice:

&message[0..max_len]

Experimente você mesmo

use std::io;

// TODO: Defina a função truncate_message aqui


fn main() {
    // Lê a mensagem de texto
    let mut message = String::new();
    io::stdin().read_line(&mut message).expect("Failed to read line");
    let message = message.trim();
    
    // Lê o comprimento máximo
    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: Chame a função truncate_message e armazene o resultado
    
    // TODO: Imprima o resultado
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Logic & Flow