[Rust Book] 4.1. Tham chiếu và Vay Mượn (References and Borrowing)

References and Borrowing Vấn đề với đoạn code trong Ví dụ 4-5 là chúng ta phải trả về String cho lời gọi hàm để có thể sử dụng String sau khi gọi calculate_length, bởi vì String đã được move vào calculate_length. Dưới đây là cách để định nghĩa và sử dụng hàm calculate_length, mà có một tham chiếu tới một đối tượng như một tham số thay vì lấy mất ownership của giá trị đó: [Đọc tiếp]

[Rust Book] 4.1. Ownership là gì

Ownership là tính năng độc đáo nhất của Rust, nó cho phép Rust đảm bảo an toàn cho bộ nhớ mà không cần garbage collector. Do đó, hiểu về cách hoạt động của ownership trong Rust rất quan trọng. Trong chương này, chúng ta sẽ nói về ownership cũng như nhiều tính năng khác: borrowing, slice và cách Rust loại dữ liệu ra khỏi bộ nhớ.

Ownership là gì?

Tính năng trung tâm của Rust là ownership. Mặc dù bản thân tính năng khá đơn giản để giải thích, nhưng nó có ảnh hưởng rất sâu đến phần còn lại của ngôn ngữ.

Tất cả các chương trình phải quản lý cách chúng sử dụng bộ nhớ máy tính khi chạy. Một vài ngôn ngữ có garbage collection liên tục tìm những phần không dùng bộ nhớ nữa trong khi chương trình chạy; một vài ngôn ngữ khác thì lập trình viên phải tự chỉ ra và làm trống bộ nhớ. Rust sử dụng cách tiếp cận thứ ba: bộ nhớ được quản lý thông qua một hệ thống ownership với một bộ quy tắc cho trình biên dịch kiểm tra khi biên dịch. Không có tính năng nào ownership làm chậm chương trình của bạn khi chạy cả.

[Đọc tiếp]

[Rust Book] 3.5. Luồng điểu khiển

Luồng điểu khiển

Việc quyết định chạy code hay không hay chạy code lặp đi lặp lại dựa vào điều kiện là những block code cơ bản trong hầu hết các ngôn ngữ lập trình. Phổ biến nhất là câu điều kiện if và vòng lặp.

if Expressions

Câu điều kiện if cho phép bạn rẽ nhánh code tùy thuộc theo điều kiện. Bạn đưa ra một điều kiện và sau đó chỉ ra, “Nếu điều kiện này thỏa mãn, chạy block code này. Nếu điện kiện không thỏa mãn, đừng chạy block code này.”

Tạo một project mới tên là branches trong thư mục projects của bạn để tìm hiểu về câu điều kiện. Trong file src/main.rs, nhập như sau:

[Đọc tiếp]

[Rust Book] 3.4. Comment

Comments

Các lập trình viên cố gắng để làm cho code của họ dễ hiểu, nhưng đôi khi phải cần thêm những đoạn giải thích. Trong những trường hợp này, lập trình viên sẽ để lại comment trong source code của họ, thứ mà trình biên dịch sẽ bỏ qua nhưng người đọc source code có thể thấy hữu dụng.

Ví dụ về một comment đơn giản:

// hello, world
[Đọc tiếp]

[Rust Book] 3.3. Hàm

Hàm

Hàm hiện diện ở mọi nơi trong Rust. Bạn đã thấy một trong những hàm quan trọng nhất: hàm main, điểm khởi đầu (entry point) của nhiều chương trình. Bạn cũng đã thấy từ khóa fn, từ khóa cho phép bạn khai báo hàm mới.

Rust code sử dụng snake case cho tên hàm và tên biến. Trong snake case tất cả các ký tự là chữ thường và các từ phân cách bởi dấu gạch dưới. Dưới đây là chương trình có chứa ví dụ về định nghĩa hàm:

[Đọc tiếp]

[Rust Book] 3.2. Kiểu dữ liệu

Kiểu dữ liệu

Mọi giá trị trong Rust đều thuộc về một kiểu dữ liệu cố định, cho Rust biết loại dữ liệu được gán để nó biết cách làm việc với dữ liệu đó. Chúng ta sẽ xem xét hai tập kiểu dữ liệu: vô hướng (scalar) và phức hợp (compound).

Hãy nhớ rằng Rust là một ngôn ngữ có kiểu tĩnh (statically typed), có nghĩa là nó phải biết kiểu của tất cả các biến lúc biên dịch. Trình biên dịch có thể suy luận ra kiểu chúng ta muốn dựa trên giá trị và cách chúng ta dùng nó. Trong trường hợp có thể có nhiều kiểu, ví dụ như khi chúng ta chuyển đổi một String sang một kiểu số bằng parse trong phần [“So sánh số đoán với số bí mật”] (comparing-the-guess-to-the-secret-number) ở Chương 2, chúng ta phải khai báo kiểu, giống như sau:

[Đọc tiếp]

[Rust Book] 3.1. Biến và khả năng thay đổi

Từ khóa

Ngôn ngữ Rust có một bộ các từ khóa (keyword) được dành riêng và chỉ được sử dụng bới ngôn ngữ, giống như trong những ngôn ngữ khác. Hãy luôn nhớ rằng bạn không thể dùng những từ này cho tên biến hay tên hàm. Hầu hết các từ khóa có ý nghĩa đặc biệt, bạn sẽ dùng chúng để làm nhiều loại tác vụ trong chương trình Rust của bạn; một vài từ khóa hiện tại chưa có tính năng liên quan nhưng sẽ được sử dụng trong tương lai. Bạn có thể xem danh sách từ khóa ở Phụ lục A.

[Đọc tiếp]

[Rust Book] 2. Lập trình game đoán số

Lập trình game đoán số

Chúng ta hãy cùng làm quen với Rust kỹ hơn thông qua một project! Chương này sẽ giới thiệu một vài khái niệm phổ biến trong Rust bằng cách chỉ cho bạn cách sử dụng chúng trong những chương trình thực tế. Bạn sẽ học về let, match, các phương thức (method), các hàm liên kết (associated function), viêc sử dụng các crate bên ngoài và nhiều thứ khác nữa! Những chương tiếp theo sẽ đi sâu chi tiết hơn. Trong chương này, bạn sẽ chỉ thực hành những điều cơ bản.

Chúng ta sẽ làm một chương trình cơ bản cho người mới: một trò chơi đoán số. Cách nó hoạt động sẽ là: chương trình sẽ sinh ra một số nguyên ngẫu nhiên trong khoảng từ 1 đến 100. Người chơi đoán một con số và nhập vào. Sau khi được nhập, chương trình sẽ chỉ ra số đã đoán là quá thấp hay quá cao. Nếu đoán chính xác, trò chơi sẽ in ra một tin nhắn chúc mừng và thoát.

[Đọc tiếp]

[Rust Book] 1.3. Bắt đầu với Rust - Hello, Cargo

Hello, Cargo!

Cargo là hệ thống build và quản lý gói của Rust. Hầu hết các Rustacean sử dụng công cụ này để quản lý project Rust của họ vì Cargo xử lý rất nhiều tác vụ cho bạn, như build code, tải thư viện mà code của bạn phụ thuộc vào và build những thư viện đó. (Chúng ta gọi những thư viện mà code của bạn cần là những dependency.)

Những chương trình Rust đơn giản nhất, như ví dụ bạn vừa viết chẳng hạn, không có dependency nào. Nên nếu chúng ta build project “Hello, world!” với Cargo, nó sẽ chỉ dùng một phần của Cargo để xử lý việc build code của bạn. Khi bạn viết những chương trình phức tạp hơn, bạn sẽ cần thêm các dependency, và nếu bạn bắt đầu một project Cargo, việc thêm dependency sẽ dễ hơn rất nhiều.

[Đọc tiếp]

[Rust Book] 1.2. Bắt đầu với Rust - Hello, World

Hello, World!

Vậy là các bạn đã cài xong Rust, giờ thì thử viết chương trình Rust đầu tiên nào. Cách truyền thống để học một ngôn ngữ mới là viết một chương trình nhỏ để in ra chữ Hello, world! trên màn hình, ở đây chúng ta cũng sẽ làm tương tự!

Chú ý: Cuốn sách này sử dụng dòng lệnh cơ bản. Nhưng Rust không có yêu cầu cụ thể gì về việc chỉnh sửa hay công cụ bạn dùng hay code chạy trên đâu, nên nếu bạn thích bạn có thể dùng IDE thay thế cho dòng lệnh. Có nhiều IDE hỗ trợ Rust; bạn có thể xem chi tiết trong tài liệu của IDE. Hiện nay, Rust team đang tập trung vào việc hỗ trợ IDE, và đang có tiến độ đáng kể!

[Đọc tiếp]