Casting
Rust không hỗ trợ ép kiểu ngầm định, nhưng hỗ trợ ép kiểu một cách tường minh với as
. Cú pháp này khá giống với cách ép kiểu trong ngôn ngữ C.
Kết quả của việc ép kiểu bằng as
luôn được định nghĩa rõ ràng trong Rust, cố định trên mọi nền tảng. Vì vậy, đôi lúc kết quả có thể không giống với dự kiến của bạn, ví dụ như khi đổi dấu hoặc chuyển về kiểu dữ liệu nhỏ hơn – hãy kiểm tra tài liệu cho chắc chắn.
Ép kiểu dữ liệu với as
là một công cụ khá mạnh nên dễ bị sử dụng sai, có thể gây ra những lỗi khó phát hiện khi thay đổi kiểu dữ liệu hoặc phạm vi giá trị của biến. Ép kiểu với as
nên được sử dụng chỉ khi ta chắc chắn rằng lỗi không thể xảy ra (ví dụ: lấy 32 bit cuối của một u64
với as u32
, bỏ qua giá trị của 32 bit đầu).
Nên sử dụng From
hoặc Into
thay vì as
cho những trường hợp ép kiểu không thể thất bại (ví dụ: u32
sang u64
), để đảm bảo rằng quá trình chuyển đổi thật sự không thể thất bại. Đối với những trường hợp ép kiểu có thể thất bại, nên sử dụng TryFrom
và TryInto
để xử lý lỗi khi ép kiểu (khi một giá trị không hoàn toàn phù hợp với kiểu dữ liệu đích).
Speaker Notes
This slide should take about 5 minutes.
Hãy cân nhắc cho học viên nghỉ giải lao sau slide này.
as
hoạt động tương tự như static cast trong C++. Không nên sử dụng as
nếu dữ liệu có thể bị mất khi ép kiểu, ít nhất phải có một comment giải thích rõ ràng lý do sử dụng as
.
Một trường hợp ngoại lệ là khi ép kiểu số nguyên sang usize
để sử dụng làm index trong array.