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.
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
}
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
4Toán tử phần 1
Toán tử số họcToán tử moduloPhép gán kết hợpToán tử so sánhÔn tập: phép tính đơn giản7Nhập xuất cơ bản
Hàm PrintlnMẫu chuỗiĐầu vào ReadLineChuyển đổi kiểu dữ liệuÔn tập: Số năm đến khi nghỉ hưuÔn tập: Đúng hay sai10Hàm
Khai báo hàmTham số và đối sốGiá trị trả vềĐối số có tênGiá trị mặc địnhHàm chỉ gồm một biểu thứcÔn tập: hàm SigmaÔn tập: hàm kiểm tra hợp lệ3Tính có thể null
An toàn với null là gìKiểu có thể nullToán tử gọi an toànToán tử ElvisCơ bản về thử thách hàmKhẳng định không nullÔn tập: truy cập an toàn6Ra quyết định
Câu lệnh ifCâu lệnh if-elseIf dưới dạng biểu thứcBiểu thức whenWhen với khoảng giá trịÔn tập: máy tính đơn giản9Vòng lặp
Vòng lặp forVòng lặp whileVòng lặp do-whileBreakContinuePhạm vi trong vòng lặpVòng lặp lồng nhauÔn tập: giai thừaÔn tập: đầu vào động12Cơ bản về danh sách
List và MutableListTruy cập phần tửChỉnh sửa danh sáchPhương thức của ListPair và TripleÔn tập: danh sách sản phẩmÔn tập: danh sách đảo ngược15Theo dõi chi tiêu hằng ngày
Tổng quan dự ánThoát khỏi chương trìnhTự luyện tập: Playground Kotlin