Chia sẻ kiến thức lập trình

Kotlin

Nâng đôi cánh Java!

Thực sự là tình yêu của mình dành cho #Java là rất lớn, mà khi yêu ai rồi thì mình chỉ biết có người đó thôi, người ta gọi đó là mù quáng. Nhưng khi bước vào dự án thực tế với #kotlin, quan điểm của mình đã thực sự thay đổi, và bây giờ, tất cả các dự án, nếu có thể mình sẽ sử dụng #kotlin, vậy kotlin có gì mà hay ho vậy?

Giới thiệu

Kotlin được thiết kế và xây dựng với #JetBrains vào năm 2011, mục tiêu của nó là cung cấp khả năng lập trình cùng lúc với

  1. Hướng đối tượng (#OOP)
  2. Hướng function (#FP)
    Và theo mình, sự kết hợp này là hoàn hảo, nó tạo cảm giác thoải mái khi lập trình, có thể ví như chúng ta vừa đọc sách, vừa uống Café vậy

Những cải tiến

Kotlin đã wrap lại rất nhiều hàm của #java và giúp chúng ta tiết kiệm được rất nhiều dòng code, nó cũng sinh ra hẳn 1 style code mới theo kiểu chain (viết các lệnh nối tiếp nhau) và ơn giời #Kotlin giúp chúng ta thoát khỏi cơn ác mộng check null và giúp chúng ta tránh được rất nhiều lỗi tỉ đô với NullPointerException

Kotlin mang đến 2 thứ mà mình cho là quan trọng nhất:

  1. Extension function: Giúp chúng ta mở rộng các đối tượng mà không cần can thiệp vào code cũ
  2. Coroutines: giúp chúng ta thoát khỏi việc khởi tạo thread và tạm quên đi sự phức tạp của xử lý đa luồng

Ví dụ

Cùng lấy 1 vài ví dụ để chúng ta thấy được sức mạnh củ kotlin so với java nhé

Extension Function

Ví dụ để chuyển từ đối tượng java.util.Date sang java.time.LocalDateTime trong java chúng ta sẽ cần tạo ra một lớp để viết hàm static kiểu này:

public final class DateConverter {

    private DateConverter() {}

    public static LocalDateTime toLocalDateTime(Date date) {
        return ZonedDateTime
            .ofInstant(date.toInstant(), ZoneId.systemDefault())
            .toLocalDateTime();
    }
}

Chúng ta phải tốn 8 dòng code có ký tự (chưa kể những dòng trắng).

Nào bây giờ với kotlin chúng ta chỉ đơn giản thế này thôi:

fun Date.toLocalDateTime() =
    ZonedDateTime
        .ofInstant(toInstant(), ZoneId.systemDefault())
        .toLocalDateTime()

Bạn thấy không, chỉ với 4 dòng code chúng ta đã giải quyết được cùng một vấn đề với Java (ít hơn 4 dòng code)

Coroutines

Với java để in một dòng Hello World với thread pool, chúng ta cần làm thế này:

ExecutorService executorService = Executors.newSingleThreadExecutor();
executorService.execute(() ->
    System.out.println(Thread.currentThread().getName() + ": Hello World")
);

Chúng ta phải mất tới 3 dòng code, nhưng với kotlin coroutines chỉ đơn giản là một dòng code mà thôi.

launch { println("${Thread.currentThread().name}: Hello World") }

Kết luận

Ban đầu chỉ sử dụng cho Android thì đến thời điểm hiện tại Kotlin đã đang bắt đầu dần phổ biến để viết các ứng dụng thay cho Java vì sự đơn giản của nó. Cá nhân mình tin rằng Kotlin sẽ nâng đôi cánh cho Java bay cao hơn nữa, nếu bạn đang có ý định viết ứng dụng chạy trên JVM thì hay cân nhắc thử kotlin xem sao nhé.

Tham khảo

  1. Wiki
  2. Extension Functions
  3. Coroutines
  4. Example
Share: