[Глубокое погружение в Rust: структуры, перечисления и сопоставление с образцом]

Название содержания


Глава 1: Введение в Rust: структуры, перечисления и сопоставление с образцом

Добро пожаловать в мир Rust, языка программирования, известного своей ориентацией на производительность и безопасность. В этой первой главе мы познакомим вас с основополагающими концепциями Rust, уделив особое внимание структурам, перечислениям и сопоставлению с образцом.

Добро пожаловать в мир Rust, языка программирования, известного своей ориентацией на производительность и безопасность.

Анализ: Это предложение представляет собой простой приветственный язык, используемый для знакомства с языком программирования Rust. «Добро пожаловать в мир Rust» — это распространенное выражение, используемое для приветствия читателей в определенной области. «Известен своей ориентацией на» — это распространенное выражение, используемое для описания характеристик чего-либо.

Почему Руст?

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

Что мы будем освещать?

В этой главе мы углубимся в три основные особенности Rust:

  1. Структуры (结构体) : они похожи на классы в других языках и служат основой (蓝图) для создания объектов.
  2. Перечисления (枚举) : Перечисления позволяют вам определить тип, который может быть одним из нескольких возможных вариантов (变体).
  3. Сопоставление с образцом (模式匹配) : это мощная функция для обработки различных возможных типов и значений понятным и удобочитаемым способом.

В этой главе мы углубимся в три основные особенности Rust.

Анализ: это предложение используется для представления основного содержания, которое будет рассмотрено в этой главе. «Углубиться» — это распространенное выражение, используемое для описания темы или вопроса, который предстоит подробно изучить или обсудить.

Почему эти темы?

Понимание структур, перечислений и сопоставления с образцом имеет решающее значение для освоения Rust. Это строительные блоки (基础构建块), которые вы будете использовать для создания более сложных программ. Более того, они воплощают философию (哲学) Rust, которая ценит безопасность типов (类型安全), производительность и читабельность.

Более того, они воплощают философию Rust, которая ценит безопасность типов, производительность и читабельность.

Пояснение: это предложение объясняет, почему эти темы важны. «Воплощение философии» — это выражение высокого уровня, используемое для иллюстрации того, что эти темы являются не только техническими, но и воплощают основные ценности языка программирования Rust.

Вот и все знакомство! В следующих разделах мы углубимся в каждую из этих тем, чтобы дать вам четкое представление о том, как они работают в Rust.

Следите за обновлениями!

Следите за обновлениями!

Пояснение: это распространенное выражение, используемое для того, чтобы посоветовать читателям следить за обновлениями, потому что это еще не все.

Глава 2: Структуры: строительные блоки в Rust

2.1 Определение структур (определение структур)

В Rust структура — это составной тип данных, который группирует переменные под одним именем. Вот простой пример:

struct Student {
    
    
    name: String,
    age: u8,
    grade: String,
}

В этом примере struct— ключевое слово, определяющее новую структуру данных. Student— имя структуры, а name, ageи grade— поля.

Примечание :

  • struct— это ключевое слово в Rust, используемое для определения новой структуры.
  • Stringи u8являются типами. Stringпредназначен для текста и u8представляет собой 8-битное целое число без знака. (тип Stringдля текста u8— 8-битное целое число без знака)

Грамматический анализ :

  • «В Rust структура — это составной тип данных, который группирует переменные под одним именем».
    • «In Rust» — это наречие, выраженное на языке Rust.
    • «структура — это составной тип данных» — это главное предложение, где «структура» — это субъект, «is» — это предикат, а «составной тип данных» — это предикат.
    • «Это группирует переменные под одним именем» — это атрибутивное предложение, которое изменяет «составной тип данных».

2.2 Создание экземпляров структур (создание экземпляров структуры)

Чтобы создать экземпляр структуры, вы используете следующий синтаксис:

let student1 = Student {
    
    
    name: String::from("Alice"),
    age: 16,
    grade: String::from("10th"),
};

Вот student1экземпляр структуры Student.

Примечание :

  • let— ключевое слово для объявления переменной.
  • String::from— это метод создания нового фрагмента Stringстроки.String

2.3 Методы и связанные функции (структурные методы и связанные функции)

В Rust вы можете определять методы внутри структур. Методы аналогичны функциям, но связаны с экземпляром структуры. Вот пример:

impl Student {
    
    
    fn display(&self) {
    
    
        println!("Name: {}, Age: {}, Grade: {}", self.name, self.age, self.grade);
    }
}

Примечание :

  • implэто ключевое слово для реализации.
  • &selfссылается на экземпляр структуры, из которой вызывается метод.

2.4 Структуры кортежей (кортежная структура)

Rust также поддерживает структуры-кортежи, которые похожи на структуры, но без именованных полей. Например:

struct Color(u8, u8, u8);

Вот Colorструктура кортежа с тремя u8полями.

Примечание :

  • u8представляет собой беззнаковое 8-битное целое число.

На этом глава 2 завершается. В следующей главе мы углубимся в Enums и их универсальность в Rust. Не стесняйтесь спрашивать, если у вас есть какие-либо вопросы или вам нужны дополнительные разъяснения!

Глава 3: Перечисления: универсальность и безопасность типов

3.1 Определение и использование перечислений

Перечисления, сокращение от перечислений, — это способ группировки связанных значений. В Rust перечисления чрезвычайно универсальны. Вот базовый пример:

enum Direction {
    
    
    North,
    South,
    East,
    West,
}

В этом примере enum— ключевое слово, определяющее новое перечисление. Direction— имя перечисления, а North, South, Eastи West— варианты.

Примечание :

  • enum— это ключевое слово в Rust, используемое для определения нового перечисления.
  • North, South, East, Westназываются вариантами.

3.2 Перечисления параметров и результатов (перечисление параметров и результатов)

Rust has built-in enums like Option<T> and Result<T, E> for better error handling and null safety. Here’s how you can use Option<T>:

let x: Option<i32> = Some(5);
let y: Option<i32> = None;

Note:

  • Option<T> is used for optional values. (用于可选值)
  • Some and None are variants of Option. (是Option的变体)
  • i32 is a 32-bit integer. (32位整数)

3.3 Methods in Enums (枚举中的方法)

Just like structs, you can define methods within enums. Here’s an example:

impl Direction {
    
    
    fn as_str(&self) -> &'static str {
    
    
        match self {
    
    
            Direction::North => "North",
            Direction::South => "South",
            Direction::East => "East",
            Direction::West => "West",
        }
    }
}

Note:

  • impl is a keyword for implementation. (用于实现的关键字)
  • match is used for pattern matching. (用于模式匹配)

3.4 Advanced Uses of Enums (枚举的高级用法)

Enums in Rust can also hold data and have different kinds of variants. For example:

enum Shape {
    
    
    Circle(f64),
    Rectangle(f64, f64),
}

Here, Circle and Rectangle are variants that hold data.

Note:

  • f64 is a 64-bit floating-point number. (64位浮点数)

На этом глава 3 завершается. В следующей главе мы рассмотрим концепцию сопоставления с образцом в Rust. Если у вас есть какие-либо вопросы или вам нужны дополнительные разъяснения, не стесняйтесь спрашивать!

Глава 4: Матч: взгляд Rust на условную логику (матч: обработка условной логики в Rust)

4.1 Базовый синтаксис совпадений (Базовый синтаксис совпадений)

В Rust это matchключевое слово используется для сопоставления с образцом. Он похож на switchдругие языки, но более мощный. Вот простой пример:

let number = 3;

match number {
    
    
    1 => println!("One"),
    2 => println!("Two"),
    3 => println!("Three"),
    _ => println!("Others"),
}

В этом примере matchпроверяется значение numberи выполняется соответствующий блок кода.

Примечание :

  • match— ключевое слово для сопоставления с образцом.
  • _это шаблон подстановочного знака, который соответствует чему угодно.

4.2 Деструктуризация ценностей

Вы также можете деструктурировать значения в matchвыражении. Например:

enum Point {
    
    
    Coordinate(i32, i32),
}

let point = Point::Coordinate(3, 5);

match point {
    
    
    Point::Coordinate(x, y) => println!("X: {}, Y: {}", x, y),
}

Вот xи yзафиксируйте значения внутри Point::Coordinate.

Примечание :

  • enum— ключевое слово для определения перечисления.
  • i32представляет собой 32-битный целочисленный тип (32-битный целочисленный тип).

4.3 Использование if let и while let (使用 if let 和 while let)

Rust обеспечивает if letи while letболее простое сопоставление с образцом. Например:

if let Point::Coordinate(x, y) = point {
    
    
    println!("X: {}, Y: {}", x, y);
}

Это более лаконичный способ обработки одного совпадения с шаблоном.

Примечание :

  • if letи while letиспользуются для более простого сопоставления с образцом.

Грамматический анализ :

  • «Rust обеспечивает if letболее while letпростое сопоставление с образцом».
    • «Rust обеспечивает» — это подлежащее и сказуемое главного предложения.
    • « if letи while let» — это объект.
    • «для более простого сопоставления с образцом» — это наречие, которое объясняет, почему if letи предоставляются while let.

На этом глава 4 завершается. В следующей главе мы рассмотрим более сложные способы использования сопоставления с образцом. Не стесняйтесь спрашивать, если у вас есть какие-либо вопросы или вам нужны дополнительные разъяснения!

Глава 5. Сопоставление с образцом: упрощение и оптимизация кода (Сопоставление с образцом: упрощение и оптимизация кода)

5.1 Типы паттернов (виды паттернов)

В Rust сопоставление с образцом — мощная функция, позволяющая деструктурировать и сопоставлять значения. Наиболее распространенными типами узоров являются:

  • Буквальные шаблоны
  • Переменные шаблоны
  • Шаблоны подстановочных знаков
  • Структурные шаблоны
  • Шаблоны кортежей
  • Шаблоны перечислений
match value {
    
    
    1 => println!("It's one"),
    x if x > 1 => println!("Greater than one"),
    _ => println!("Anything else"),
}

Примечание :

  • match— ключевое слово для сопоставления с образцом.
  • =>используется для разделения шаблона и кода для выполнения.

5.2 Pattern Guards (Защитники шаблонов)

Защитные кожухи обеспечивают дополнительные условия в matchруке. Например:

match number {
    
    
    x if x % 2 == 0 => println!("Even"),
    x if x % 2 != 0 => println!("Odd"),
    _ => println!("Unknown"),
}

Примечание :

  • if— ключевое слово для условных проверок.
  • %является оператором по модулю.

5.3 Расширенное использование шаблонов (Расширенное использование шаблонов)

Вы также можете вкладывать шаблоны для более сложного сопоставления. Например, сопоставление с перечислениями и их вариантами:

enum Event {
    
    
    Start,
    Stop,
    Pause {
    
     duration: u32 },
}

match event {
    
    
    Event::Start => println!("Event started"),
    Event::Stop => println!("Event stopped"),
    Event::Pause {
    
     duration } => println!("Event paused for {} seconds", duration),
}

Примечание :

  • enum— ключевое слово для определения перечислений.
  • ::используется для указания конкретного варианта перечисления.

Грамматический анализ :

  • «Вы также можете вкладывать шаблоны для более сложного сопоставления».
    • «Ты тоже можешь» — это наречие, означающее, что ты тоже можешь.
    • «Гнездные шаблоны» — это тема, указывающая на вложенные шаблоны.
    • «для более сложного сопоставления» — это наречие, указывающее на более сложное сопоставление.

На этом глава 5 завершается. В следующих главах мы рассмотрим, как интегрировать эти функции для более сложных случаев использования. Не стесняйтесь спрашивать, если у вас есть какие-либо вопросы или вам нужны дополнительные разъяснения!

Глава 6. Интегрированное применение структур, перечислений и сопоставления с образцом (Комплексное применение структур, перечислений и сопоставления с образцом)

6.1 Практический пример: конечные автоматы (Примерный пример: конечные автоматы)

Конечные автоматы — прекрасный пример демонстрации комплексного использования структур, перечислений и сопоставления с образцом. Давайте рассмотрим простую систему светофора:

enum TrafficLight {
    
    
    Red,
    Yellow,
    Green,
}

struct TrafficSystem {
    
    
    current_light: TrafficLight,
}

impl TrafficSystem {
    
    
    fn transition(&mut self) {
    
    
        self.current_light = match self.current_light {
    
    
            TrafficLight::Red => TrafficLight::Green,
            TrafficLight::Yellow => TrafficLight::Red,
            TrafficLight::Green => TrafficLight::Yellow,
        };
    }
}

Примечание :

  • enumиспользуется для определения TrafficLightсостояний ( TrafficLightключевое слово, используемое для определения состояний)
  • matchиспользуется для сопоставления шаблонов для перехода между состояниями.

6.2 Практический пример: обработка ошибок (Пример: обработка ошибок)

Rust Resultи Optionперечисления часто используются для обработки ошибок. Рассмотрим функцию, которая считывает целое число из строки:

fn read_integer(input: &str) -> Result<i32, &'static str> {
    
    
    match input.parse::<i32>() {
    
    
        Ok(val) => Ok(val),
        Err(_) => Err("Not a valid integer"),
    }
}

Примечание :

  • Resultэто перечисление для обработки ошибок.
  • Okи являются вариантами Errперечисления Result.Result

6.3 Философские размышления о программировании на Rust (Философские размышления о программировании на Rust)

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

Примечание :

  • «Акин» означает подобный.

На этом глава 6 завершается. В следующей главе мы рассмотрим примеры кода и практики, которые помогут вам укрепить понимание этих концепций. Не стесняйтесь спрашивать, если у вас есть какие-либо вопросы или вам нужны дополнительные разъяснения!

Глава 7: Философские размышления о программировании на Rust (Философские размышления о программировании на Rust)

7.1 Безопасность памяти и чувство ответственности человека

Внимание Rust к безопасности памяти — это не просто техническая особенность; оно отражает человеческое чувство ответственности. Точно так же, как мы осторожны в своих действиях, чтобы избежать вреда, Rust призывает разработчиков писать безопасный код для предотвращения ошибок.

Примечание :

  • «Безопасность памяти» относится к механизмам, которые предотвращают доступ программ к несанкционированным областям памяти.
  • «Человеческое чувство ответственности» означает моральное или этическое качество, которое заставляет человека отвечать за свои действия.

Грамматический анализ :

  • «Ориентация Rust на безопасность памяти — это не просто техническая особенность; оно отражает человеческое чувство ответственности».
    • «Ориентация Rust на безопасность памяти» — подлежащее, «is» — глагол, а «не просто техническая особенность» — дополнение.
    • «оно отражает человеческое чувство ответственности» — это независимое предложение, объясняющее предыдущее утверждение.

7.2 Типовая система и человеческое разнообразие

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

Примечание :

  • «Система типов» — это функция языков программирования, определяющая типы данных.
  • «Человеческое разнообразие» означает понимание и принятие индивидуальных различий.

7.3 Баланс свободы и ограничений

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

Примечание :

  • «Свобода» означает возможность действовать беспрепятственно.
  • «Ограничения» относятся к ограничениям или запретам.

На этом глава 7 завершается. В следующей главе мы рассмотрим практические примеры кода для дальнейшего понимания этих концепций. Не стесняйтесь спрашивать, если у вас есть какие-либо вопросы или вам нужны дополнительные разъяснения!

Глава 8. Примеры кода и практика (примеры кода и практика)

8.1 Примеры кода, относящиеся к структурам

Давайте начнем с пересмотра Studentструктуры и добавления к ней некоторых методов.

struct Student {
    
    
    name: String,
    age: u8,
    grade: String,
}

impl Student {
    
    
    fn display(&self) {
    
    
        println!("Name: {}, Age: {}, Grade: {}", self.name, self.age, self.grade);
    }
}

Примечание :

  • implозначает реализацию.
  • &selfотносится к самому экземпляру.

8.2 Примеры кода, связанные с перечислениями (примеры кода, связанные с перечислениями)

Вот пример использования Optionперечисления для обработки возможности значения None.

enum Option<T> {
    
    
    Some(T),
    None,
}

fn find_student(name: &str) -> Option<Student> {
    
    
    // Some logic here
    None
}

Примечание :

  • Option<T>является общим перечислением (общее перечисление).
  • Some(T)и Noneесть варианты. (变体)

8.3 Примеры кода, относящиеся к сопоставлению с образцом

Давайте посмотрим, как использовать matchдля обработки различных Optionзначений.

let student = find_student("Alice");
match student {
    
    
    Some(s) => println!("Found: {}", s.name),
    None => println!("Student not found"),
}

Примечание :

  • matchиспользуется для сопоставления с образцом (для сопоставления с образцом).
  • Some(s)и Noneявляются шаблонами, с которыми мы сопоставляемся.

Грамматический анализ :

  • «Давайте посмотрим, как использовать его matchдля обработки различных Optionзначений».
    • «Давайте посмотрим» — повелительное предложение, означающее «давайте посмотрим».
    • «Как использовать match» — это объектное предложение, служащее объектом слова «видеть».
    • «Обрабатывать разные Optionзначения» — это инфинитивная фраза, используемая для объяснения «как».

На этом глава 8 завершается. Не стесняйтесь спрашивать, если у вас есть какие-либо вопросы или вам нужны дополнительные разъяснения!

Заключение

На нашем пути обучения программированию понимание является важным шагом для перехода на более высокий уровень. Однако овладение новыми навыками и идеями всегда требует времени и настойчивости. С психологической точки зрения обучение часто сопровождается постоянными пробами, ошибками и корректировками, что похоже на то, как наш мозг постепенно оптимизирует свой «алгоритм» решения задач.

Вот почему, когда мы сталкиваемся с ошибками, мы должны рассматривать их как возможность учиться и совершенствоваться, а не просто как раздражение. Понимая и решая эти проблемы, мы можем не только исправить текущий код, но и улучшить свои навыки программирования и предотвратить повторение тех же ошибок в будущих проектах.

Я призываю всех активно участвовать и постоянно совершенствовать свои навыки программирования. Независимо от того, новичок вы или опытный разработчик, я надеюсь, что мой блог поможет вам в обучении. Если вы найдете эту статью полезной, вы можете добавить ее в закладки или оставить свои комментарии, чтобы поделиться своими мыслями и опытом. Вы также можете вносить предложения и вопросы по поводу содержания моего блога. Каждый лайк, комментарий, репост и внимание — это величайшая поддержка для меня и мотивация продолжать делиться и творить.


Прочтите мою домашнюю страницу CSDN и откройте для себя еще больше интересного контента: домашнюю страницу CSDN Bubble.
Вставьте сюда описание изображения

Supongo que te gusta

Origin blog.csdn.net/qq_21438461/article/details/133355382
Recomendado
Clasificación