Chuyển đến nội dung chính
Mô-đun 1 · Bài học 2 trong tổng số 22/14 trong khóa học~10 min
Bài học theo mô-đun (2/2)

Các loại nguyên thủy

Rust là một ngôn ngữ gõ tĩnh, có nghĩa là nó phải biết loại của tất cả các biến tại thời điểm biên dịch. Thông thường, trình biên dịch có thể suy ra loại dựa trên giá trị được gán, nhưng đôi khi việc chỉ định nó theo cách thủ công là cần thiết hoặc hữu ích.

Các kiểu nguyên thủy trong Rust được chia thành hai loại chính: vô hướng (giá trị đơn) và hợp chất (nhóm giá trị).

Các loại vô hướng

Các kiểu vô hướng đại diện cho một giá trị duy nhất. Rust có bốn loại vô hướng cơ bản:

  1. Số nguyên: Số nguyên. Chúng có thể được ký (i8, i16, i32, i64, i128, isize) hoặc không được ký (u8, u16, u32, u64, u128, usize). Loại mặc định là i32.
  2. Dấu phẩy động: Số có dấu thập phân. Chúng có thể là f32 hoặc f64 (độ chính xác gấp đôi, mặc định).
  3. Booleans: Biểu thị sự thật logic bằng true hoặc false (loại bool).
  4. Ký tự: Một giá trị vô hướng Unicode duy nhất được đặt trong dấu ngoặc đơn (loại char), ví dụ: 'a', 'ℤ' hoặc biểu tượng cảm xúc '😻'.

Ví dụ về chú thích kiểu rõ ràng:

Rust
let x: i64 = 42;
let y: f64 = 3.1415;
let is_rust_awesome: bool = true;
let heart_emoji: char = '❤';

Các loại hợp chất

Các kiểu ghép có thể nhóm nhiều giá trị thành một kiểu duy nhất. Rust có hai loại hợp chất nguyên thủy chính:

Bộ dữ liệu

Tuple nhóm các giá trị thuộc các loại khác nhau thành một bộ sưu tập có kích thước cố định:

Rust
let person: (String, i32) = (String::from("Alice"), 30);

// Destructuring to extract values
let (name, age) = person;

// Direct access with index using dot (.)
let name_direct = person.0;
let age_direct = person.1;

Mảng (Danh sách có kích thước cố định)

Một mảng nhóm nhiều phần tử cùng loại** vào một bộ sưu tập có kích thước cố định được lưu trữ trên ngăn xếp:

Rust
let numbers = [1, 2, 3, 4, 5]; // Inferred as [i32; 5]
let first = numbers[0]; // Access by index
let third = numbers[2];

Nếu bạn cố gắng truy cập một chỉ mục bên ngoài ranh giới mảng (ví dụ: numbers[10]), Rust sẽ ngay lập tức gặp sự cố (hoảng loạn) trong thời gian chạy thay vì cho phép truy cập bộ nhớ trái phép.

So sánh

Tính năngBộ dữ liệuMảng
Các loại phần tửCó thể khácPhải giống nhau
Kích thướcĐã sửaĐã sửa
Truy cậpLập chỉ mục qua dấu chấm (ví dụ: .0)Dấu ngoặc vuông (ví dụ: [0])

Hãy tự mình thử

tập thể dục#rust.m1.l2.e1
Nỗ lực: 0Đang tải…

Khai báo một bộ dữ liệu có tên stats chứa tuổi 30 (số nguyên) và điểm 95,5 (float). Tiếp theo, in điểm ra màn hình bằng cách truy cập trực tiếp vào phần tử thứ hai của bộ dữ liệu bằng chỉ mục của nó.

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

Tạo bộ dữ liệu với `let stats = (30, 95.5);`. Truy cập phần tử thứ hai bằng cách sử dụng `stats.1` bên trong macro `println!`.

Giải pháp khả dụng sau 3 lần thử

tập thể dục#rust.m1.l2.e2
Nỗ lực: 0Đang tải…

Khai báo một mảng có tên là số chứa các giá trị nguyên từ 1 đến 5. In phần tử thứ ba của mảng (chỉ số 2) ra màn hình bằng println!.

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

Khai báo mảng bằng `let number = [1, 2, 3, 4, 5];` và truy cập phần tử thứ ba bằng cách lập chỉ mục cho nó bằng `[2]`.

Giải pháp khả dụng sau 3 lần thử

tập thể dục#rust.m1.l2.e3
Nỗ lực: 0Đang tải…

Cho bộ `let point = (10, 20);`, hãy sử dụng hàm cấu trúc để trích xuất các giá trị thành hai biến có tên `x` và `y`. Sau đó, in tổng của `x` và `y`.

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

Sử dụng cú pháp `let (x, y) = point;` để hủy cấu trúc bộ dữ liệu rồi tính tổng các biến trong `println!`.

Giải pháp khả dụng sau 3 lần thử