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

Lược bài từ blog của mod @duythanhcse

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:

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:

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:

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:

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:

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

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õ).

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

1 Like