Nếu:
- Bạn là một lập trình viên
Javavà đã chán ngấy với cú pháp dài dòng của nó - Bạn là một
developervà bạn muốn code ít hơn để được về sớm hơn ;)) - Bạn là một
leadervà bạn đang phải viết report cho việc có bug trên live do review code quá nhiều - Bạn theo triết lý
less code less bug
thì Kotlin có thể giúp bạn ;))
Đến với nhau vì ưu điểm
Rời xa nhau vì những hiểu lầm
— Trí Xàm ;))
Vì thế sau đây mình là những ưu điểm của Kotlin so với Java và từ đó mong bạn sẽ có động lực để tìm hiểu Kotlin.
- JVM language
- Clean, compact, sugar syntax
- Null safety
- Unchecked exceptions
- Data classes
- Default values
- Named arguments
- Functional programing support
- Extension functions
- Coroutines: lightweight thread
1. JVM language
Kotlin cũng giống các ngôn ngữ như Scala, Clojure, Grovvy… đều là ngôn ngữ JVM (full list). Vì thế mà nó sẽ có được các ưu điểm sau:
- Được build thành
bytecodevà chạy trênJRE (Java Runtime Environment): sử dụng lại được cơ sở hạn tầng có sẵn. - Sử dụng chung hệ sinh thái và thư viện của
Java: là một trong những ngôn ngữ phổ biến nhấtJavacó một hệ sinh thái và thư viện đồ sộ củaJava. Bạn sẽ không phải tốn quá nhiều thời gian để tìm hoặc viết lại các thư viện khi thay đổi ngôn ngữ. - Tương tác được với code
Javatrong cùng một module/project: bạn có một module/project đang viết bằngJava. Bạn sẽ không cần phải port lại 100% mà chỉ cần một số config build thì bạn đã có được một module/project mà được code bằng cảJavavàKotlin. Các này rất thích hợp cho những module/project yêu cầu tínhan toànvàổn định. Cá nhân người viết cũng đã tiếp nhận vài project viết bằngJavavà đã chuyển sang tích hợpKotlinđược gần 2 năm rồi. Khối lượng codeKotlinchỉ chiếm35%nhưng khối lượng logic đang xử lý thì ước lượng khoảng70%
Mình sẽ viết một vài bài chia sẻ kinh nghiệm và chiến lượt convert từ Java sang Kotlin. Mong các bạn đón nhận!!
Update: loạt bài mình nói nè From Java to Kotlin
2. Clean, compact, sugar syntax
Để nói về việc Kotlin giúp code ngắn gọn thế nào có khi phải cần một vài bài nhưng trong chapter này mình chỉ nêu một vài đặc điểm mình cho là hay nhất. Ở đây mình xem các bạn đã rành Java rồi nên sẽ k có code Java tương ứng. Còn nếu bạn chưa rành Java thì chơi Kotlin luôn đê.
Main function
| |
Functions
| |
ngắn gọn hơn
| |
Variables
Kotlin hỗ trợ 2 keywords là val và var để khai báo biến. Kiểu biến nếu không khai báo tường minh sẽ lấy từ giá trị.
val và var khác nhau ở chỗ val không cho phép set lại giá trị, còn var thì cho
| |
String templates
| |
Statement as expression
Các statement như if/else, try/catch, when có thể là một expression nếu cần
| |
Type checks and automatic casts
| |
Remove new keyword
| |
3. Null safety
Chắc các bạn cũng biết Null là một lỗi thiết kế trị giá tỷ đô và để loại bỏ nó Kotlin cung cấp cho ta các công cụ rất mạnh.
Mặc định Kotlin không cho phép biến chứa giá trị null
| |
Để cho phép biến chứa giá trị null cần khai báo tường minh:
| |
Không gọi hàm với biến có thể null được
| |
Để gọi được cần thêm ?. khi đó kết quả có thể null.
| |
Kiểm tra null với b và l = 0 nếu b == null.
| |
Safe Casts
| |
4. Unchecked exceptions
Ở bài Try/Catch Explain mình cũng đã nói không thích nó.
Tất nhiên không phải mình mà còn rất nhiều các bài khác:
- Checked Exceptions are Evil
- It’s almost 2020 and yet… Checked Exceptions are still a thing
- Java’s Checked Exceptions Are Evil? (2015)
Và thật là may mắn khi khi tất cả các Exception trong Kotlin là Unchecked exceptions ;))
5. Data classes
Giả sử ta cần khai báo một class User gồm 2 fields name và age với Kotlin ta chỉ cần:
| |
Khi này Kotlin sẽ tự động tạo ra các method:
- Các
getter/setter equals()/hashCode()toString()có dạng:User(name=John, age=42)copy(): copy giá trị của biến và thay đổi một hoặc nhiều fields. Sẽ nói rõ hơn ở 7. Named arguments
6. Default values
Kotlin hỗ trợ default values cho constructor và method.
Mình lấy ví dụ User ở 5. Data classes sửa lại thành
| |
khi đó ta có thể:
| |
7. Named arguments
Tiếp tục với User ở 6. Default values khi kết hợp với named arguments với default values ta thể:
| |
khi này code chúng ta rất rõ nghĩa
8. Functional programing support
Lambdas là một big change đối với Java 8 và Kotlin lại nâng nó lên một tầm cao mới.
Giả sử mình define một class Student như sau:
| |
từ danh sách các Student trên mình có yêu cầu sau:
Lấy ra 10 sinh viên đã tốt nghiệp và có điểm trung bình lớn hơn 4.0
Ưu tiên cho những sinh viên điểm cao hơn
Thứ tự được sắp xếp theo tên sinh viên (surname rồi tới name)
Với yêu cầu trên với Java ta cần implement khá nhiều. Nhưng với Kotlin ta chỉ cần 4 line ;))
| |
Đây là ví dụ trong bài blog này. Và nếu có thời gian mình sẽ có một bài viết chi tiết hơn nha ;))
9. Extension functions
Đây là ưu điểm mình yêu thích nhất của Kotlin vì nếu có nhu cầu viết thêm method hoặc properties ta không cần viết sửa code, rất thích hợp cho việc tích các module/lib có sẵn. Hãy nhớ rằng đây chỉ là syntactic sugar và không thật sự thay đổi class hoặc instance.
Mình giả sử muốn viết hàm checkEmpty cho String? thì ca cần:
| |
Tương tự ta có thể extension luôn cả propertie. Lưu ý ở đây extension propertie cần phải tính từ các thuộc tính khác của class hiện tại
| |
10. Coroutines: lightweight thread
Trước đây khi làm việc về mảng Network Programming mình có làm việc khá nhiều với Java thread và nhận thấy nó có những nhược điểm sau:
Java threadchiếm nhiều resource. Không có số liệu chính xác nhưng mỗi thread sẽ sử dụng 330KB với OS 32 bit và 1MB với OS 64 bit. Vì thế một process chỉ có thể tạo một số lượng giới hạnthread- Cần phải giải quyết vấn đề
tranh chấp resourceảnh hưởng tới hiệu năng, độ phức tạp của project/module - Khó code, khó test, khó debug, khó trace
- Deadlock
Những vấn đề trên có thể được giải quyết với Coroutines. Và chắc chắc cần phải có một loạt bài viết từ cơ bản tới nâng cao để giúp các bạn nắm vững Coroutines.
Trong khuôn khổ bài viết này mình sẽ ví dụ một case mà Java thread không làm được xem như thị phạm ;))
| |
Đoạn code trên sẽ tạo ra 100K coroutines và sau 5 giây sẽ in ra dấu chấm với mỗi coroutine.
Và bạn thử implement đoạn code trên với Java thread xem. Mình đảm bảo sẽ có lỗi out-of-memory
Update: loạt bài về Kotlin Coroutine nè
Kết: Mong với bài viết này sẽ giúp cho các bạn có cảm hứng để tìm hiểu về Kotlin. Từ đó nghiên cứu và áp dụng cho những dự án sắp tới của mình.