Mọi ngôn ngữ lập trình hiện đại đều có cơ chế để dùng lại code. C có #include<stdio.h> thì Python, Go, Java có import. Rust không như thế, không có import, không cần import.

Rust dùng thư viện bằng path đầy đủ

Không cần import. Ví dụ sử dụng các function trong thư viện std::fs:

fn main() {
    std::fs::create_dir_all("a/b/c/d").unwrap();
    std::fs::write("a/file", "Hello").expect("Cannot write file");

    let rd = std::fs::read_dir("a").unwrap();
    for i in rd {
        let i = i.unwrap();
        if i.path().is_dir() {
            println!("Directory {}", i.file_name().to_string_lossy());
        } else if i.path().is_file() {
            println!("File {}", i.file_name().to_string_lossy());
        }
    }
}

Code tạo thư mục a chứa thư mục b chứa thư mục c chứa thư mục d, tương tự lệnh mkdir -p a/b/c/d trên Linux. Sau đó ghi ra 1 file text tên "file" trong thư mục "a" dòng chữ "Hello". Liệt kê các file trong thư mục "a" và in ra màn hình đâu là thư mục đâu là file.

Output:

File file
Directory b

Rust crate, module

std::fs::create_dir_allfull path tới function create_dir_all.

std là 1 crate /kreɪt/ - đơn vị 1 "library" trong Rust. Xem các crates tại https://crates.io/

fs là 1 module - thường tương ứng với 1 file hay 1 thư mục, xem các module trong crate std tại https://doc.rust-lang.org/std/index.html

Rust có thể gọi function create_dir_all trong fs trong std mà không cần import.

Nhưng gõ std::fs::create_dir_all dài, nên Rust có use dùng để tạo "shortcut".

use std::fs::create_dir_all;
// use std::fs::{create_dir_all, write}; viết ngắn gọn thay vì viết use cho từng function.
// use std::fs::{*}; tất cả
fn main() {
    create_dir_all("a/b/c/d").unwrap();
}

tương tự Python from math import sqrt; sqrt(4). hay from math import *; sqrt(4)

Nếu viết use std::fs thì sẽ chỉ cần gõ fs::create_dir_all là đủ. Đây là "best practice" để vừa gõ ngắn hơn, vừa biết create_dir_all thuộc về fs.

use std::fs;

fn main() {
    fs::create_dir_all("a/b/c/d").unwrap();
    fs::write("a/file", "Hello").expect("Cannot write file");

    let rd = fs::read_dir("a").unwrap();
    for i in rd {
        let i = i.unwrap();
        if i.path().is_dir() {
            println!("Directory {}", i.file_name().to_string_lossy());
        } else if i.path().is_file() {
            println!("File {}", i.file_name().to_string_lossy());
        }
    }
}

Kết luận

Rust không import, chỉ use để tạo shortcut.

Hết

Tham khảo

Ủng hộ tác giả 🍺



Published

Category

frontpage

Tags

Contact