[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
[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:
[Rust Book] 3.1. Biến và khả năng thay đổi
[Đọc tiếp]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.
[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ự!
[Đọc tiếp]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ể!