12/08/2018, 15:50

Operator Overloading trong Kotlin

Ở Kotlin, như trong mọi ngôn ngữ, chúng ta sử dụng +, -, *, / để thực hiện các hoạt động nhất định. Kotlin đã sửa số và các toán tử tượng trưng mà chúng ta có thể dễ dàng sử dụng trên bất kỳ lớp nào. Tạo ra một hàm với một tên dành riêng sẽ được mapped tới symbol. Overloading các toán tử này sẽ ...

Ở Kotlin, như trong mọi ngôn ngữ, chúng ta sử dụng +, -, *, / để thực hiện các hoạt động nhất định. Kotlin đã sửa số và các toán tử tượng trưng mà chúng ta có thể dễ dàng sử dụng trên bất kỳ lớp nào. Tạo ra một hàm với một tên dành riêng sẽ được mapped tới symbol. Overloading các toán tử này sẽ làm tăng sự đơn giản của code.

Một số toán tử cơ bản:

Toán Tử Unary

Toán Tử Binary

Loại mảng

Toán tử So sánh

Ví dụ:

   fun equals(other: Any?): Boolean

Chức năng Invoking

Ví dụ về Operator Overloading

Toán tử +

fun main(args: Array<String>) {
    val p1 = Point(3, -8)
    val p2 = Point(2, 9)

    var sum = Point()
    sum = p1 + p2

    println("sum = (${sum.x}, ${sum.y})")
}

class Point(val x: Int = 0, val y: Int = 10) {

    // overloading plus function
    operator fun plus(p: Point) : Point {
        return Point(x + p.x, y + p.y)
    }
}

Khi chạy chương trình, nó sẽ cho ra output:

sum = (5, 1)

Toán tử --

fun main(args: Array<String>) {
    var point = Point(3, -8)
    --point

    println("point = (${point.x}, ${point.y})")
}

class Point(var x: Int = 0, var y: Int = 10) {
    operator fun dec() = Point(--x, --y)
}

Khi chạy chương trình, nó sẽ cho ra output:

point = (2, -9)

Phải nhớ rằng

operator fun dec() = Point(--x, --y)

tương đương với

operator fun dec(): Point {
    return Point(--x, --y)
}

Kết luận

Việc sử dụng operator overloading của Kotlin sẽ giúp chúng ta đơn giản code và làm chúng dễ đọc hơn bằng cách sử dụng các symbols chuẩn, chúng ta có thể sử dụng chúng dễ dàng ở bất kỳ class nào. Bài viết đến đây là hết, cảm ơn các bạn đã đọc.

0