Chào mừng bạn đến với Cafedev – nguồn cảm hứng và kiến thức sâu rộng về lập trình! Hôm nay, chúng ta sẽ khám phá sâu hơn về Kotlin và các tính năng mạnh mẽ của nó trong việc kiểm tra loại và ép kiểu. Điều đặc biệt là khám phá về kiểm tra loại và ép kiểu generics, như `List`, `Map<k,v>`. Đừng bỏ lỡ cơ hội hiểu rõ hơn về toán tử `is`, `!is` và các chiêu ép kiểu thông minh mà Kotlin mang lại. Hãy cùng nhau đào sâu vào thế giới phong phú của Kotlin tại Cafedev!

Trong Kotlin, bạn có thể thực hiện kiểm tra loại để kiểm tra loại của một đối tượng khi chạy. Ép kiểu chuyển đổi đối tượng thành một loại khác.

Để tìm hiểu cụ thể về kiểm tra loại và ép kiểu generics, ví dụ như List, Map<k,v></k,v>, xem Kiểm tra loại và ép kiểu generics.

1. Toán tử is và !is

Sử dụng toán tử is hoặc dạng phủ định !is để thực hiện kiểm tra khi chạy để xác định xem một đối tượng có tuân thủ một loại cụ thể không:

if (obj is String) {
    print(obj.length)
}

if (obj !is String) { // Same as !(obj is String)
    print("Not a String")
} else {
    print(obj.length)
}

2. Ép kiểu thông minh

Trong hầu hết các trường hợp, bạn không cần sử dụng toán tử ép kiểu rõ ràng trong Kotlin vì trình biên dịch theo dõi các kiểm tra isép kiểu rõ ràng cho các giá trị không thay đổi và tự động chèn (ép kiểu an toàn) khi cần thiết:

fun demo(x: Any) {
    if (x is String) {
        print(x.length) // x is automatically cast to String
    }
}

Trình biên dịch là đủ thông minh để biết rằng một ép kiểu là an toàn nếu kiểm tra âm dẫn đến một giá trị trả về:

if (x !is String) return

print(x.length) // x is automatically cast to String

Hoặc nếu nó ở bên phải của && hoặc || và kiểm tra phù hợp (thường hoặc âm) ở phía bên trái:

// x is automatically cast to String on the right-hand side of `||`
if (x !is String || x.length == 0) return

// x is automatically cast to String on the right-hand side of `&&`
if (x is String && x.length > 0) {
    print(x.length) // x is automatically cast to String
}

Ép kiểu thông minh cũng hoạt động cho biểu thức when và vòng lặp while:

when (x) {
    is Int -> print(x + 1)
    is String -> print(x.length + 1)
    is IntArray -> print(x.sum())
}

Lưu ý rằng ép kiểu thông minh chỉ hoạt động khi trình biên dịch có thể đảm bảo rằng biến sẽ không thay đổi giữa kiểm tra và việc sử dụng nó.

Ép kiểu thông minh có thể được sử dụng trong các điều kiện sau:

val local variablesLuôn luôn, trừ khi là các thuộc tính được ủy quyền cục bộ.
val propertiesNếu thuộc tính là private, internal, hoặc nếu kiểm tra được thực hiện trong cùng module nơi thuộc tính được khai báo. Ép kiểu thông minh không thể sử dụng trên các thuộc tính open hoặc thuộc tính có getter tùy chỉnh.
var local variablesNếu biến không được sửa đổi giữa kiểm tra và việc sử dụng nó, không được chụp trong một lambda sửa đổi nó, và không phải là một thuộc tính được ủy quyền cục bộ.
var propertiesKhông bao giờ, Vì giá trị thuộc tính này có thể thay đổi ở đâu đó.

3. Toán tử ép kiểu “Unsafe”

Thông thường, toán tử ép kiểu ném một ngoại lệ nếu việc ép kiểu không thể thực hiện. Do đó, nó được gọi là unsafe. Ép kiểu không an toàn trong Kotlin được thực hiện bởi toán tử nối as.

val x: String = y as String

Lưu ý rằng null không thể được ép kiểu thành String, vì loại này không phải là nullable. Nếu y là null, mã trên sẽ ném một ngoại lệ. Để làm cho mã như vậy đúng với giá trị null, hãy sử dụng kiểu có thể là null ở phía bên phải của ép kiểu:

val x: String? = y as String?

4. Toán tử ép kiểu “Safe” (có thể là null)

Để tránh ngoại lệ, sử dụng toán tử ép kiểu safe as?, nó trả về null khi thất bại.

val x: String? = y as? String

Lưu ý rằng mặc dù phía bên phải của as? là một loại không thể là null String, kết quả của ép kiểu là có thể là null.

Cảm ơn bạn đã đồng hành cùng Cafedev trong hành trình khám phá về Kotlin và sức mạnh của kiểm tra loại và ép kiểu! Chúng ta đã có một hành trình thú vị, đắm chìm trong những khái niệm sâu sắc của ngôn ngữ lập trình này. Hy vọng rằng bạn đã tìm thấy thông tin hữu ích và động lực mới cho sự sáng tạo của mình. Đừng quên theo dõi những bài viết mới nhất tại Cafedev để cùng nhau khám phá thêm về những xu hướng và công nghệ mới nhất trong ngành công nghiệp lập trình. Hẹn gặp lại bạn tại Cafedev!

Các nguồn kiến thức MIỄN PHÍ VÔ GIÁ từ cafedev tại đây

Nếu bạn thấy hay và hữu ích, bạn có thể tham gia các kênh sau của Cafedev để nhận được nhiều hơn nữa:

Chào thân ái và quyết thắng!

Đăng ký kênh youtube để ủng hộ Cafedev nha các bạn, Thanks you!