Daily Archives: 18/10/2017

Rust – Struct

Trong phần này chúng ta sẽ tìm hiểu về kiểu dữ liệu struct.

Trong quá trình code, sẽ có một số trường hợp chúng ta cần phải gom nhóm một vài biến liên quan với nhau lại, các biến này có thể có kiểu dữ liệu giống nhau và khác nhau. Struct là một tính năng cho phép chúng ta tạo ra một kiểu dữ liệu mới, trong kiểu dữ liệu mới này chứa nhiều biến có liên quan với nhau, các biến có kiểu dữ liệu khác nhau hoặc giống nhau.

Để định nghĩa một struct thì chúng ta dùng cú pháp sau:

struct <tên_struct>(<danh sách các kiểu dữ liệu);

Sau đó khi nào muốn tạo các biến có kiểu dữ liệu struct tương ứng thì chúng ta gọi tên struct rồi đưa vào danh sách các giá trị. Ví dụ:

struct blog(&’static str, i32);
fn main() {
let phocode = blog("PhoCode", 2016);
}

Struct được định nghĩa kiểu này còn có tên gọi là tuple-struct vì cú pháp khá giống với kiểu tuple. Để lấy các phần tử trong struct kiểu này thì chúng ta có thể dùng cú pháp như sau:

struct blog(&’static str, i32);
fn main() {
let phocode = blog("PhoCode", 2016);
let blog(name, date) = phocode;
println!("{} – {}", name, date);
}

Đoạn code trên sẽ in ra kết quả như sau:

PhoCode - 2016

Kiểu tuple-struct mà chúng ta sử dụng ở phía trên không có nhiều lợi ích mấy, thông thường chúng ta sẽ sử dụng kiểu struct có thể định nghĩa cả tên của các biến bên trong nó như sau:

struct blog{
name: &’static str,
date: i32
}

Cú pháp ở đây khác cú pháp trên ở chỗ là mỗi phần tử của struct sẽ là một cặp <khóa>:<giá_trị>, chứ không còn là tên các kiểu dữ liệu đơn lẻ nữa. Ngoài ra chúng ta dùng cặp dấu ngoặc nhọn {} thay cho cặp dấu ngoặc tròn (), và không có dấu chấm phẩy cuối cùng. Để khởi tạo một biến thuộc kiểu struct này thì chúng ta khai báo như sau:

struct blog{
name: &’static str,
date: i32
}
fn main() {
let mut phocode = blog{
name: "PhoCode", 
date: 2016
};
println!("{} was launched in {}", phocode.name, phocode.date);
}

Ở đây chúng ta gọi tên struct, phía sau là cặp dấu ngoặc nhọn {}, rồi đến các phần tử cũng theo cú pháp <khóa>:<giá_trị>, kết thúc bằng dấu chấm phẩy. Để lấy các phần tử của struct này thì chúng ta dùng dấu chấm rồi gọi tên phần tử.

PhoCode was launched in 2016

Lưu ý là nếu chúng ta muốn thay đổi giá trị của các phần tử thì chúng ta phải khai báo biến của struct này là mut, và để gán giá trị mới cho các phần tử thì chúng ta cũng dùng dấu chấm để lấy phần tử rồi gán như bình thường, ví dụ:

phocode.name = "Lorem Ipsum";
phocode.date = 11111