Menu
CoddyTech

Tổng quan về Struct

Thuộc phần Logic và luồng chương trình trong hành trình Rust của Coddy. Bài học 21 trên 66.

Giờ bạn đã hiểu struct là gì, hãy cùng tìm hiểu cách tạo và sử dụng chúng. Việc này gồm hai bước: đầu tiên định nghĩa cấu trúc của struct, sau đó tạo các instance.

Để định nghĩa một struct, bạn dùng từ khóa struct, theo sau là tên struct và các trường bên trong dấu ngoặc nhọn. Mỗi trường có tên và kiểu dữ liệu:

struct User {
    username: String,
    active: bool,
}

Điều này tạo bản thiết kế cho một cấu trúc User có hai trường: username thuộc kiểu String và active thuộc kiểu bool.

Quy tắc đặt tên: Tên struct trong Rust nên dùng PascalCase (còn gọi là UpperCamelCase), nghĩa là mỗi từ bắt đầu bằng chữ cái viết hoa, ví dụ như User, ProductItem hoặc ShoppingCart. Rust sẽ cảnh báo nếu bạn không tuân theo quy tắc này.

Sau khi định nghĩa một struct, bạn có thể tạo các instance bằng cách chỉ định giá trị cho từng trường:

let user1 = User {
    username: String::from("alice"),
    active: true,
};

Lưu ý rằng bạn viết tên struct, theo sau là dấu ngoặc nhọn chứa tên từng trường, dấu hai chấm và giá trị của trường đó. Thứ tự các trường không cần khớp với thứ tự trong định nghĩa.

Để truy cập các trường của một instance struct, hãy dùng ký hiệu chấm: viết tên instance, tiếp theo là dấu chấm và tên trường:

println!("Username: {}", user1.username);
println!("Active: {}", user1.active);

Ở đây, user1.username truy cập trường username của user1, còn user1.active truy cập trường active. Bạn có thể dùng các giá trị trường này ở bất cứ đâu bạn dùng một biến thông thường.

challenge icon

Thử thách

Dễ

Bạn sẽ nhận ba đầu vào: tên sản phẩm, giá (dưới dạng số thập phân) và số lượng hàng tồn kho (dưới dạng số nguyên). Định nghĩa một struct Product với ba trường: name có kiểu String, price có kiểu f64 và stock có kiểu i32. Sau đó, tạo một instance của struct này bằng các giá trị đầu vào và in thông tin sản phẩm.

Yêu cầu:

  • Định nghĩa struct Product với các trường: name: String, price: f64 và stock: i32
  • Đọc đầu vào thứ nhất làm tên sản phẩm
  • Đọc đầu vào thứ hai và chuyển thành f64 làm giá
  • Đọc đầu vào thứ ba và chuyển thành i32 làm số lượng hàng tồn kho
  • Tạo một instance của struct Product với các giá trị này
  • In thông tin sản phẩm theo đúng định dạng bên dưới

Đầu vào:

  • Dòng thứ nhất: Tên sản phẩm (ví dụ: Laptop)
  • Dòng thứ hai: Giá dưới dạng số thập phân (ví dụ: 999.99)
  • Dòng thứ ba: Số lượng hàng tồn kho dưới dạng số nguyên (ví dụ: 15)

Đầu ra:

  • Dòng thứ nhất: Product: [name]
  • Dòng thứ hai: Price: $[price]
  • Dòng thứ ba: Stock: [quantity]

Tự làm thử

use std::io;

// TODO: Định nghĩa struct Product tại đây


fn main() {
    // Đọc tên sản phẩm
    let mut name = String::new();
    io::stdin().read_line(&mut name).expect("Failed to read line");
    let name = name.trim().to_string();
    
    // Đọc giá
    let mut price_input = String::new();
    io::stdin().read_line(&mut price_input).expect("Failed to read line");
    let price: f64 = price_input.trim().parse().expect("Failed to parse price");
    
    // Đọc số lượng tồn kho
    let mut stock_input = String::new();
    io::stdin().read_line(&mut stock_input).expect("Failed to read line");
    let stock: i32 = stock_input.trim().parse().expect("Failed to parse stock");
    
    // TODO: Tạo một instance của struct Product bằng các giá trị đầu vào
    
    
    // TODO: In ra thông tin sản phẩm theo định dạng yêu cầu
    
}
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Logic và luồng chương trình

Tự luyện tập: Trình biên dịch Rust online