Nếu bạn đã học và code java thì chắc hẳn bạn cũng đã từng gặp và thậm chí là gặp nhiều lần NullPointerException. Exception này xảy ra khi bạn đọc 1 thuộc tính (property) hoặc gọi 1 method của 1 object mà nó đang tham chiếu (reference) tới giá trị null.
Với Kotlin thì bạn sẽ ko cần phải lo lắng về Exception này nữa. Theo mặc định thì biến trong Kotlin sẽ ko có giá trị Null, trừ khi bạn khai báo rõ ràng nó là Null.
Như ví dụ sau sẽ ko biên dịch (compiler)
val name: String = null // will not compile
Nếu bạn cố tính muốn gán giá trị null thì thêm dấu ? sau kiểu data, như sau:val name: String? = null // will compilename = "Nguyen The Lam" // new value is "Nguyen The Lam"Tương tự cho các kiểu data khác: Long? Int? Object? ...
Khi bạn cố tính gán giá trị null cho 1 biến thì bạn sẽ ko thể gọi các method, property theo cách . (chấm) thông thường nữa.
Thay vào đó, bạn dùng ?. (tổ hợp dấu chấm hỏi và dấu chấm), như sau để gọi hàm, property.
val name: String? = nullprint(name?.length) // will compile and print "null"Giá trị null mà compiler in ra ở trên là 1 string "null".
Có thể gán lại giá trị null cho 1 biến khác như sau
val name: String? = nullval len: Int? = name?.lengthprint(len) // will compile and print "null"Nếu vẫn muốn tạo ra NullPointerException thì thay ?. bằng !!. (ko khuyến khích)
val name: String? = nullval len: Int? = name!!.lengthprint(len) // NullPointerException errorToán tử ?: hay còn gọi là toán tử Elvis
được sử dụng để cung cấp 1 giá trị thay thế cho 1 biến nếu nó null
val fullName = nullval name: String = fullName?: "Ducky"print(name) // will compile and print "Ducky"Đoạn code trên, compiler sẽ gán giá trị Ducky cho biến name, vì fullName = null,
Nếu fullName khác null thì giá trị của fullName sẽ gán cho name thay vì Ducky.
2. Loop
Các vòng lặp trong Kotlin: for - while - do while
- for loop
for (value in range) { // Execute code}trong đoạn code trên: in là 1 toán tử chỉ ra rằng value (giá trị) in (trong) range (1 giải giá trị)
Ex:
for (number in 1..9) { print("$number ") // will print 1 2 3 4 5 6 7 8 9}Duyệt thông qua chỉ số mảng (Array):
Có thể dùng withIndex() function hoặc indices property
- withIndex() function
val numbers = intArrayOf(1,2,3,4,5)for ((index, value) in numbers.withIndex()) { print("$index index value is $value\n")}thực thi đoạn code trên, giá trị in ra sẽ là:
0 index value is 11 index value is 22 index value is 33 index value is 44 index value is 5- indices property
val numbers = intArrayOf(1,2,3,4,5)for (index in numbers.indices) { print("$index index value is ${numbers[index]}\n")}thực thi đoạn code trên, giá trị in ra:
0 index value is 11 index value is 22 index value is 33 index value is 44 index value is 53. Cấu trúc điều kiện: if, if - else, when
- if - tương tự java
val check= 10if (check % 2 == 0) { print("$check chia hết cho 2") // 10 chia hết cho 2}có thể dùng is keyword để check điều kiện if
if (number is Int) { print("$number is an integer")}- if - else
val number = 3if (number % 2 == 0) { print("$number chia hết cho 2")} else { print("$number ko chia hết cho 2") // 3 ko chia hết cho 2}Một điểm lưu ý với câu lệnh if - else trong Kotlin là:
if - else còn có thể là 1 biểu thức trong Kotlin
val number = 3val result = if (number % 2 == 0) { "$number chia hết cho 2"} else { "$number ko chia hết cho 2"}print(result) // 3 ko chia hết cho 2Lưu ý là nếu có nhiều giá trị trong if - else thì giá trị trả về của biểu thức là giá trị cuối cùng.
Ex:
val result = if (number % 2 == 0) { "Divisible by 2" "Number is $number" // Nếu thực thi thì chỉ string này được trả về} else { "Not divisible by 2" "Number is $number"}- when
when trong Kotlin là 1 sự thay thế cho swith trong java, c++
when được giới thiệu thì ngắn gọn và nhiều tính năng hơn so với swith trong java, c++
các kiểu data áp dụng cho when: By, Short, Int, String, và bất kỳ object nào
fun guessTheNumber(number: Int) { when (number) { 1 -> println("number is 1") 2 -> println("number is 2") 3 -> println("number is 3") else -> println("number is neither 1, 2 or 3") }}when cũng có thể ko cần đối số (argument)
fun guessTheNumber(number: Int) { when { number == 1 -> println("number is 1") number == 2 -> println("number is 2") number == 3 -> println("number is 3") else -> println("number is neither 1, 2 or 3") }}Nếu muốn thực thi nhiều hơn 1 lệnh trong 1 nhánh (branch) thì dùng cặp { } để bao code lại.
val number = 2when (number) { 1 -> println("number is 1") 2 -> { println("number is 2") println("it is an even number") } 3 -> println("number is 3")}when trong Kotlin cũng có thể làm được như sau
val number = 2when (number) { 1, 2 -> println("number is either 1 or 2") // lệnh này sẽ đc thực thi. (hoặc là 1 hoặc là 2) 3 -> println("number is 3")}
0 nhận xét:
Đăng nhận xét