Nếu:
- Bạn là một lập trình viên
Java
và đã chán ngấy với cú pháp dài dòng của nó - Bạn là một
developer
và bạn muốn code ít hơn để được về sớm hơn ;)) - Bạn là một
leader
và 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
bytecode
và 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ấtJava
có 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
Java
trong 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ảJava
vàKotlin
. Các này rất thích hợp cho những module/project yêu cầu tínhan toàn
vàổn định
. Cá nhân người viết cũng đã tiếp nhận vài project viết bằngJava
và đã chuyển sang tích hợpKotlin
được gần 2 năm rồi. Khối lượng codeKotlin
chỉ 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 thread
chiế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.