Macros

Macros são expandidas em código Rust durante a compilação e podem receber um número variável de argumentos. Elas são distinguidas por um ! no final. A biblioteca padrão do Rust inclui uma variedade de macros úteis.

  • println!(format, ..) imprime uma linha na saída padrão, aplicando a formatação descrita em std::fmt.
  • format!(format, ..) funciona exatamente como println!, mas retorna o resultado como uma string.
  • dbg!(expressão) registra o valor da expressão e o retorna.
  • todo!() marca um trecho de código como não implementado. Se executado, gerará um pânico.
  • unreachable!() marca um trecho de código como inalcançável. Se executado, gerará um pânico.
fn factorial(n: u32) -> u32 {
    let mut product = 1;
    for i in 1..=n {
        product *= dbg!(i);
    }
    product
}

fn fizzbuzz(n: u32) -> u32 {
    todo!()
}

fn main() {
    let n = 4;
    println!("{n}! = {}", factorial(n));
}
This slide should take about 2 minutes.

A lição desta seção é que essas conveniências comuns existem e como usá-las. Por que elas são definidas como macros e no que elas se expandem não é especialmente crítico.

O curso não cobre a definição de macros, mas uma seção posterior descreverá o uso de macros derive (derivadas).