Kiểu có thể 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 13 trên 93.
Đôi khi bạn thực sự cần một biến có thể chứa giá trị “không có gì”. Ví dụ: người dùng có thể không có tên đệm hoặc kết quả tìm kiếm có thể không có kết quả nào. Kotlin cho phép điều này thông qua kiểu dữ liệu có thể nhận giá trị null.
Để cho phép một kiểu nhận giá trị null, hãy thêm ? sau tên kiểu:
fun main() {
var middleName: String? = "Marie"
middleName = null // Giờ có thể gán null!
val age: Int? = null // Có thể chứa giá trị Int hoặc null
}? cho Kotlin biết: "Biến này có thể là null, vì vậy hãy cẩn thận khi dùng nó." Nếu không có ?, kiểu dữ liệu không thể nhận giá trị null.
Quan trọng: Kiểu dữ liệu cho phép giá trị null và kiểu dữ liệu không cho phép giá trị null khác nhau. Bạn không thể gán trực tiếp một giá trị có thể là null cho một biến không thể là null:
fun main() {
val nullableName: String? = "Alice"
val regularName: String = nullableName // Lỗi!
}Sự phân biệt này là có chủ đích. Nó buộc bạn phải xử lý khả năng giá trị là null trước khi sử dụng giá trị đó. Trong các bài học tiếp theo, bạn sẽ tìm hiểu những cách an toàn mà Kotlin cung cấp để làm việc với các giá trị có thể null.
Thử thách
DễKhai báo các biến có thể nhận giá trị null sau:
- Một biến
Stringcó thể nhận giá trị null, tên lànickname, với giá trị"Shadow" - Một biến
Intcó thể nhận giá trị null, tên làage, với giá trịnull - Một biến
Doublecó thể nhận giá trị null, tên làbalance, với giá trị99.5
Sau đó, in ra cả ba giá trị trên các dòng riêng biệt bằng println().
Nhớ đặt
?sau tên kiểu dữ liệu để kiểu đó có thể nhận giá trị null. Khi in ra giá trịnull, bạn sẽ thấy từnull.
Tự làm thử
fun main() {
// TODO: Khai báo các biến (variable) có thể nhận giá trị null sau:
// 1. Một biến String có thể nhận giá trị null, tên là 'nickname', với giá trị "Shadow"
// 2. Một biến Int có thể nhận giá trị null, tên là 'age', với giá trị null
// 3. Một biến Double có thể nhận giá trị null, tên là 'balance', với giá trị 99.5
// Sau đó, in cả ba giá trị ra, mỗi giá trị trên một dòng riêng
}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