Chuyển đổi kiểu dữ liệu trong Rust

0 0 0

Người đăng: RustDEV VietNam

Theo Viblo Asia

Chắc hẳn đã nhiều lần, khi lập trình, chúng ta cần đến các thao tác chuyển đổi kiểu dữ liệu, chuyển kiểu dữ liệu từ kiểu Type_A sang kiểu Type_B với Type_AType_B là các kiểu dữ liệu bất kỳ. Trong Rust, việc chuyển đổi kiểu dữ liệu của một giá trị kiểu số cơ bản được thực hiện một cách dễ dàng thông qua lệnh as, ví dụ:

fn main() { let n1: i8 = 127; // 0111 1111 let n2: i16 = n1 as i16; // 0000 0000 0111 1111 println!("n1: {0:08b} ({0}) -> n2: {1:016b} ({1})", n1, n2); let n3: i16 = 128; // 0000 0000 1000 0000 let n4: i8 = n3 as i8; // 1000 0000 println!("n3: {0:016b} ({0}) -> n4: {1:08b} ({1})", n3, n4);
}

Khi chạy mã nguồn 01 sẽ cho kết quả như dưới đây: (Rust Playground)

n1: 01111111 (127) -> n2: 0000000001111111 (127)
n3: 0000000010000000 (128) -> n4: 10000000 (-128)

Như chúng ta thấy Rust đã tự động chuyển đổi kiểu dữ liệu cho chúng ta mà về cơ bản là cắt bỏ đi các bit giá trị cao (MSB) thừa khi chuyển đổi từ một kiểu dữ liệu lớn sang môt kiểu dữ liệu nhỏ hơn. Còn trong tình huóng chuyển đổi từ một kiểu dữ liệu nhỏ sang một kiểu dữ liệu lớn thì thêm các bit 0 giá trị cao cần thiết cho đủ kích thước số bit.

Đối với các kiểu dữ liệu số cơ bản (i8, i16, u8, u16, boolean, v.v.) thì trong Rust ta chỉ cần sử dụng lệnh as như trong ví dụ trên.

Tuy nhiên, trong thực tế, sẽ nhiều lúc chúng ta cần chuyển đổi các kiểu dữ liệu, các cấu trúc dữ liệu do chúng ta tự định nghĩa và phức hơn thì không thể dùng as. Với những bài toán này, Rust cung cấp cho chúng ta các cặp thuộc tính hành vi (”trait”) Into/FromTryInto/TryFrom để có thể phát triển mở rộng khả năng chuyển đổi qua lại các kiểu dữ liệu bất kỳ.

Anh em hãy xem video “#27 Into/TryInto vs From/TryFrom - Ý nghĩa và cách dùng” trên kênh RustDEV Vietnam để hiểu rõ hơn về cách sử dụng cũng như khả năng của các thuộc tính hành vi này nhé!

Bình luận

Bài viết tương tự

- vừa được xem lúc

Chuyện cái comment

Chuyện cái comment. Chuyện rằng, có một ông bạn nọ có cái blog ở trên mạng, cũng có dăm.

0 0 37

- vừa được xem lúc

Đừng đánh nhau với borrow checker

Đừng đánh nhau với borrow checker. TL;DR: Đừng bao giờ đánh nhau với borrow checker, nó được sinh ra để bạn phải phục tùng nó .

0 0 32

- vừa được xem lúc

Chuyện biểu diễn ma trận trên máy tính

Chuyện biểu diễn ma trận trên máy tính. Cách đây mấy hôm mình có share cái screenshot trên Facebook, khoe linh tinh vụ mình đang viết lại cái CHIP-8 emulator bằng Rust.

0 0 46

- vừa được xem lúc

Rust và Lập trình Web

Rust và Lập trình Web. Bài viết được dịch lại từ bản gốc "Rust for the Web" đăng tại phiên bản blog tiếng Anh của mình.

0 0 41

- vừa được xem lúc

Viết ứng dụng đọc tin HackerNews bằng Rust

Viết ứng dụng đọc tin HackerNews bằng Rust. Dạo này mình toàn viết bài linh tinh, lâu rồi chưa thấy viết bài kĩ thuật nào mới nên hôm nay mình viết trở lại, mất công các bạn lại bảo mình không biết co

0 0 29

- vừa được xem lúc

Cài đặt Rust trên Arch Linux

Cài đặt Rust trên Arch Linux. Việc cài đặt Rust trên môi trường Arch Linux khá là đơn giản.

0 0 47