Loadding..

Tổng Hợp Kiểu Dữ Liệu Trong Rust

Tổng Hợp Kiểu Dữ Liệu Trong Rust

Đây là bảng tổng hợp đầy đủ các kiểu dữ liệu trong Rust. Bảng bao gồm từ các kiểu cơ bản như số nguyên, số thực cho đến các kiểu phức tạp như collections và smart pointers.

1. Kiểu Số Nguyên (Integer Types)

KiểuSizeRangeGiải thíchVí dụ
i88 bit-128 đến 127Số nguyên có dấu 8-bitlet x: i8 = -42;
i1616 bit-32,768 đến 32,767Số nguyên có dấu 16-bitlet x: i16 = -1000;
i3232 bit-2,147,483,648 đến 2,147,483,647Số nguyên có dấu 32-bit (mặc định)let x = 42; // i32
i6464 bit-9,223,372,036,854,775,808 đến 9,223,372,036,854,775,807Số nguyên có dấu 64-bitlet x: i64 = 1_000_000;
i128128 bit-(2^127) đến 2^127-1Số nguyên có dấu 128-bitlet x: i128 = 123456789012345678901234567890;
isizePhụ thuộc kiến trúc32-bit hoặc 64-bit tùy hệ thốngSố nguyên có dấu theo kiến trúc CPUlet x: isize = -100;
u88 bit0 đến 255Số nguyên không dấu 8-bitlet x: u8 = 255;
u1616 bit0 đến 65,535Số nguyên không dấu 16-bitlet x: u16 = 65000;
u3232 bit0 đến 4,294,967,295Số nguyên không dấu 32-bitlet x: u32 = 3_000_000_000;
u6464 bit0 đến 18,446,744,073,709,551,615Số nguyên không dấu 64-bitlet x: u64 = 18_000_000_000_000_000_000;
u128128 bit0 đến 2^128-1Số nguyên không dấu 128-bitlet x: u128 = 340282366920938463463374607431768211455;
usizePhụ thuộc kiến trúc32-bit hoặc 64-bit tùy hệ thốngSố nguyên không dấu theo kiến trúc CPUlet x: usize = 100;

2. Kiểu Số Thực (Floating-Point Types)

KiểuSizeRangeGiải thíchVí dụ
f3232 bit±1.18 × 10^-38 đến ±3.40 × 10^38Số thực độ chính xác đơn (IEEE 754)let x: f32 = 3.14;
f6464 bit±2.23 × 10^-308 đến ±1.80 × 10^308Số thực độ chính xác kép (mặc định)let x = 3.141592653589793; // f64

3. Kiểu Boolean

KiểuSizeRangeGiải thíchVí dụ
bool1 bytetrue hoặc falseKiểu logic chỉ có 2 giá trịlet is_active: bool = true;

4. Kiểu Ký Tự (Character Type)

KiểuSizeRangeGiải thíchVí dụ
char4 bytesUnicode scalar values (U+0000 đến U+D7FF và U+E000 đến U+10FFFF)Ký tự Unicode, không phải ASCIIlet c: char = ‘🦀’; let c2: char = ‘A’;

5. Kiểu Tuple

KiểuSizeRangeGiải thíchVí dụ
()0 bytesChỉ có 1 giá trị: ()Unit type – tuple rỗnglet unit: () = ();
(T1, T2, …)Tổng size của các thành phầnTùy thuộc vào các kiểu thành phầnNhóm các giá trị có kiểu khác nhaulet tup: (i32, f64, char) = (42, 6.4, ‘A’);

6. Kiểu Array

KiểuSizeRangeGiải thíchVí dụ
[T; N]size_of::<T>() * NN phần tử cùng kiểu TMảng có kích thước cố định tại compile timelet arr: [i32; 5] = [1, 2, 3, 4, 5];

7. Kiểu Slice

KiểuSizeRangeGiải thíchVí dụ
&[T]2 * usize (con trỏ + độ dài)Tham chiếu đến một phần của array/vectorView chỉ đọc vào dữ liệu liên tiếplet slice: &[i32] = &[1, 2, 3];
&mut [T]2 * usizeTham chiếu có thể thay đổiView có thể thay đổi vào dữ liệulet slice: &mut [i32] = &mut [1, 2, 3];

8. Kiểu String

KiểuSizeRangeGiải thíchVí dụ
&str2 * usizeString slice, UTF-8Tham chiếu đến chuỗi, thường là string literalslet s: &str = “Hello, world!”;
String3 * usizeChuỗi có thể thay đổi kích thướcChuỗi sở hữu dữ liệu, có thể thay đổilet s: String = String::from(“Hello”);

9. Kiểu Con Trỏ (Pointer Types)

KiểuSizeRangeGiải thíchVí dụ
&TusizeĐịa chỉ bộ nhớTham chiếu bất biếnlet x = 5; let y = &x;
&mut TusizeĐịa chỉ bộ nhớTham chiếu có thể thay đổilet mut x = 5; let y = &mut x;
Box<T>usizeĐịa chỉ heapCon trỏ thông minh đến heaplet b = Box::new(5);
*const TusizeĐịa chỉ bộ nhớCon trỏ thô không thể thay đổilet ptr: *const i32 = &5;
*mut TusizeĐịa chỉ bộ nhớCon trỏ thô có thể thay đổilet mut x = 5; let ptr: *mut i32 = &mut x;

10. Kiểu Function

KiểuSizeRangeGiải thíchVí dụ
fn(T1, T2, …) -> RusizeCon trỏ hàmCon trỏ đến function`let f: fn(i32) -> i32 =

11. Kiểu Never

KiểuSizeRangeGiải thíchVí dụ
!0 (không có giá trị)Không có giá trị nàoKiểu không bao giờ trả về giá trịfn panic_fn() -> ! { panic!(“This never returns”); }

12. Kiểu Option và Result

KiểuSizeRangeGiải thíchVí dụ
Option<T>size_of::<T>() + paddingSome(T) hoặc NoneBiểu diễn giá trị có thể không tồn tạilet x: Option<i32> = Some(42);
Result<T, E>max(size_of::<T>(), size_of::<E>()) + tagOk(T) hoặc Err(E)Biểu diễn kết quả có thể thành công hoặc lỗilet result: Result<i32, String> = Ok(42);

13. Kiểu Vector và Collections

KiểuSizeRangeGiải thíchVí dụ
Vec<T>3 * usizeMảng độngMảng có thể thay đổi kích thướclet v: Vec<i32> = vec![1, 2, 3];
HashMap<K, V>Phức tạpKey-value pairsBảng bămuse std::collections::HashMap; let mut map = HashMap::new();
HashSet<T>Phức tạpUnique valuesTập hợp không trùng lặpuse std::collections::HashSet; let set: HashSet<i32> = HashSet::new();

14. Một số lưu ý quan trọng:

  • Kiểu mặc định: i32 cho số nguyên, f64 cho số thực
  • Overflow: Debug mode sẽ panic, release mode sẽ wrap around
  • Type inference: Rust có thể tự suy luận kiểu trong nhiều trường hợp
  • Zero-cost abstractions: Nhiều kiểu phức tạp có cùng performance với kiểu cơ bản sau khi compile
  • Memory safety: Rust đảm bảo memory safety mà không cần garbage collector
Print
Image

enqtran

I'm enqtran - A coder and blogger :) [email protected]