Nhà khai thác có điều kiện bậc ba Kotlin

1. Khái quát chung

Nói một cách ngắn gọn, không có toán tử bậc ba trong Kotlin . Tuy nhiên, việc sử dụng các biểu thức ifwhen sẽ giúp lấp đầy khoảng trống này.

Trong hướng dẫn này, chúng ta sẽ xem xét một số cách khác nhau để bắt chước toán tử bậc ba.

2. ifwhen Biểu thức

Không giống như các ngôn ngữ khác, ifwhen trong Kotlin là các biểu thức. Kết quả của một biểu thức như vậy có thể được gán cho một biến .

Sử dụng thực tế này, cả ifwhen đều có thể được thay thế cho toán tử bậc ba theo cách riêng của chúng.

2.1. Sử dụng if-else

Hãy xem cách sử dụng biểu thức if để bắt chước toán tử bậc ba:

val result = if (a) "yes" else "no"

Trong biểu thức trên, nếu a được đặt thành true , biến kết quả của chúng ta được đặt thành yes . Nếu không, nó được đặt thành không .

Cần lưu ý rằng kiểu kết quả phụ thuộc vào biểu thức ở phía bên phải . Nói chung, loại là Bất kỳ . Ví dụ: nếu phía bên phải có kiểu Boolean , kết quả cũng sẽ là Boolean :

val result: Boolean = if (a == b) true else false

2.2. Sử dụng khi nào

Chúng ta cũng có thể sử dụng biểu thức when để tạo toán tử giả bậc ba:

val result = when(a) {   true -> "yes"   false -> "no" }

Mã này đơn giản, dễ hiểu và dễ đọc. Nếu mộtđúng , giao kết quả . Nếu không, hãy gán nó thành không .

2.3. Nhà điều hành Elvis

Đôi khi, chúng tôi sử dụng biểu thức if để trích xuất một số giá trị khi nó không phải là null hoặc trả về một giá trị mặc định khi nó là null :

val a: String? = null val result = if (a != null) a else "Default"

Cũng có thể làm tương tự với biểu thức when :

val result = when(a) { null -> "Default" else -> a }

Vì đây là một mẫu phổ biến nên Kotlin có một toán tử đặc biệt cho nó:

val result = a ?: "Default"

Các : được gọi là các nhà điều hành Elvis. Nó trả về toán hạng nếu nó không phải là null . Nếu không, nó sẽ trả về giá trị mặc định được chỉ định ở bên phải của toán tử ?: .

2.4. DSL

Chắc chắn có một sự cám dỗ để tạo ra một DSL bắt chước một nhà điều hành bậc ba. Tuy nhiên, các hạn chế về ngôn ngữ của Kotlin quá chặt chẽ để cho phép sao chép 100% cú pháp bậc ba truyền thống.

Do đó, chúng ta hãy tránh sự cám dỗ này và chỉ cần sử dụng một trong những giải pháp đã đề cập trước đó.

3. Kết luận

Mặc dù Kotlin không có toán tử bậc ba, nhưng có một số lựa chọn thay thế chúng ta có thể sử dụng - nếukhi nào . Chúng không phải là một đường cú pháp, mà là các biểu thức hoàn chỉnh, như chúng ta đã thấy trước đây.

Như mọi khi, mã có sẵn trên GitHub.