Полное руководство по основам языка Rust

Это подробное руководство по основам языка Rust, включающее примеры программ, которые демонстрируют различные концепции программирования на Rust.

Назад

Первая программа на Rust

Каждая программа на Rust начинается с функции main:


fn main() {
    println!("Hello, World!");
}
        

Типы данных

Основные типы данных в Rust:

Арифметические операции

Пример использования арифметических операций в 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(())
}