Java cũng là một ngôn ngữ lập trình. Trong việc phát triển ứng dụng di động cho hệ điều hành Android, Java là ngôn ngữ lựa chọn số 1 trước khi Kotlin được phát triển rộng rãi.
Hình 1.10. Mô tả các ứng dụng của ngôn ngữ Java
Java được nhiều người sử dụng bởi vì:
✓ Cú pháp dễ hiểu, lập trình được nhiều thứ-Web, mobile, ….
✓ Code Android từ Java tương thích rất tốt, rất ít lỗi.
✓ Có cộng đồng lớn, nhiều hướng dẫn và thư viện.
✓ Có nhiều công ty tuyển dụng.
Tuy có nhiều ưu điểm như thế, nhưng Java cũng có những nhược điểm chí mạng như:
✓ Các dòng code dài dòng.
✓ Lỗi NullPointerException, lỗi này xảy ra khi bạn gọi object hay phương thức bị null.
Vì Kotlin sinh sau đẻ muộn cho nên nó được cải tiến khá nhiều và khắc phục được nhiều bất cập còn tồn động trong Java. Cụ thể như sau:
a)Sự tương thích
Một trong những ưu điểm của Kotlin là Kotlin và Java có thể chứa cùng chung một dự án. Đồng thời, hai ngôn ngữ Kotlin, Java có thể gọi phương thức giữa các class với nhau. Về tính tương tác giữa Java và Kotlin là tuyệt đối.
b)Kotlin ngắn gọn hơn Java
Có thể nói đây là một lợi ích lớn nhất khi so với Java. Cũng là một bài toán logic, tuy nhiên bên Java số lượng tạo ra nhiều hơn so Kotlin.
c) Extension function
Chức năng này có thể thêm một function (tạm dịch là chức năng) cho một class
mà không cần kế thừa lại class đó.
Để hiểu rõ Extension là gì ta xem qua ví dụ dưới đây:
// Extension function. Ý nghĩa của hàm là để lấy từ đầu tiên của câu
fun String.getFirstWordOfSentences(): String =this.split(" ").get(0) / Khai báo biến tên testSentences, giá trị là chuỗi "Kotlin is so cool"
var testSentences = "Kotlin is so cool"
testSentences.getFirstWordOfSentences()// Kết quả là “Kotlin”
Thông qua ví dụ trên thấy chúng ta không hề kế thừa một class nào từ String,
nhưng thông qua Extension ta xây dựng một function mở rộng cho class String.
d) Hàm lồng nhau
Trong Kotlin, một function được định nghĩa hay được viết trong một function
được gọi là hàm lồng nhau. Sau đây là một số ví dụ về hàm lòng nhau: //Tạo một class Object User có 3 trường dữ liệu
class User(val id: Int, val name: String, val address: String) //Tạo một hàm lưu object user vào cơ sở dữ liệu
fun saveUserToDb(user: User) {
//Xây dựng thêm một hàm xác thực value có đang bị trống không? fun validate(user: User, value: String, fieldName: String) {
if (value.isEmpty()) {
throw IllegalArgumentException("Can't save user ${user.id}: empty $fieldName")
} }
validate(user, user.name, "Name") validate(user, user.address, "Address")
/Save user to the database ...
Một ví dụ khác sử dụng hàm lồng hàm khi sử dụng các Collection có trong Kotlin.
//khởi tạo một danh sách với kiểu dữ liệu là chuỗi có 4 giá trị ban đầu. val numbers = listOf("one", "two", "three", "four")
//Sử dụng một hàm filter để lọc dữ liệu từ danh sách ban đầu ra một danh dánh sách mới.
val longerThan3 = numbers.filter { it.length > 3 } println(longerThan3)
val numbersMap = mapOf("key1" to 1, "key2" to 2, "key3" to 3, "key11" to 11)
val filteredMap = numbersMap.filter { (key, value) -> key.endsWith("1") & value > 10}
println(filteredMap)
e)Lập trình an toàn hơn
Trong Kotlin, xử lý lỗi NullPointerException ở compile-time (tạm dịch là đang thực hiện biên dịch code) chứ không cần đợi tới lúc ứng dụng build (tạm dịch là khởi
chạy).
f) Đa nền tảng
Với tham vọng lớn là sử dụng ngôn ngữ Kotlin có thể biên dịch ra nhiều nền tảng khác nhau: Android, IOS, Window, …. Nhưng nó chỉ đang trong giai đoạn chạy thử
nghiệm.