🎁 Tuple: Gói Nhiều Giá Trị Lại
Mục Tiêu Bài Học
Sau bài này, bạn sẽ:
- ✅ Biết cách tạo và sử dụng tuples
- ✅ Truy cập phần tử tuple với .0, .1, .2
- ✅ Destructuring tuples
- ✅ Hiểu khi nào dùng tuple thay vì array/vector
🤔 Vấn Đề: Gộp Nhiều Kiểu Khác Nhau
Arrays và Vectors chỉ chứa cùng kiểu dữ liệu:
// ✅ OK - Cùng kiểu i32
let arr = [1, 2, 3];
// ❌ Lỗi - Không thể trộn kiểu
// let arr = [1, "hai", 3.0];
Vấn đề: Nếu muốn lưu thông tin sinh viên: tên (String), tuổi (i32), điểm (f64)?
// ❌ Cách tệ - Nhiều biến riêng lẻ
let ten = String::from("An");
let tuoi = 20;
let diem = 8.5;
Giải pháp: Dùng Tuple! 🎁
📝 Tuple Là Gì?
Tuple là một collection gộp nhiều giá trị lại:
- Các kiểu khác nhau (không bắt buộc cùng kiểu)
- Độ dài cố định (giống array)
- Lưu trên stack (nhanh)
- Thứ tự quan trọng (position-based)
Ẩn Dụ
Hãy tưởng tượng tuple như một hộp đồ bảo hộ cá nhân:
🎁 Hộp chứa:
- 🪖 Mũ bảo hiểm (String)
- 👔 Size áo: 42 (i32)
- 👞 Cỡ giày: 39.5 (f64)
- ✅ Đã kiểm tra: true (bool)
Đặc điểm:
- Mỗi vị trí chứa loại đồ khác nhau (khác kiểu)
- Thứ tự cố định (vị trí 0: mũ, vị trí 1: size, ...)
- Không thể thêm/bớt vị trí! 🛡️
📝 Tạo Tuple
Cú Pháp
let tên_tuple: (kiểu1, kiểu2, kiểu3) = (giá_trị1, giá_trị2, giá_trị3);
Ví Dụ Đơn Giản
fn main() {
let person = ("An", 20, 8.5);
println!("Thông tin: {:?}", person);
}
Kết quả:
Thông tin: ("An", 20, 8.5)
Giải thích:
("An", 20, 8.5)→ Tuple 3 phần tử"An"→ &str20→ i328.5→ f64
Với Type Annotations
fn main() {
let student: (&str, i32, f64) = ("Bình", 21, 9.0);
println!("Sinh viên: {:?}", student);
}
Kết quả:
Sinh viên: ("Bình", 21, 9.0)
🔍 Truy Cập Phần Tử
Dùng .index để truy cập phần tử (index bắt đầu từ 0):
fn main() {
let person = ("Chi", 19, 8.8);
println!("Tên: {}", person.0); // Index 0
println!("Tuổi: {}", person.1); // Index 1
println!("Điểm: {}", person.2); // Index 2
}
Kết quả:
Tên: Chi
Tuổi: 19
Điểm: 8.8
Lưu ý: Khác với array/vector dùng [index], tuple dùng .index
let arr = [1, 2, 3];
println!("{}", arr[0]); // ✅ Array dùng []
let tup = (1, 2, 3);
println!("{}", tup.0); // ✅ Tuple dùng .
📦 Destructuring (Giải Nén)
Destructuring là cách "mở hộp" tuple thành các biến riêng:
Cú Pháp
let (biến1, biến2, biến3) = tuple;