Toán tử Kotlin – Arithmetic, Assignment, Unary, Logical
Những bài trước chúng ta đã sử dụng các biến (variables) và hằng (constants) trong Kotlin, và cũng mô tả các kiểu dữ liệu khác nhau. Tuy nhiên, việc có thể tạo các biến chỉ là một phần nhỏ, mà bạn hiểu ý nghĩa của chúng mới là vấn đề lớn.
Toán tử làm việc trên toán hạng và được sử dụng để tính toán. Ví dụ: + là một toán tử và khi tôi sử dụng nó trong một biểu thức như thế này: a + b, nó thực hiện phép cộng trên toán hạng a & b.
Trong bài này, ta sẽ tìm hiểu các loại toán tử có sẵn trong Kotlin và cách sử dụng chúng.
1. Cú pháp biểu thức trong Kotlin
Biểu thức cơ bản nhất bao gồm một toán tử, hai toán hạng và một phép gán. Sau đây là một ví dụ về biểu thức:
Bài viết này được đăng tại [free tuts .net]
val myresult = 1 + 2
Trong ví dụ trên, toán tử (+) được sử dụng để cộng hai toán hạng (1 và 2) với nhau. Sau đó toán tử gán (=) gán kết quả của phép cộng vào một biến có tên myresult. Các toán hạng có thể là các biến (hoặc hỗn hợp các giá trị và biến) thay vì các giá trị số thực tế được sử dụng trong ví dụ.Trong phần còn lại của bài viết này, chúng ta sẽ xem xét các loại toán tử cơ bản có sẵn trong Kotlin.
2. Toán tử gán cơ bản
Chúng ta đã xem xét các toán tử gán cơ bản nhất, toán tử =. Toán tử gán này chỉ đơn giản gán kết quả của một biểu thức cho một biến. Về bản chất, toán tử gán = lấy hai toán hạng. Toán hạng bên trái là biến mà giá trị được gán và toán hạng bên phải là giá trị được gán. Toán hạng bên tay phải là một biểu thức thực hiện một phép toán số học hoặc logic hoặc gọi một hàm, kết quả của nó sẽ được gán cho biến. Các ví dụ sau đây là tất cả các sử dụng hợp lệ của toán tử gán:
var x: Int // Khai báo một biến mutable Int val y = 10 // khai báo 1 biến immutable Int x = 10 // gán giá trị cho x x = x + y // gán giá trị cho x là kết quả của x + y x = y // gán giá trị của y cho x
3. Toán tử số học Kotlin
Kotlin cung cấp một loạt các toán tử cho mục đích tạo các biểu thức toán học. Các toán tử này chủ yếu rơi vào loại toán tử nhị phân ở chỗ chúng có hai toán hạng. Ngoại lệ là toán tử nguyên âm (-) dùng để chỉ ra rằng một giá trị là âm chứ không phải là dương. Điều này trái ngược với toán tử trừ (-) có hai toán hạng (nghĩa là một giá trị được trừ từ một giá trị khác). Ví dụ:
var x = -10 // Unary - operator used to assign -10 to variable x x = x - 5 // Subtraction operator. Subtracts 5 from x
Bảng sau liệt kê các toán tử số học chính của Kotlin:
Operator | Description |
---|---|
-(unary) | phủ định giá trị của biến hay biểu thứ |
* | nhân |
/ | chia lấy thương |
+ | cộng |
- | trừ |
% | chia lấy dư |
Lưu ý rằng nhiều toán tử có thể được sử dụng trong một biểu thức.
Ví dụ:
x = y * 10 + z - 5 / 4
4. Toán tử gán tăng thêm
Trong phần trước chúng ta đã xem toán tử gán cơ bản (=). Kotlin cung cấp một số toán tử được thiết kế để kết hợp một bài tập với một phép toán hoặc logic. Chúng chủ yếu được sử dụng khi thực hiện trong đó kết quả sẽ được lưu trữ trong một trong các toán hạng. Ví dụ, người ta có thể viết một biểu thức như sau:
x = x + y
Biểu thức trên cộng giá trị của x và y rồi lưu kết quả vào biến x. Điều này có thể được đơn giản hóa bằng cách sử dụng toán tử gán tăng thêm:
x += y
Biểu thức trên thực hiện chính xác nhiệm vụ tương tự như x = x + y nhưng tiết kiệm cho người lập trình một số cách gõ.
Nhiều toán tử gán có sẵn trong Kotlin. Việc sử dụng thường xuyên nhất được nêu trong bảng sau:
Toán tử | Diễn giải |
x += y | tính tổng của x và y rồi được lưu vào x |
x -= y | tính hiệu của x và y rồi được lưu vào x |
x *= y | tính tích của x và y rồi được lưu vào x |
x /= y | tính tdương của x chia y rồi được lưu vào x |
x %= y | tính dư của x chia được lưu vào biến x |
5. Tăng giảm toán tử
Có một cách ngắn hơn để sử dụng các toán tử tăng và giảm Kotlin. Hãy xem xét đoạn code dưới đây:
x = x + 1 // tăng giá trị của biến x lên 1 x = x - 1 // giảm giá trị của biến x đi 1
Các biểu thức này tăng và giảm giá trị của x thêm 1. Tuy nhiên, thay vì sử dụng phương pháp này, việc sử dụng các toán tử ++ và -- sẽ nhanh hơn. Các ví dụ sau đây thực hiện chính xác các nhiệm vụ giống như các ví dụ trên:
x++ // tăng x lên 1 giá trị x-- // giảm x đi 1 giá trị
Các toán tử này có thể được đặt trước hoặc sau tên biến. Nếu toán tử được đặt trước tên biến, thao tác tăng hoặc giảm được thực hiện trước khi bất kỳ thao tác nào khác được thực hiện trên biến. Ví dụ: trong đoạn mã sau, x được tăng trước khi được gán cho y, cho nên y sẽ có giá trị là 10:
var x = 9 val y = ++x
Tuy nhiên, trong ví dụ tiếp theo, giá trị của x (9) được gán cho biến y trước khi thực hiện giảm dần. Sau khi biểu thức được ước tính, giá trị của y sẽ là 9 và giá trị của x sẽ là 8.
var x = 9 val y = x--
Kotlin cũng bao gồm một tập hợp các toán tử logic hữu ích để thực hiện so sánh. Các toán tử này đều trả về kết quả Boolean tùy thuộc vào kết quả so sánh. Các toán tử này là các toán tử nhị phân ở chỗ chúng làm việc với hai toán hạng. Các toán tử đẳng thức được sử dụng thường xuyên nhất trong việc xây dựng logic điều khiển luồng chương trình. Ví dụ: một câu lệnh if có thể được xây dựng dựa trên việc một giá trị có khớp với một giá trị khác hay không:
if x == y { // Perform task }
Kết quả so sánh cũng có thể được lưu trữ trong biến Boolean. Ví dụ: đoạn code sau sẽ trả về true được lưu trữ trong kết quả biến: var result: Bool
val x = 10 val y = 20 result = x < y
Rõ ràng 10 nhỏ hơn 20, cho nên kết quả x < y là đúng. Bảng sau liệt kê toàn bộ toán tử so sánh Kotlin:
Operator | Description |
---|---|
x == y | return true nếu giá trị x đúng bằng giá trị của y |
x > y | return true nếu giá trị x lớn hơn giá trị của y |
x >= y | return true nếu giá trị x lớn hơn hoặc bằng giá trị của y |
x < y | return true nếu giá trị x nhỏ hơn giá trị của y |
x <= y | return true nếu giá trị x nhỏ hơn hoặc bằng giá trị của y |
x != y | return true nếu giá trị x không bằng giá trị của y |
6. Toán tử logic Boolean
Kotlin cũng cung cấp một tập hợp các toán tử logic được gọi là được thiết kế để trả về giá trị đúng hoặc sai của Boolean. Các toán tử này đều trả về kết quả Boolean và lấy giá trị Boolean làm toán hạng. Các toán tử chính là NOT (!), AND (&&) và OR (||).Toán tử NOT (!)
Chỉ đơn giản là đảo ngược giá trị hiện tại của biến Boolean hoặc kết quả của một biểu thức. Ví dụ: nếu một biến có giá trị là true, thì tiền tố của biến có ký tự ‘!'. Sẽ đảo ngược giá trị thành false:
val flag = true // variable is true val secondFlag = !flag // secondFlag set to false
Toán tử OR (||) trả về true nếu một trong hai toán hạng của nó ước lượng là true, nếu không thì nó trả về false. Ví dụ: đoạn code sau có giá trị là True vì ít nhất một trong các biểu thức ở hai bên của toán tử OR là có giá trị là True:
if ((10 < 20) || (20 < 10)) { print("Expression is true") } <pre> The AND (&&) operator returns true only if both operands evaluate to be true. The following example will return false because only one of the two operand expressions evaluates to true: <pre> if ((10 < 20) && (20 < 10)) { print("Expression is true") }
7. Toán tử dải
Kotlin bao gồm một toán tử hữu ích cho phép khai báo một loạt các giá trị. Như sẽ thấy trong các chương sau,ta sẽ thấy tầm quan trọng của toán tử này khi làm việc với vòng lặp trong logic chương trình. Cú pháp của toán tử dải như sau:
x..y
Toán tử này biểu thị phạm vi số bắt đầu từ x và kết thúc tại y trong đó cả x và y được bao gồm trong phạm vi (được gọi là phạm vi đóng). Toán tử phạm vi 5..8, ví dụ, chỉ định các số 5, 6, 7 và 8.
Bitwise Operators -phép toán thao tác Bit
Như đã thảo luận trước đây, bộ xử lý máy tính làm việc trong hệ nhị phân. Đây thực chất là các luồng của 1 và 0, mỗi số được gọi là một bit. Các bit được tạo thành các nhóm 8 để tạo thành byte. Như vậy, không có gì đáng ngạc nhiên khi chúng ta, với tư cách là lập trình viên, đôi khi sẽ kết thúc làm việc ở cấp độ này trong code của chúng ta. Để tạo điều kiện cho yêu cầu này, Kotlin cung cấp một loạt các toán tử bit.
Những người quen thuộc với các toán tử bitwise trong các ngôn ngữ khác như C, C ++, C #, Objective-C và Java sẽ không tìm thấy gì mới trong lĩnh vực cú pháp ngôn ngữ Kotlin này. Đối với những người không quen thuộc với số nhị phân, bây giờ có thể là thời điểm tốt để tìm kiếm các tài liệu tham khảo về chủ đề này để hiểu cách các số và số 0 được tạo thành các byte để tạo thành số. Các tác giả khác đã thực hiện một công việc mô tả chủ đề tốt hơn nhiều so với chúng ta có thể làm trong phạm vi của cuốn sách này.
Đối với mục đích của bài tập này, chúng ta sẽ làm việc với biểu diễn nhị phân của hai số. Đầu tiên, số thập phân 171 được biểu thị dưới dạng nhị phân là:
10101011
Thứ hai, số 3 được thể hiện bằng chuỗi nhị phân sau:
00000011
Bây giờ chúng ta có hai số nhị phân để làm việc, chúng ta có thể bắt đầu xem xét các toán tử bitwise của Kotlin:
8. Bitwise Inversion
Phủ định Bitwise (còn được gọi là NOT) được thực hiện bằng cách sử dụng thao tác inv () và có tác dụng phủ định tất cả các bit trong một số. Nói cách khác, tất cả số 0 trở thành số 1 và tất cả số 1 trở thành số 0. Lấy ví dụ 3 số của chúng tôi, hoạt động Bitwise NOT có kết quả như sau:
00000011 NOT ======== 11111100
Do đó, đoạn code Kotlin sau đây có giá trị -4:
val y = 3 val z = y.inv() print("Result is $z")
9. Bitwise AND
Bitwise AND được thực hiện bằng thao tác and (). Nó tạo 1 bit bằng cách so sánh hai số. Bất kỳ vị trí tương ứng trong chuỗi nhị phân của mỗi số trong đó cả hai bit là 1 thì kết quả là 1. Nếu một trong hai vị trí bit chứa 0 thì kết quả là 0 . Lấy hai số ví dụ của chúng tôi, điều này sẽ xuất hiện như sau:
10101011 AND 00000011 ======== 00000011
Như chúng ta có thể thấy, các vị trí duy nhất mà cả hai số có 1 là hai vị trí cuối cùng. Do đó, nếu chúng tôi thực hiện điều này trong mã Kotlin, chúng tôi sẽ thấy rằng kết quả là 3 (00000011):
val x = 171 val y = 3 val z = x.and(y) print("Result is $z")
10. Bitwise OR
Bitwise OR cũng thực hiện so sánh từng bit của hai chuỗi nhị phân. Không giống như hoạt động AND,khi thực hiện OR trên một cặp bit nó trả về một nếu một trong các bit là 1 ngược lại nó trả về 0 . Sử dụng số ví dụ của chúng tôi, kết quả sẽ như sau:
10101011 OR 00000011 ======== 10101011
Nếu chúng ta thực hiện thao tác này trong Kotlin bằng cách sử dụng OR(), kết quả sẽ là 171:
val x = 171 val y = 3 val z = x.or(y) print("Result is $z")
11. Bitwise XOR
khi thực hiện OR trên một cặp bit nó trả về 1 nếu các bit khác nhau, ngược lại nó trả về 0.
10101011 XOR 00000011 ======== 10101000
Kết quả trong trường hợp này là 10101000 chuyển thành 168 ở dạng thập phân. Để xác minh điều này, chúng ta có thể, một lần nữa, hãy thử một số mã Kotlin:
val x = 171 val y = 3 val z = x.xor(y) print("Result is $z")
Khi được thực thi, chúng ta sẽ nhận được kết quả như sau:
Result is 168