× Giới thiệu Lịch khai giảng Tin tức Sản phẩm học viên

Mẹo & thủ thuật Kotlin bạn phải biết

16/05/2023 01:28

Tìm hiểu một số mẹo và thủ thuật đơn giản nhưng rất hữu ích cho thói quen phát triển Android của bạn.

Dưới đây là danh sách các mẹo và thủ thuật Kotlin bạn cần biết. Danh sách này không theo thứ tự đặc biệt.

1. Hoán đổi hai biến mà không có biến thứ ba

Theo truyền thống, khi đối mặt với vấn đề hoán đổi hai biến, bạn cần tạo một biến trợ giúp thứ ba để lưu trữ tạm thời một giá trị. Nhưng bạn có biết rằng trong Kotlin, bạn có thể làm điều này với một dòng mã:

biến a = 1; 
biến b = 2;

a = b. also { b = a } // nay a = 2, b = 1

2. Toán tửElvis

Toán tử Elvis hoạt động với các loại nullable sao cho nếu phía bên trái của is ?:thì nullnó sẽ mặc định là giá trị ở bên phải. Mặt khác, nó sử dụng giá trị ở phía bên trái.

Hãy áp dụng toán tử Elvis bằng cách tạo một numberbiến là số nguyên hoặc số null. Nếu nó là null, hãy in "Number is null"và nếu không, thì hãy in chính số đó:

số var : Int? = null

println(số ?: "Số là null") // in ra "Số là null"
number = 10
println(number ?: "Number is null") // in ra 10

3. Kiểm tra thuộc tính Nullable Sử dụng Let

Hãy tạo một biến có thể là một nullhoặc một số nguyên. Nếu biến là một số nguyên, bạn in ra “Yay!”. Nếu nó là null, bạn không in gì cả.

Cách tiếp cận thông thường là kiểm tra tính vô hiệu bằng câu lệnh if:

val num: Int? = 15
if(num != null){
    println("Yay!")
}

giá trị số: Int? = 15if (num != null ){ 
println("Yay!")
}

Sử dụng letbạn có thể đạt được điều tương tự chỉ bằng cách:

num?.let { println("Yay!") }

4. Điền vào danh sách mà không cần lặp lại

Để khởi tạo một danh sách với ví dụ như số 0, thay vì lặp, bạn có thể:


val list = DoubleArray(5) { 0.0 }.asList()
println(list) // [0.0, 0.0, 0.0, 0.0, 0.0]

danh sách val = DoubleArray(5) { 0.0 }.asList()println(danh sách) // [0.0, 0.0, 0.0, 0.0, 0.0]

Để tạo danh sách trong đó mỗi phần tử lớn hơn phần tử trước đó, bạn có thể sử dụng cách tiếp cận tương tự:

val powList = List(6, {it})
println(powList) // prints [0, 1, 2, 3, 4, 5]

val powList = List(6, {it}) 
println(powList) // in [0, 1, 2, 3, 4, 5]

5. Câu lệnh If-Else ngắn hơn

Không có toán tử bậc ba trong Kotlin. Nhưng có hai cách khác để làm sạch câu lệnh if của bạn:

val num = 10
// Regular if-else statement:
if(num < 100){
    println("Small")
} else {
    println("Big")
}
// The same with a when statement:
when(num < 100){
    true -> println("Small")
    false -> println("Big")
}
// The same with a one-liner shorthand
if(num < 100) println("Small") else println("Big")

7. Cung cấp tham số mặc định cho hàm

Đôi khi, việc cung cấp một tham số mặc định cho một hàm rất hữu ích. Bằng cách này, bạn có thể gọi hàm có và không có tham số.

Ví dụ:

lời chào vui vẻ (ai: String = "mọi người"){ 
println("Xin chào, ${ai}.")
}
lời chào ("Michael") // In ra "Xin chào, Michael."
lời chào () // In ra "Xin chào, tất cả mọi người."

8. Làm sạch mã bằng cách sử dụng 'Áp dụng' và 'Với'

Giả sử bạn có một lớp ví dụ với hai thuộc tính:

class Example() {
var prop1 = "Property 1"
var prop2 = "Property 2"
}

lớp Ví dụ() { 
var prop1 = "Thuộc tính 1"
var prop2 = "Thuộc tính 2"
}

Bây giờ bạn tạo một thể hiện của lớp đó và thay đổi các thuộc tính:

val example = Example()
example.prop1 = "Changed prop1"
example.prop2 = "Changed prop2"

ví dụ val = Ví dụ() 
example.prop1 = "Đã thay đổi prop1"
example.prop2 = "Đã thay đổi prop2"

Điều này giới thiệu sự lặp lại trong mã. Vì bạn đang sửa đổi một cách rõ ràng các thuộc tính của examplenó nên việc lặp lại tên đó là điều khó hiểu example.

Sử dụng hàm applyor withtrong trường hợp này rất hữu ích:

val example = Example().apply {
prop1 = "Changed prop1"
prop2 = "Changed prop2"
}
// Or the same can be done with the with function:val example = Example()
with(example) {
prop1 = "Changed prop1"
prop2 = "Changed prop2"
}
val ví dụ = Ví dụ().apply { 
prop1 = "Prop1 đã thay đổi"
prop2 = "Prop2 đã thay đổi"
}
// Hoặc có thể làm tương tự với hàm with:val ví dụ = Ví dụ()
với (ví dụ) {
prop1 = "Đã thay đổi prop1"
prop2 = "Đã thay đổi prop2"
}

Bằng cách này, bạn không cần phải lặp lại examplekhi sửa đổi các thuộc tính của nó. Điều này làm cho mã sạch hơn một chút.

9. Điều kiện xuất cảnh sớm

Ví dụ: giả sử rằng một số lớn hơn 0. Nếu không, thì bạn đưa ra một ngoại lệ:

val n = -1if (n < 0) {
throw IllegalArgumentException("Number less than 0")
}
giá trị n = -1if (n < 0) { 
ném IllegalArgumentException("Số nhỏ hơn 0")
}

Nhưng ngoài điều này, bạn cũng có thể sử dụng các hàm requireand checkđể xác nhận tính hợp lệ của đầu vào:

require (n >= 0) {
"Number less than 0"
}
// ORcheck(n >= 0) {
"Number less than 0"
}
yêu cầu (n >= 0) { 
"Số nhỏ hơn 0"
}
// HOẶCkiểm tra (n >= 0) {
"Số nhỏ hơn 0"
}