Bài 8 – Các toán tử quan trọng trong Kotlin


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):

  1. Toán tử một ngôi
  2. Toán tử số học cơ bản
  3. Toán tử gán
  4. Toán tử So sánh
  5. Toán tử Logic
  6. Toán tử tăng dần giảm dần
  7. Độ ư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ụ:


fun main(args: Array<String>) {
var a:Int=-8
var b=a.unaryPlus()
var c=a.unaryMinus()
println("a="+a)
println("b="+b)
println("c="+c)
}

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ụ:


fun main(args: Array<String>) {
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))
}

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ụ:


fun main(args: Array<String>) {
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)
}

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ụ:

fun main(args: Array<String>) {
    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))
}

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ụ:


fun main(args: Array<String>) {
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))
}

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ụ:


fun main(args: Array<String>) {
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)
}

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/)

One response

  1. 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.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: