Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Макросы

Макросы раскрываются в код Rust во время компиляции и могут принимать переменное число аргументов. Их отличает ! в конце имени. В стандартной библиотеке Rust есть множество полезных макросов.

  • println!(format, ..) выводит строку в стандартный вывод, применяя форматирование, описанное в std::fmt.
  • format!(format, ..) работает так же, как println!, но возвращает результат в виде строки.
  • dbg!(expression) выводит значение выражения в лог и возвращает его.
  • todo!() отмечает фрагмент кода как ещё не реализованный. При выполнении он вызовет панику.
// Copyright 2023 Google LLC
// SPDX-License-Identifier: Apache-2.0

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.

Главный вывод из этого раздела: эти распространённые удобства существуют и как ими пользоваться. Почему они определены как макросы и во что раскрываются, не так важно.

Курс не рассматривает определение макросов, но в одном из следующих разделов описано использование derive-макросов.

Для дальнейшего изучения

В стандартной библиотеке есть ряд других полезных макросов. Некоторые примеры, которыми можно поделиться со студентами, если они захотят узнать больше:

  • assert! и связанные с ним макросы позволяют добавлять проверки в код. Они широко используются при написании тестов.
  • unreachable! отмечает ветку потока управления, которая никогда не должна выполняться.
  • eprintln! позволяет выводить текст в stderr.