Это подробное руководство по основам языка Rust, включающее примеры программ, которые демонстрируют различные концепции программирования на Rust.
Каждая программа на Rust начинается с функции main
:
fn main() {
println!("Hello, World!");
}
Основные типы данных в Rust:
i32
— целые числаf32
— числа с плавающей запятойf64
— числа с двойной точностьюchar
— одиночные символыПример использования арифметических операций в Rust:
fn main() {
let a = 10;
let b = 20;
let sum = a + b;
let diff = b - a;
let prod = a * b;
let div = b / a;
let mod_ = b % a;
println!("Sum: {}", sum);
println!("Difference: {}", diff);
println!("Product: {}", prod);
println!("Division: {}", div);
println!("Modulus: {}", mod_);
}
Ввод и вывод данных с использованием std::io::stdin
и println!
:
use std::io;
fn main() {
let mut input = String::new();
println!("Enter an integer: ");
io::stdin().read_line(&mut input).expect("Failed to read line");
let num: i32 = input.trim().parse().expect("Please type a number");
println!("You entered: {}", num);
}
Пример использования оператора if-else
:
use std::io;
fn main() {
let mut input = String::new();
println!("Enter an integer: ");
io::stdin().read_line(&mut input).expect("Failed to read line");
let num: i32 = input.trim().parse().expect("Please type a number");
if num > 0 {
println!("The number is positive.");
} else if num < 0 {
println!("The number is negative.");
} else {
println!("The number is zero.");
}
}
Пример цикла while
:
fn main() {
let mut i = 0;
while i < 5 {
println!("i = {}", i);
i += 1;
}
}
Пример работы с массивами:
fn main() {
let arr = [1, 2, 3, 4, 5];
for (i, &value) in arr.iter().enumerate() {
println!("arr[{}] = {}", i, value);
}
}
Пример создания и использования функции:
fn greet() {
println!("Hello from the function!");
}
fn main() {
greet();
}
Пример создания и использования структур:
struct Rectangle {
width: f64,
height: f64,
}
impl Rectangle {
fn area(&self) -> f64 {
self.width * self.height
}
fn display(&self) {
println!("Width: {}, Height: {}, Area: {}", self.width, self.height, self.area());
}
}
fn main() {
let rect = Rectangle { width: 5.0, height: 3.0 };
rect.display();
}
В Rust нет прямого наследования, но можно использовать трейты для расширения функциональности:
trait Speak {
fn speak(&self);
}
struct Dog;
impl Speak for Dog {
fn speak(&self) {
println!("Dog barks.");
}
}
fn main() {
let dog = Dog;
dog.speak();
}
В Rust нет указателей в традиционном смысле, но можно использовать ссылки:
fn main() {
let num = 10;
let ref_num = #
println!("Value of num: {}", num);
println!("Value via reference: {}", ref_num);
// ref_num = 20; // Error: cannot assign to immutable reference
}
Пример работы с динамическим выделением памяти с использованием Box
:
fn main() {
let num = Box::new(10);
println!("Value: {}", num);
}
Пример работы с коллекциями в Rust:
fn main() {
let list = vec!["Hello", "World"];
for item in &list {
println!("{}", item);
}
}
Пример обработки ошибок с использованием Result
:
fn divide(a: i32, b: i32) -> Result {
if b == 0 {
Err("Division by zero".to_string())
} else {
Ok(a / b)
}
}
fn main() {
match divide(10, 2) {
Ok(result) => println!("Result: {}", result),
Err(e) => println!("Error: {}", e),
}
match divide(10, 0) {
Ok(result) => println!("Result: {}", result),
Err(e) => println!("Error: {}", e),
}
}
Пример работы с файлами в Rust:
use std::fs::File;
use std::io::{self, Read, Write};
fn main() -> io::Result<()> {
let mut file = File::create("example.txt")?;
file.write_all(b"Hello, file!")?;
let mut file = File::open("example.txt")?;
let mut contents = String::new();
file.read_to_string(&mut contents)?;
println!("{}", contents);
Ok(())
}