Số Học
Speaker Notes
This slide should take about 3 minutes.
Đây là lần đầu tiên ta thấy một hàm mới ngoài hàm main
, nhưng hàm này cũng có logic rõ ràng dễ hiểu: nó nhận ba số nguyên, và trả lại một số nguyên. Chi tiết về hàm sẽ được bao quát sau.
Số học trong Rust cũng rất giống với các ngôn ngữ khác, với tiền đề giống nhau.
Vậy còn hiên tượng tràn số nguyên thì sao? Trong C và C++, vấn đề tràn số nguyên có dấu thực ra lại không được xác định, và nó có thể xảy ra theo các cách khác nhau trên các nền tảng hoặc trình biên dịch khác nhau. Còn trong Rust, nó được xác định rõ ràng.
Để xem cách tràn số nguyên xảy ra, hãy thử đổi i32
sang i16
. Việc này sẽ gây ra lỗi (đã được kiểm tra) trong bản debug build và được điều chỉnh lại kiểu phù hợp trong bản release build. Ngoài ra, còn có các tùy chọn số học khác như tính số tràn (overflowing), tính số bão hòa (saturating), và tính giữ phần dư (carrying). Chúng được truy cập bằng cú pháp riêng, ví dụ, (a * b).saturating_add(b * c).saturating_add(c * a)
.
Trên thực tế, trình biên dịch sẽ phát hiện ra tràn số nguyên trong các biểu thức hằng số, vì thế nên ta cần phải tách ra các hàm riêng ở trong ví dụ trên.