[polldaddy poll=9764234]
Mỗi một ngôn ngữ lập trình đều có một tập các toán tử quan trọng để giúp ta tạo các biểu thức trong mã lệnh để giải quyết một số vấn đề liên quan nào đó, và các toán tử này cũng được Kotlin Override thành các phương thức(ta có thể sử dụng các Operator thuần túy và cũng có thể dùng bằng các phương thức):
- Toán tử một ngôi
- Toán tử số học cơ bản
- Toán tử gán
- Toán tử So sánh
- Toán tử Logic
- Toán tử tăng dần giảm dần
- Độ ưu tiên toán tử
Bây giờ ta đi chi tiết vào từng loại toán tử:
1. Toán tử một ngôi:
Toán tử | Mô tả | Phương thức | Ví dụ |
+ | Số dương | a.unaryPlus() | var a:Int=-8 var b=a.unaryPlus() |
– | Số âm | a.unaryMinus() | var a:Int=-8 var b=a.unaryMinus() |
Ví dụ:
[code language=”groovy”]
fun main(args: Array) {
var a:Int=-8
var b=a.unaryPlus()
var c=a.unaryMinus()
println(“a=”+a)
println(“b=”+b)
println(“c=”+c)
}
[/code]
Chạy đoạn code trên ta sẽ có các kết quả:
a=-8 b=-8 c=8 |
Chú ý bản thân unaryPlus và unaryMinus không làm thay đổi giá trị nội tại của biến, mà nó trả về một giá trị, ta cần có biến để lưu lại giá trị này.
2. Toán tử số học cơ bản:
Toán tử | Mô tả | Phương thức | Ví dụ |
+ | Cộng | a.plus(b) | 8 + 5 => 13
8.plus(5) =>13 |
– | Trừ | a.minus(b) | 8-5 =>3
8.minus(5) =>3 |
* | Nhân | times | 8*5 =>40
8.times(5) =>40 |
/ | Chia | div | 8/5 => 1
8.div(5) => 1 |
% | Chia lấy phần dư | rem | 8 % 5 => 3
8.rem(5) =>3 |
Ví dụ:
[code language=”groovy”]
fun main(args: Array) {
var a:Int=8
var b:Int=5
println(“Phép cộng cách 1:”+a+”+”+b+”=”+(a+b))
println(“Phép cộng cách 2:”+a+”+”+b+”=”+(a.plus(b)))
println(“Phép trừ cách 1:”+a+”-“+b+”=”+(a-b))
println(“Phép trừ cách 2:”+a+”-“+b+”=”+(a.minus(b)))
println(“Phép nhân cách 1:”+a+”*”+b+”=”+(a*b))
println(“Phép nhân cách 2:”+a+”*”+b+”=”+(a.times(b)))
println(“Phép chia cách 1:”+a+”/”+b+”=”+(a/b))
println(“Phép chia cách 2:”+a+”/”+b+”=”+(a.div(b)))
println(“Lấy dư cách 1:”+a+”/”+b+”=”+(a%b))
println(“Lấy dư cách 2:”+a+”/”+b+”=”+(a.rem(b)))
println(8.plus(9))
}
[/code]
Chạy đoạn code trên ta sẽ có các kết quả:
Phép cộng cách 1:8+5=13 Phép cộng cách 2:8+5=13 Phép trừ cách 1:8-5=3 Phép trừ cách 2:8-5=3 Phép nhân cách 1:8*5=40 Phép nhân cách 2:8*5=40 Phép chia cách 1:8/5=1 Phép chia cách 2:8/5=1 Lấy dư cách 1:8/5=3 Lấy dư cách 2:8/5=3 17 |
3. Toán tử gán:
Toán tử | Mô tả | Ví dụ | Tương đương với |
= | Phép gán giá trị bên phải cho biến bên trái dấu bằng | x=5 | |
+= | Cộng và gán | x=2
x+=5 ==>x=7 |
x=x+5 |
-= | Trừ và gán | x=2
x-=5 ==>x=-3 |
x=x-5 |
*= | Nhân và gán | x=2
x*=5 ==>x=10 |
x=x*5 |
/= | Chia và gán | x=7
x/=5 ==>x=1 |
x=x/5 |
%= | Chia lấy dư | x=7
x%=5 ==>x=2 |
x=x%5 |
Ví dụ:
[code language=”groovy”]
fun main(args: Array) {
var x:Int=5
x+=2
println(“x=”+x)
x-=2
println(“x=”+x)
x*=2
println(“x=”+x)
x/=2
println(“x=”+x)
x=7
x%=3
println(“x=”+x)
}
[/code]
Chạy đoạn code trên ta sẽ có các kết quả:
x=7 x=5 x=10 x=5 x=1 |
4. Toán tử So sánh:
Toán tử | Mô tả | Phương thức | Ví dụ |
== | So sánh bằng | a.equals(b) | 5 == 5 => kết quả True |
!= | So sánh không bằng | !a.equals(b) | 5 != 5 => kết quả False |
< | So sánh nhỏ hơn | a.compareTo(b) < 0 | 5 < 5 => kết quả False |
<= | So sánh nhỏ hơn hoặc bằgg | a.compareTo(b) <= 0 | 5 <= 5 => kết quả True |
> | So sánh lớn hơn | a.compareTo(b) > 0 | 5 > 5.5 => kết quả False |
>= | So sánh lớn hơn hoặc bằng | a.compareTo(b) >= 0 | 113>= 5 => kết quả True |
Ví dụ:
[code language=”groovy”]
fun main(args: Array) {
var a:Int=8
var b:Int=5
println(a==b)
println(a.equals(b))
println(!a.equals(b))
println(a.compareTo(b))
println(3.compareTo(3))
println(3.compareTo(5))
println(5.compareTo(3))
}
[/code]
Chạy đoạn code trên ta sẽ có các kết quả:
false false true 1 0 -1 1 |
5. Toán tử Logic:
Toán tử | Mô tả | Phương thức | Ví dụ |
&& | Toán tử Và: Nếu cả hai điều kiện là True thì kết quả sẽ là True | a.and(b) | x=false
y=true x&&y==>false |
|| | Toán tử Hoặc: Chỉ cần một điều kiện True thì nó True, tất cả điều kiện False thì nó False | a.or(b) | x=false y=truex||y==>true |
Ví dụ:
[code language=”groovy”]
fun main(args: Array) {
var x:Boolean=true
var y:Boolean=false
var z:Boolean=false
println(“x=”+x)
println(“y=”+y)
println(“z=”+z)
println(“x&&y=”+(x&&y))
println(“x.and(y)=”+x.and(y))
println(“x || y =”+(x || y))
println(“x.or(y)=”+x.or(y))
println(“x || z =”+(x || z))
println(“x.or(z)=”+x.or(z))
println(“x && z =”+(x && z))
println(“x.and(z)=”+x.and(z))
println(“y || z =”+(y || z))
println(“y.or(z)=”+y.or(z))
println(“y && z =”+(y && z))
println(“y.and(z)=”+y.and(z))
println(“x && y && z =”+(x && y && z))
println(“x.and(y).and(z)=”+x.and(y).and(z))
println(“x|| y||z =”+(x|| y||z))
println(“x.or(y).or(z)=”+x.or(y).or(z))
}
[/code]
Chạy đoạn code trên ta sẽ có các kết quả:
x=true y=false z=false x&&y=false x.and(y)=false x || y =true x.or(y)=true x || z =true x.or(z)=true x && z =false x.and(z)=false y || z =false y.or(z)=false y && z =false y.and(z)=false x && y && z =false x.and(y).and(z)=false x|| y||z =true x.or(y).or(z)=true |
6. Toán tử tăng dần giảm dần
Toán tử | Mô tả | Phương thức | Ví dụ |
++ | Tăng nội tại biến lên một đơn vị | a.inc() | x=5
x++ =>x=6 |
— | giảm nội tại biến xuống một đơn vị | a.dec() | x=5 x–==>x=4 |
Chú ý bản thân hàm inc() và dec() sẽ không làm thay đổi(tăng hay giảm) giá trị nội tại của biến, ta cần có biến khác để lưu giá trị bị thay đổi.
Với toán tử tăng dần và giảm dần này thì việc đặt ++ hay — đằng trước và đằng sau biến có ý nghĩa khác nhau trong một biểu thức phức tạp, thông thường nó sẽ hoạt động theo nguyên tắc (có một số trường hợp đặc biệt phá vỡ nguyên tắc này ta không xét tới vì nó vô cùng hiếm gặp, chủ yếu do Testing Problem):
- Bước 1: Ưu tiên xử lý Prefix trước (các ++ hay — đặt trước biến)
- Bước 2: Tính toán các phép toán còn lại trong biểu thức
- Bước 3: Gán giá trị ở bước 2 cho biến lưu trữ kết quả ở bên trái dấu bằng
- Bước 4: Xử lý Post fix (các ++ hay — đặt sau biến)
Ví dụ:
[code language=”groovy”]
fun main(args: Array) {
var a:Int=5
var b:Int=8
var c:Int=2
a–
b++
var z=a++ + ++b – –c + 7
println(“a=”+a)
println(“b=”+b)
println(“c=”+c)
println(“z=”+z)
}
[/code]
Chạy đoạn code trên ta sẽ có các kết quả:
a=5 b=10 c=1 z=20 |
Các bạn tự giải thích vì sao ra kết quả ở trên nhé, Tui Busy và cũng chủ ý không giải thích, bạn hãy làm theo 4 bước ở trên thì sẽ ra được kết quả
7. Độ ưu tiên toán tử:
Kotlin có ràng buộc thứ tự ưu tiên của các toán tử. Tuy nhiên tốt nhất là các bạn hay điều khiển nó bằng cách dùng cặp ngoặc tròn ( ) để nó rõ nghĩa hơn. Bảng dưới đây để tham khảo độ ưu tiên từ cao xuống thấp (tuy nhiên có thể quên nó đi mà hãy dùng ngoặc tròn () để chỉ định rõ).
Thứ tự ưu tiên | Toán tử | Miêu tả |
1 | * / % | Phép nhân, chia, lấy phần dư |
2 | + – | Toán tử Cộng, Trừ |
3 | <= < > >= | Các toán tử so sánh |
4 | <> == != | Các toán tử so sánh |
5 | = %= /= -= += *= | Các toán tử gán |
6 | && , || | Các toán tử logic |
Như vậy tới đây Tui đã hướng dẫn xong các toán tử thường dùng nhất trong Kotlin, các bạn chú ý học kỹ và hiểu được nó thông qua các ví dụ ở trên nhé.
Các bạn có thể tải source code bài này ở đây: http://www.mediafire.com/file/ty4wjwe0bor55o0/HocToanTu.rar
Hẹn gặp các bạn ở những bài tiếp theo
Chúc các bạn thành công!
Trần Duy Thanh (http://ssoftinc.com/)
Hі! Someone in my Facebook group shared this site with us
so I came to give it a look. I’m definitely loving the information. I’m bookmarking and will be tweeting thiѕ to my followers!
Supeгb bloց and amazing design.