Câu hỏi phỏng vấn Kotlin
Câu hỏi

Cách tiếp cận tự nhiên để xử lý các giá trị có thể null, tham chiếu hoặc chuyển đổi chúng là gì?

Câu trả lời

Cách tiếp cận tự nhiên để xử lý các giá trị có thể null trong Kotlin bao gồm việc sử dụng các toán tử an toàn như ?. (toán tử an toàn), ?: (toán tử Elvis), và !!. (toán tử khẳng định không null). Kotlin cung cấp các cơ chế này để giúp lập trình viên quản lý các giá trị có thể null một cách an toàn và hiệu quả, tránh được lỗi NullPointerException mà không cần phải kiểm tra null một cách thủ công.

  • Toán tử an toàn (?.): Cho phép bạn gọi một phương thức hoặc truy cập một thuộc tính của một đối tượng có thể null mà không gây ra NullPointerException. Nếu đối tượng đó là null, thì biểu thức sẽ trả về giá trị null mà không thực hiện phương thức hoặc truy cập thuộc tính.

  • Toán tử Elvis (?:): Cho phép bạn cung cấp một giá trị mặc định khi một biểu thức trả về null. Điều này giúp bạn gán giá trị mặc định cho biến một cách ngắn gọn.

  • Toán tử khẳng định không null (!!.): Sử dụng khi bạn chắc chắn rằng một biến không phải là null. Toán tử này sẽ chuyển đổi một giá trị có thể null thành một giá trị không null, và sẽ ném ra NullPointerException nếu giá trị đó thực sự là null.

Ví dụ về cách sử dụng:

kotlin Copy
val name: String? = getName()
println(name?.length) // Sử dụng toán tử an toàn để tránh NullPointerException

val length = name?.length ?: 0 // Sử dụng toán tử Elvis để cung cấp giá trị mặc định là 0 nếu name là null

val nonNullName = name!! // Sử dụng toán tử khẳng định không null, chấp nhận rủi ro của NullPointerException

Những cách tiếp cận này giúp làm cho mã nguồn Kotlin trở nên sạch sẽ, dễ đọc và giảm thiểu rủi ro của lỗi thời gian chạy liên quan đến giá trị null[3][13].

Citations:
[1] https://quantrimang.com/hoc/gia-tri-null-trong-sql-162393
[2] https://developer.andro...

middle

middle

Gợi ý câu hỏi phỏng vấn

senior

Giải thích sự khác biệt giữa các lớp Inline (Inline classes) so với bí danh kiểu (type aliases)

senior

Tại sai trong Kotlin, từ khóa static không tồn tại?

junior

Làm thế nào để nối chuỗi một cách chính xác trong Kotlin?

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào