Первая программа и println!
Разбираем первую программу на Rust: функция main, макрос println! и форматирование вывода.
main — функция, с которой начинается выполнение любой программы на Rust. Без неё бинарник просто не из чего запускать.
Минимальная программа
Вот классический «Hello, world», который cargo new создаёт автоматически.
fn main() {
println!("Hello, world!");
}Вывод:
Hello, world!
Разберём по частям. fn объявляет функцию. main — её имя; именно с неё начинается выполнение. Круглые скобки — список параметров (здесь пустой), фигурные — тело. Каждая инструкция заканчивается точкой с запятой.
Почему println! с восклицательным знаком
Восклицательный знак означает, что println! — это не функция, а макрос. Макрос разворачивается в код на этапе компиляции. Печать в Rust сделана макросом, потому что обычная функция не может принимать переменное число аргументов и проверять строку формата на этапе компиляции, а макрос — может. Пока достаточно запомнить: видите ! — перед вами макрос.
Подстановка значений
Внутри строки формата фигурные скобки {} — это места для подстановки аргументов по порядку.
fn main() {
let name = "Rust";
let year = 2015;
println!("Язык {} стабилизирован в {} году", name, year);
}Вывод:
Язык Rust стабилизирован в 2015 году
Начиная с современных версий Rust имя переменной можно вставлять прямо в скобки — это часто читается удобнее:
fn main() {
let name = "Rust";
println!("Привет, {name}!");
}Вывод:
Привет, Rust!
print! против println!
Есть два родственных макроса: print! печатает без перевода строки, println! — с переводом строки в конце. Для отладки удобен ещё {:?} — он печатает значение в «отладочном» виде, о нём подробнее в разделе про трейты.
fn main() {
print!("один ");
print!("два ");
println!("три");
println!("{:?}", (1, "два", 3.0));
}Вывод:
один два три (1, "два", 3.0)
Возврат значения из main
Обычно main ничего не возвращает. Но она может вернуть Result, чтобы корректно завершиться с кодом ошибки — к этому мы вернёмся в разделе про обработку ошибок.
Итог
fn main()— точка входа; выполнение программы начинается здесь.println!— макрос (отсюда!), печатает строку с переводом строки.{}подставляет аргументы по порядку; можно писать имя переменной прямо в скобках:{name}.