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

Folha de consulta

As closures podem aceitar parâmetros colocando-os entre as barras verticais ||:

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

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

let multiply = |x: i32, y: i32| x * y;
let result = multiply(3, 4); // result is 12

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