Пишем калькулятор на Rust
В этой статье мы создадим простой калькулятор на языке программирования Rust. Мы рассмотрим основы языка, реализуем основные арифметические операции и научимся работать с пользовательским вводом и выводом.
Наш телеграм канал для всех, кто хочет изучать Rust и развиваться в нем.
Что такое Rust?
Rust — это системный язык программирования, разработанный с акцентом на безопасность и производительность. Он предлагает строгую систему типов и управление памятью без использования сборщика мусора, что делает его идеальным для разработки надежных и высокопроизводительных приложений.
Структура программы на Rust
Программа на Rust начинается с функции main
. Она является точкой входа и запускает выполнение программы.
fn main() {
println!("Hello, World!");
}
План калькулятора
Мы реализуем калькулятор, который сможет выполнять четыре основные арифметические операции: сложение, вычитание, умножение и деление. Программа будет принимать два числа и оператор от пользователя, а затем выводить результат вычисления.
Основные операции калькулятора
Начнем с написания функций для каждой арифметической операции. Эти функции будут принимать два аргумента типа f64
(числа с плавающей запятой) и возвращать результат вычисления того же типа.
Функция сложения
fn add(a: f64, b: f64) -> f64 {
a + b
}
Функция вычитания
fn subtract(a: f64, b: f64) -> f64 {
a - b
}
Функция умножения
fn multiply(a: f64, b: f64) -> f64 {
a * b
}
Функция деления
fn divide(a: f64, b: f64) -> f64 {
if b == 0.0 {
println!("Ошибка: деление на ноль!");
return 0.0;
}
a / b
}
Ввод данных от пользователя
Для получения ввода от пользователя в Rust используется макрос println!
для вывода данных и макрос std::io::stdin().read_line()
для считывания строки ввода.
Давайте напишем функцию, которая будет считывать числа и оператор от пользователя.
use std::io;
fn get_input() -> (f64, f64, char) {
let mut input = String::new();
println!("Введите первое число:");
io::stdin().read_line(&mut input).expect("Не удалось прочитать строку");
let a: f64 = input.trim().parse().expect("Введите корректное число");
input.clear();
println!("Введите второе число:");
io::stdin().read_line(&mut input).expect("Не удалось прочитать строку");
let b: f64 = input.trim().parse().expect("Введите корректное число");
input.clear();
println!("Введите оператор (+, -, *, /):");
io::stdin().read_line(&mut input).expect("Не удалось прочитать строку");
let operator: char = input.trim().chars().next().expect("Введите корректный оператор");
(a, b, operator)
}
Основная функция калькулятора
Теперь, когда у нас есть функции для арифметических операций и ввода данных, мы можем собрать все вместе в основной функции программы.
fn main() {
let (a, b, operator) = get_input();
let result = match operator {
'+' => add(a, b),
'-' => subtract(a, b),
'*' => multiply(a, b),
'/' => divide(a, b),
_ => {
println!("Неизвестный оператор");
return;
}
};
println!("Результат: {:.2}", result);
}
Полный код программы калькулятор на Rust
Объединив все части, мы получаем следующий код:
use std::io;
fn add(a: f64, b: f64) -> f64 {
a + b
}
fn subtract(a: f64, b: f64) -> f64 {
a - b
}
fn multiply(a: f64, b: f64) -> f64 {
a * b
}
fn divide(a: f64, b: f64) -> f64 {
if b == 0.0 {
println!("Ошибка: деление на ноль!");
return 0.0;
}
a / b
}
fn get_input() -> (f64, f64, char) {
let mut input = String::new();
println!("Введите первое число:");
io::stdin().read_line(&mut input).expect("Не удалось прочитать строку");
let a: f64 = input.trim().parse().expect("Введите корректное число");
input.clear();
println!("Введите второе число:");
io::stdin().read_line(&mut input).expect("Не удалось прочитать строку");
let b: f64 = input.trim().parse().expect("Введите корректное число");
input.clear();
println!("Введите оператор (+, -, *, /):");
io::stdin().read_line(&mut input).expect("Не удалось прочитать строку");
let operator: char = input.trim().chars().next().expect("Введите корректный оператор");
(a, b, operator)
}
fn main() {
let (a, b, operator) = get_input();
let result = match operator {
'+' => add(a, b),
'-' => subtract(a, b),
'*' => multiply(a, b),
'/' => divide(a, b),
_ => {
println!("Неизвестный оператор");
return;
}
};
println!("Результат: {:.2}", result);
}
Объяснение работы программы
- Импорт библиотеки
std::io
: Она используется для работы с вводом и выводом. - Арифметические функции: Каждая функция выполняет одну из базовых математических операций и возвращает результат.
- Функция ввода данных: Считывает два числа и оператор от пользователя, возвращая их в виде кортежа
(f64, f64, char)
. - Основная функция: В зависимости от введенного оператора выполняется соответствующая арифметическая операция, а результат выводится на экран.
Запуск программы
Чтобы запустить программу, сохраните код в файл с расширением .rs
(например, calculator.rs
) и выполните команду:
rustc calculator.rs
./calculator
Заключение
Мы написали простой калькулятор на Rust, который может выполнять базовые арифметические операции. Этот пример демонстрирует основы работы с функциями, вводом/выводом данных и операторами управления в Rust. Этот язык предлагает мощные инструменты для создания безопасных и эффективных приложений, что делает его отличным выбором для разработки как системного, так и прикладного программного обеспечения.