Menu
CoddyTech

Khẳng định không null

Thuộc phần Kiến thức nền tảng trong hành trình Kotlin của Coddy. Bài học 17 trên 93.

Toán tử gọi an toàn và toán tử Elvis xử lý giá trị null một cách an toàn, nhưng đôi khi bạn hoàn toàn chắc chắn rằng một giá trị có thể null không phải là null tại một vị trí cụ thể trong code. Toán tử khẳng định không null !! cho phép bạn nói với Kotlin: "Mình đảm bảo giá trị này không phải là null."

fun main() {
    val name: String? = "Alice"
    val length = name!!.length  // Chuyển String? thành String
    println(length)  // In ra: 5
}

Toán tử !! chuyển đổi một kiểu có thể null thành kiểu tương ứng không thể null. Tuy nhiên, nếu giá trị thực sự là null, chương trình của bạn sẽ gặp lỗi NullPointerException:

fun main() {
    val name: String? = null
    val length = name!!.length  // Chương trình bị lỗi ở đây!
}

Khi nào nên dùng: Chỉ dùng !! khi logic của bạn đảm bảo giá trị không thể là null, nhưng trình biên dịch không thể xác minh điều đó. Trong hầu hết trường hợp, hãy ưu tiên lời gọi an toàn ?. hoặc toán tử Elvis ?:. Toán tử khẳng định không null nên là lựa chọn cuối cùng, không phải lựa chọn đầu tiên.

challenge icon

Thử thách

Dễ

Viết một hàm getUppercaseLength nhận tham số text và trả về độ dài của phiên bản viết hoa của chuỗi đó.

Hàm nhận một giá trị chuỗi không null, nhưng kiểu của tham số có thể là null (String?). Dùng toán tử khẳng định không null !! để chuyển nó thành kiểu không thể là null, sau đó gọi nối tiếp phương thức uppercase() và lấy length.

Tham số:

  • text (String?): Một chuỗi có thể là null nhưng được đảm bảo luôn có giá trị

Giá trị trả về: Độ dài của phiên bản viết hoa của chuỗi văn bản (Int)

Lưu ý: Trong thử thách này, đầu vào luôn là một chuỗi hợp lệ, không bao giờ là null. Điều này mô phỏng tình huống bạn biết giá trị tồn tại nhưng trình biên dịch không thể xác minh điều đó.

Tự làm thử

fun getUppercaseLength(text: String?): Int {
    // Viết code ở đây
}
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Kiến thức nền tảng

Tự luyện tập: Playground Kotlin