Hàm trong Rust
Khai báo và gọi hàm trong Rust, hiểu statement so với expression và trả về giá trị bằng cú pháp mũi tên.
Bài thứ tư trong loạt Rust cơ bản. Hàm là cách bạn đặt tên và tái sử dụng logic. Hàm Rust rất đơn giản — ý tưởng then chốt là gần như mọi thứ đều là biểu thức.
Hàm đầu tiên#
fn add(a: i32, b: i32) -> i32 {
a + b
}
fn main() {
let result = add(3, 4);
println!("{result}"); // 7
}rustTham số khai báo kiểu; kiểu trả về nằm sau ->.
Statement so với expression#
Statement thực hiện một hành động và không trả về gì. Expression tính ra một giá trị.
fn add(a: i32, b: i32) -> i32 {
let sum = a + b; // statement, kết thúc bằng dấu chấm phẩy
sum // expression, không có chấm phẩy
}rustExpression cuối — không có dấu chấm phẩy — là giá trị trả về. Nếu thêm chấm phẩy, hàm trả về () thay vì giá trị.
Trả về sớm#
Dùng return để thoát sớm:
fn is_adult(age: u32) -> bool {
if age >= 18 {
return true;
}
false
}rustKhông có giá trị trả về#
Hàm không tạo ra gì có kiểu đơn vị ():
fn greet(name: &str) {
println!("Hello, {name}!");
}rustKiểu trả về ngầm định là ().
Truyền quyền sở hữu#
Mặc định, truyền giá trị vào hàm sẽ di chuyển nó (chi tiết ở bài sau về ownership):
fn print_len(s: String) {
println!("{}", s.len());
}
fn main() {
let s = String::from("hello");
print_len(s); // s bị di chuyển
// println!("{s}"); // lỗi: s không còn tồn tại
}rustHàm generic#
Hàm có thể generic theo kiểu bằng dấu ngoặc nhọn:
fn first<T>(list: &[T]) -> &T {
&list[0]
}rustT đại diện cho mọi kiểu. Trình biên dịch suy luận nó từ chỗ gọi.
Kết luận#
Hàm Rust là biểu thức từ đầu đến cuối: tham số có kiểu, expression cuối là giá trị trả về, và quyền sở hữu đi cùng giá trị. Bài tiếp theo trong loạt: ownership.