Макросы
Макросы раскрываются в код 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));
}
Главный вывод из этого раздела: эти распространённые удобства существуют и как ими пользоваться. Почему они определены как макросы и во что раскрываются, не так важно.
Курс не рассматривает определение макросов, но в одном из следующих разделов описано использование derive-макросов.
Для дальнейшего изучения
В стандартной библиотеке есть ряд других полезных макросов. Некоторые примеры, которыми можно поделиться со студентами, если они захотят узнать больше:
assert!и связанные с ним макросы позволяют добавлять проверки в код. Они широко используются при написании тестов.unreachable!отмечает ветку потока управления, которая никогда не должна выполняться.eprintln!позволяет выводить текст в stderr.