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.
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
Productvới các trường:name: String,price: f64và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
f64làm giá - Đọc đầu vào thứ ba và chuyển thành
i32làm số lượng hàng tồn kho - Tạo một instance của struct
Productvớ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
}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
1Luồng điều khiển nâng cao
Biểu thức 'match'Khớp nhiều giá trịKhớp các phạm viBiểu thức 'if let'Vòng lặp dưới dạng biểu thứcÔn tập: Trình phân tích cú pháp lệnh đơn giản4Nhóm dữ liệu bằng Struct
Struct là gì?Tổng quan về StructTruy cập các trường của StructStruct có thể thay đổiStruct làm tham số cho hàmStruct dạng tupleÔn tập: Tạo Struct Book2Giới thiệu về vector
Vector là gì?Tạo vectorThêm phần tử bằng pushTruy cập phần tử trong vectorLặp qua vectorLặp có thể thay đổiXóa phần tửÔn tập: Bộ theo dõi điểm số cơ bản5Cặp khóa-giá trị với bảng băm
Bảng băm là gì?Tạo bảng bămThêm cặp khóa-giá trịTruy cập giá trịDuyệt qua bảng bămCập nhật giá trịXóa một cặpÔn tập: Bộ đếm từ8Dự án: Quản lý kho hàng đơn giản
Thiết lập dự ánThêm mặt hàngKiểm tra hàng tồn khoBán mặt hàngKết hợp tất cả11Thử thách cuối cùng
Ôn tập: Các mục duy nhấtÔn tập: Trình xác thực hồ sơ người dùngÔn tập: Tổng hợp điểm3Danh sách việc cần làm trên dòng lệnh
Thiết lập dự ánThêm một việcXem tất cả việcXóa một việcCode hoàn chỉnh6Xử lý giá trị vắng mặt với 'Option'
'Option' là gì?Dùng 'match' với 'Option'is_some() và is_none()Lấy giá trị từ 'Option'expectCung cấp giá trị mặc định: unwrap_orÔn tập: tìm một phần tử9Lát cắt chuỗi và hơn thế nữa
String và &strTạo lát cắt chuỗiLát cắt làm tham số hàmCác lát cắt khácÔn tập: Tìm từ đầu tiênTự luyện tập: Trình biên dịch Rust online