Введение#
В этой статье разберём как получать ввод от пользователя в терминальном приложении на Rust с использованием стандартной библиотеки.
Казалось бы, простая задача - спросить имя и поприветствовать пользователя. Но даже в этом примере кроются важные особенности языка: работа со стандартным вводом, ссылки, обработка ошибок и типы.
Что потребуется?#
Нам понадобится модуль std::io
который входит в стандартную библиотеку Rust. Он предоставляет доступ к stdin()
— стандартному вводу. Чтобы использовать его, нужно подключить:
use std::io;
Пример: Приветствие пользователя#
Начнём с минимального приложения:
use std::io;
fn main() {
let mut input
1
= String::new();
2
println!("Enter your name:");
io::stdin().read_line(&mut input).unwrap();
3
println!("Hello {input}");
}
Что здесь важно:#
&mut input
1 - передаём изменяемую ссылку, потому чтоread_line
требует возможность изменить содержимое.String::new()
2 - создаёт пустую строку для хранения ввода..unwrap()
- в данном случае упрощённая обработкаResult
. Позже заменим это на более надёжный способ. 3
Коротко о типах#
Функция read_line
возвращает Result<usize>
где usize
— количество байт прочитанных из ввода.
usize
— это целое без знака, размер которого зависит от архитектуры машины (например, 64-битный на x86_64).Добавим отладочную информацию:#
use std::io;
fn main() {
let mut input = String::new();
println!("Enter your name:");
match io::stdin().read_line(&mut input) {
Ok(n) => {
println!("{n} bytes read");
println!("Hello {input}");
}
Err(error) => println!("error: {error}"),
}
}
Пример вывода:#
Enter your name:
developer
10 bytes read
Hello developer
"developer"
— это 9 символов + 1 символ новой строки \n
автоматически добавляемый после нажатия Enter.Практическое применение#
Такой ввод часто используется в CLI-интерфейсах: для подтверждения действия, выбора режима работы, простых форм.
Особенности ввода в CLI:
read_line
блокирует выполнение, пока пользователь не введёт строку.- Строка сохраняет символ новой строки
\n
, что иногда требуется удалять с помощью.trim()
.
Совет: чтобы избавиться от
\n
, используйте.trim()
let name = input.trim(); println!("Hello {name}");
Заключение#
Мы познакомились с базовым способом взаимодействия с пользователем в консольном приложении на Rust. Хотя код получился коротким. Под капотом - работа с изменяемыми ссылками, возвратом Result
, безопасной обработкой ввода и особенностями строк.
На этом всё. Пробуйте, меняйте, экспериментируйте.