Hướng dẫn làm việc với Rust Struct
Một tính năng chính khiến Rust trở nên mạnh mẽ và hấp dẫn hơn là sự hỗ trợ của nó đối với các cấu trúc. Cấu trúc là các kiểu dữ liệu tổng hợp để nhóm các dữ liệu liên quan. Chúng cho phép bạn xác định các loại dữ liệu tùy chỉnh với các trường được đặt tên để cải thiện tổ chức mã và giúp thao tác dữ liệu dễ dàng hơn.
Bạn có thể sử dụng các cấu trúc để biểu diễn các đối tượng khác nhau, bao gồm các kiểu và cấu hình dữ liệu do người dùng xác định. Cấu trúc linh hoạt hơn nhiều cấu trúc dữ liệu khác. Khả năng đóng gói dữ liệu liên quan của chúng khiến chúng trở nên hữu ích vì chúng tạo ra một mô hình hợp lý hơn cho các đối tượng trong thế giới thực.
Mục Lục
Xác định cấu trúc và trường cấu trúc
Bạn sẽ xác định một cấu trúc bằng cách sử dụng cấu trúc từ khóa theo sau là tên cho cấu trúc. Làm theo điều này bằng cách chỉ định tên trường của cấu trúc và kiểu dữ liệu Rust của chúng bên trong một cặp dấu ngoặc nhọn.
struct Person {
name: String,
age: u8,
is_student: bool,
}
Cái này Người struct có ba trường. Các tên trường là một chuỗi, tuổi trường là một số nguyên 8 bit không dấu và is_student trường là một boolean.
Bạn có thể sử dụng các ký tự cấu trúc để tạo các thể hiện cấu trúc sau định nghĩa cấu trúc. Chữ cấu trúc chỉ định giá trị của các trường của cấu trúc.
let person = Person {
name: String::from("John"),
age: 27,
is_student: true,
};
Các người biến là một thể hiện của Người struct, được tạo bằng chữ struct. Nghĩa đen này khởi tạo tất cả các trường của cấu trúc với các giá trị của kiểu dữ liệu tương ứng của chúng.
Sử dụng Constructor để tạo cấu trúc
Bạn cũng có thể sử dụng hàm tạo để tạo một thể hiện của cấu trúc.
impl Person {
fn new(name: String, age: u8, is_student: bool) -> Self {
Self {
name,
age,
is_student,
}
}
}
let person = Person::new(String::from("John"), 27, true);
Chương trình trên định nghĩa một hàm tạo cho Người cấu trúc với ngụ ý từ khóa. Các mới hàm tạo lấy các trường cấu trúc làm đối số và trả về một thể hiện mới của cấu trúc với các giá trị được khởi tạo.
Bạn có thể tạo một Người ví dụ với mới hàm tạo, truyền cho nó các đối số thích hợp.
Truy cập và sửa đổi các trường cấu trúc
Bạn có thể truy cập và sửa đổi các trường cấu trúc bằng ký hiệu dấu chấm. Bạn chỉ cần sử dụng dấu chấm (.) theo sau là tên của trường để truy cập hoặc thay đổi giá trị của nó.
struct Person {
name: String,
age: u8,
is_student: bool,
}fn main() {
let mut person = Person {
name: String::from("John"),
age: 27,
is_student: true,
};
println!("Name: {}", person.name);
println!("Age: {}", person.age);
person.is_student = false;
println!("Is student: {}", person.is_student);
}
Chương trình tạo một cấu trúc, khởi tạo cấu trúc, in tên, Và tuổi các trường và sửa đổi các is_student trường trước khi in trường.
Khai báo các phương thức cho cấu trúc
Không giống như các cấu trúc trong C, bạn có thể xác định các phương thức trên các cấu trúc Rust hoạt động trên một cá thể. Các phương thức là các hàm tham chiếu đến một cấu trúc để truy cập và sửa đổi. Bạn cũng có thể sử dụng ký hiệu dấu chấm để gọi các phương thức của cấu trúc và truy cập chức năng của chúng.
Đây là cách bạn có thể khai báo các phương thức cho cấu trúc và sử dụng các phương thức đó để thực hiện các thao tác:
struct Person {
name: String,
age: u8,
is_student: bool,
}impl Person {
fn say_hello(&self) {
println!("Hello, my name is {} and I'm {} years old.", self.name,
self.age);
}
fn have_birthday(&mut self) {
self.age += 1;
}
}
fn main() {
let mut person = Person {
name: String::from("John"),
age: 27,
is_student: true,
};
person.say_hello();
person.have_birthday();
println!("New age: {}", person.age);
}
Chương trình định nghĩa hai phương thức để Người cấu trúc. Các nói_xin chào phương pháp có một tham chiếu đến bản thân và in lời chào bao gồm tên và tuổi của người đó. Các có_sinh_nhật phương pháp lấy một tham chiếu có thể thay đổi đến bản thân và tăng tuổi của người đó.
Mô hình sở hữu của Rust tối ưu hóa việc quản lý bộ nhớ
Cấu trúc là cấu trúc dữ liệu linh hoạt, hoạt động như một loại tương đương lớp tối thiểu.
Cũng như các cấu trúc dữ liệu Rust khác, bạn nên tuân theo quy tắc sở hữu của Rust khi làm việc với các biến cấu trúc. Mô hình quyền sở hữu đảm bảo rằng bạn quản lý bộ nhớ một cách hiệu quả trong các chương trình của mình, ngăn chặn các vấn đề phổ biến như con trỏ rỗng và treo.