Chuyển đến nội dung chính
Mô-đun 4 · Bài học 1 trong tổng số 27/14 trong khóa học~12 min
Bài học theo mô-đun (1/2)

Xác định và khởi tạo cấu trúc

Cấu trúc (hoặc cấu trúc) trong Rust là các kiểu dữ liệu tùy chỉnh cho phép bạn nhóm nhiều giá trị liên quan lại với nhau. Chúng tương tự như các đối tượng hoặc lớp trong các ngôn ngữ khác nhưng không có tính kế thừa.

Xác định một cấu trúc

Để xác định cấu trúc, chúng tôi sử dụng từ khóa struct theo sau là tên trong PascalCase. Bên trong, chúng tôi xác định tên và loại trường:

Rust
struct User {
    username: String,
    email: String,
    active: bool,
    sign_in_count: u64,
}

Tạo một phiên bản

Để sử dụng cấu trúc, chúng ta phải tạo một thể hiện bằng cách điền vào tất cả các trường được chỉ định:

Rust
fn main() {
    let user1 = User {
        email: String::from("alice@example.com"),
        username: String::from("alice123"),
        active: true,
        sign_in_count: 1,
    };

    // Access fields using dot notation
    println!("Is user {} active? {}", user1.username, user1.active);
}

Khả năng thay đổi cấu trúc

Trong Rust, toàn bộ phiên bản phải được đánh dấu là có thể thay đổi (mut) nếu bạn muốn sửa đổi bất kỳ trường nào của phiên bản đó. Rust không cho phép chỉ đánh dấu một số trường nhất định là có thể thay đổi:

Rust
fn main() {
    let mut user1 = User {
        email: String::from("alice@example.com"),
        username: String::from("alice123"),
        active: true,
        sign_in_count: 1,
    };

    user1.active = false; // Valid because user1 is mutable!
}

Cấu trúc bộ và cấu trúc giống đơn vị

Rust cũng hỗ trợ hai định dạng cấu trúc khác bên cạnh các cấu trúc trường được đặt tên cổ điển:

  1. Cấu trúc bộ dữ liệu: Chúng có tên liên quan nhưng các trường không có tên riêng lẻ, chỉ có loại. Chúng rất hữu ích cho việc xác định và phân biệt các loại cụ thể:
    Rust
    struct Point(i32, i32, i32);
    let origin = Point(0, 0, 0);
  2. Cấu trúc giống đơn vị: Chúng không xác định bất kỳ trường nào. Chúng hoạt động giống như loại đơn vị (). Chúng rất hữu ích khi bạn cần triển khai các hành vi (đặc điểm) trên một loại mà không lưu trữ bất kỳ dữ liệu nào trong đó.

Hãy tự mình thử

tập thể dục#rust.m4.l1.e1
Nỗ lực: 0Đang tải…

Xác định cấu trúc Người dùng ở trên chính với các trường: tên người dùng (Loại chuỗi) và hoạt động (loại bool).

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

Viết `struct User { username: String, active: bool }`Before`main`.

Giải pháp khả dụng sau 3 lần thử

tập thể dục#rust.m4.l1.e2
Nỗ lực: 0Đang tải…

Sửa đổi user1 để làm cho nó có thể thay đổi (hãy thay đổi user1) và thay đổi trường hoạt động thành sai trước khi in.

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

Thêm `mut`to`let user1`để tạo thành`let mut user1`, sau đó chèn `user1.active = false;`.

Giải pháp khả dụng sau 3 lần thử

tập thể dục#rust.m4.l1.e3
Nỗ lực: 0Đang tải…

Xác định cấu trúc bộ dữ liệu có tên Màu chứa ba trường i32. Trong main, khởi tạo Màu với các giá trị 255, 0 và 100 gán nó cho biến my_color, sau đó in phần tử đầu tiên của nó (giá trị màu đỏ) bằng println!.

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

Xác định cấu trúc tuple với `struct Color(i32, i32, i32);`. Trong main, khởi tạo nó dưới dạng `let my_color = Color(255, 0, 100);`và in giá trị màu đỏ bằng`my_color.0`.

Giải pháp khả dụng sau 3 lần thử