Menu
Coddy logo textTech

Closures com Parâmetros

Parte da seção Logic & Flow do Journey de Rust da Coddy. Lição 61 de 66.

Embora closures que não recebem parâmetros sejam úteis, na maioria das vezes você desejará passar dados para suas closures para torná-las mais flexíveis e poderosas. Adicionar parâmetros a closures segue o mesmo padrão que você aprendeu anteriormente, mas com valores dentro das barras verticais.

Veja como você define uma closure que aceita um parâmetro:

let add_one = |x: i32| x + 1;

Observe que o parâmetro x fica entre as barras verticais, assim como os parâmetros de função. Você pode então chamar essa closure passando um valor:

let add_one = |x: i32| x + 1;
let result = add_one(5); // o resultado é 6

Para closures com múltiplos parâmetros, separe-os com vírgulas:

let multiply = |x: i32, y: i32| x * y;
let result = multiply(3, 4); // o resultado é 12
challenge icon

Desafio

Fácil

Você receberá duas entradas. A primeira entrada é um número, e a segunda entrada também é um número. Crie uma closure que receba dois parâmetros e calcule a potência (o primeiro parâmetro elevado ao segundo parâmetro). Armazene a closure em uma variável, chame-a com os valores de entrada e imprima o resultado.

Requisitos:

  • Leia a primeira entrada (número base) e remova os espaços em branco
  • Converta-a para i32
  • Leia a segunda entrada (expoente) e remova os espaços em branco
  • Converta-a para u32
  • Crie uma closure com dois parâmetros que calcule a potência usando o método .pow()
  • Armazene a closure em uma variável
  • Chame a closure com ambos os valores de entrada
  • Imprima o resultado

Entrada:

  • Primeira linha: Um número base (ex: 2)
  • Segunda linha: Um expoente (ex: 3)

Saída:

  • O resultado do cálculo da potência

Experimente você mesmo

use std::io;

fn main() {
    // Ler a primeira entrada (número base)
    let mut base_input = String::new();
    io::stdin().read_line(&mut base_input).expect("Failed to read line");
    let base: i32 = base_input.trim().parse().expect("Invalid number");
    
    // Ler a segunda entrada (expoente)
    let mut exp_input = String::new();
    io::stdin().read_line(&mut exp_input).expect("Failed to read line");
    let exponent: u32 = exp_input.trim().parse().expect("Invalid number");
    
    // TODO: Criar uma closure que calcula a potência e armazená-la em uma variável
    // TODO: Chamar a closure com base e expoente
    
    // Imprimir o resultado
    println!("{}", result);
}
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

Pratique por conta própria: Compilador de Rust online