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).