Toán tử gọi an toàn
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 14 trên 93.
Khi có một biến có thể nhận giá trị null, bạn không thể gọi trực tiếp các phương thức hoặc truy cập thuộc tính của biến đó: trình biên dịch sẽ không cho phép vì giá trị có thể là null. Toán tử gọi an toàn (safe call operator) ?. giải quyết vấn đề này một cách gọn gàng.
Thay vì dùng dấu chấm thông thường ., bạn dùng ?. để truy cập an toàn vào các thành viên của kiểu có thể nhận giá trị null:
fun main() {
val name: String? = "Alice"
val length = name?.length // Trả về 5
println(length)
val nullName: String? = null
val nullLength = nullName?.length // Trả về null (không gây lỗi!)
println(nullLength)
}Toán tử gọi an toàn kiểm tra xem giá trị có phải là null hay không trước khi truy cập thuộc tính hoặc phương thức. Nếu giá trị là null, toàn bộ biểu thức trả về null thay vì gây lỗi. Nếu giá trị tồn tại, toán tử này hoạt động giống như một phép gọi thông thường.
Bạn cũng có thể nối nhiều lời gọi an toàn với nhau:
fun main() {
val text: String? = "Hello"
val result = text?.uppercase()?.length
println(result) // In ra: 5
}Nếu bất kỳ phần nào trong chuỗi là null, toàn bộ biểu thức sẽ trả về null an toàn mà không gây lỗi.
Thử thách
DễBạn được cung cấp biến có thể nhận giá trị null sau:
val message: String? = "Kotlin"Dùng toán tử gọi an toàn để:
- Lấy độ dài của
messagevà in ra - Chuyển
messagethành chữ hoa và in ra kết quả
Sau đó, tạo một biến khác có thể nhận giá trị null:
val empty: String? = nullDùng toán tử gọi an toàn để lấy độ dài của empty và in ra.
In mỗi kết quả trên một dòng riêng. Hãy nhớ: toán tử gọi an toàn trả về
nullkhi giá trị lànull.
Tự làm thử
fun main() {
val message: String? = "Kotlin"
// TODO: Dùng toán tử gọi an toàn để lấy độ dài của message rồi in ra
// TODO: Dùng toán tử gọi an toàn để chuyển message thành chữ hoa rồi in ra
val empty: String? = null
// TODO: Dùng toán tử gọi an toàn để lấy độ dài của empty rồi in ra
}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