Kotlin đã là bước đột phá lớn trong 2 năm qua, là chủ đề hot everywhere và độ phổ biến vẫn tăng. Cũng chính thức Google đã đẩy Kotlin thành ngôn ngữ chính thức cho Android App Development.
Nhưng ngay cả vậy, nhiều người vẫn thích Java hơn Kotlin cho Android development, tại sao? Lý do chính là mọi người vẫn chưa thoải mái thay đổi ngôn ngữ chính từ Java sang Kotlin, mọi người sợ thay đổi.
Bắt đầu dùng Kotlin ngay, cách dễ dàng
Thực tế, chuyển sang Kotlin từ Java rất dễ, là ngôn ngữ rất linh hoạt, bạn dễ dàng code Kotlin nhưng idiomatic, nó là Java!

Vậy, đây là một số điều lưu ý khi chuyển sang Kotlin từ Java:
1. Java Interoperability (Tương tác lẫn nhau)
Kotlin tương tác hoàn toàn với Java và ngược lại. Nghĩa là Kotlin có thể gọi code Java, làm cho migration app rất dễ, bạn đã code nửa chừng với Java? Không sao, code Kotlin tiếp.
2. Không còn primitive data types
Nhớ khi chọn int hay Int trong Java tốn nửa ngày? Giờ không còn primitive data types trong Kotlin, mọi thứ được wrap trong Object.
3. Cú pháp thay đổi nhẹ (Đừng lo, dễ bắt kịp)
Một số cú pháp như khai báo biến, function, class thay đổi nhẹ, nhưng nếu bạn từ OOP background như Java, không thành vấn đề. Cũng, từ khóa void và dấu chấm phẩy (';') đã bị bỏ, cám ơn Kotlin đã bỏ semicolon!!
Tôi trình bày ví dụ cơ bản với Android class:
//Kế thừa và implement dùng ':' bây giờ class BasicActivity : AppCompatActivity() { //khai báo biến giờ là tên biến trước rồi type var a :Int = 10 //var cho mutable val b :Int = 15 //val cho immutable /*lateinit keyword bắt buộc cho khởi tạo non-primitive type không có giá trị ban đầu trong Kotlin*/ lateinit var someTextView:TextView //Cũng không còn từ khóa new var gameList:List<Integer> = ArrayList() //override dùng keyword override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_basic) } } 4. Type inference (Suy diễn kiểu)
Kotlin làm cuộc sống dễ dàng bằng type inference cho biến:
var a = 5 //sẽ tự suy diễn là integer var b = "John" //sẽ tự suy diễn là String 5. Null safety checks (Kiểm tra an toàn null)
Kotlin cung cấp null safety checking để tránh null pointer exception. Mọi biến có thể trả về null sẽ được đánh dấu (và bắt buộc) bằng dấu ?.
var a:String? = null var b:String = null //không được phép Nó cũng cung cấp null safety call để tránh Null-Pointer Exception (Java Billion Dollar Mistake)
//không được phép, a có thể null a.function() //sẽ không throw null pointer, thay vào đó tiếp tục flow a?.function() //ép gọi function, có thể gây NPE, chỉ dùng khi 100% chắc giá trị không null a!!.function()6. Không còn từ khóa static
Static keyword thay bằng Object keyword, cho cả class và method, cụ thể Companion Object cho method.
7. Switch case sửa đổi
Switch case sửa thành keyword mới, when. Trông clean và linh hoạt hơn:
when (x) { 1 -> println("One") 2 -> print("Two") else -> print("Others") }8. Không còn checked exception
Nhớ khi làm operation hoặc casting trong Java, cảnh báo đỏ yêu cầu thêm exception checking? Đã bị bỏ trong Kotlin. IDE không còn ép bạn làm exception nữa!!
Đó là tất cả cho phần cần thiết để bắt đầu develop Kotlin, nhưng idiomatic Java.
Không khó để vào Kotlin, đúng không? Giờ Kotlin không còn khác Java nhiều.
Tính năng cung cấp bởi Kotlin

Sau khi xem Kotlin và Java khác nhau, cũng cần xem tính năng Kotlin cung cấp và cách từ từ làm Kotlin theo cách Kotlin:
1. Linh hoạt (Flexibility)
Lý do chính tôi yêu Kotlin là sự linh hoạt. Bạn là OOP purist? Bạn muốn thử Functional Programming đang hot? Và vì tình yêu của coding thần, bạn có thể làm cả hai trong Kotlin! Dù không cung cấp đầy đủ feature FP, nó đủ tốt để hỗ trợ.
2. Lambda Support
Tôi biết Java 8 hỗ trợ lambda, nhưng Kotlin đến trước và làm tốt. Chuyển sang Lambda Function khó lúc đầu, nhưng Kotlin linh hoạt. Vậy là do bạn!
Một số thư viện Android cũng bật Lambda support, ví dụ View.OnClickListener (Nếu bạn từ Android background, chắc method này rất quen) :
val randomButton : Button //dùng lambda function làm argument randomButton.setOnClickListener{v -> doRandomStuff(v) }3. Data Class
Kotlin cung cấp thay thế cho Model/Entity class, gọi là Data class. Loại bỏ setter getter thừa, có in-built equal method và toString function không cần tự tạo. Rất dễ dùng:
data class Person( val id:String, val name:String = "John Doe" //Default Value ) //Khối khởi tạo var person = Person("id","Not John")4. Extension Functions
Kotlin cho phép extension functions, làm code dễ đọc hơn. Cũng cho phép thêm chức năng cho class không sửa class:
fun Int.superOperation(anotherInt:Int):Int { val superNumber = this * anotherInt + anotherInt return superNumber } //giờ gọi function val someNumber = 5 val superNumber = someNumber.superOperation(10) //655. Named và Default Arguments
Giống C#, Kotlin hỗ trợ named và default parameters cho method. Loại bỏ hoàn toàn việc pass giá trị cho mọi argument. Bạn chọn giá trị muốn sửa, xong! Không lo pass cùng giá trị cho 10 function call!
//khai báo biến fun someOperations(var x: Int, var y:Int, var z:Int = 1){ return x+y+z } someOperations(1,2) //return 4 someOpeartions(y = 1, x = 1) //return 36. Referential Equality (Đẳng thức tham chiếu)
Kotlin có referential equality ('==='), kiểm tra hai biến có tham chiếu cùng Object không.
var a = 10 var b = 10 a == b //true a === b //true cũng, primitive type object equation chỉ check giá trị data class Person (val name: String) val p1 = Person("John") val p2 = Person("John") p1 == p2 //true p1 === p2 //false7. Smart casting
Thay vì instanceof, Kotlin cung cấp cú pháp dễ đọc hơn cho casting hoặc type checking:
//type checking //kotlin smart cast mechanism cũng tự động cast object sang type tương ứng nếu pass type checking if (shape is Circle) { println(“it’s a Circle”) shape.radius //tự động cast thành Circle } else if (shapeObject is Square) { println(“it’s a Square”) } else if (shapeObject is Rectangle) { print(“it’s a Rectangle”) }Kotlin cũng có từ khóa as cho explicit casting:
//Coi là unsafe vì hành vi giống static casting var anotherShape = shape as Circle //Dùng cho safe casting var safeShape = shape as? Circle8. Coroutines
Async call luôn phiền toái trong Java. Tạo Thread tốn code space và làm code unreadable. Coroutines thay thế thread truyền thống, cho code clean và robust:
import kotlinx.coroutines.* fun main() { // launch coroutine mới background và tiếp tục GlobalScope.launch { // non-blocking delay 1 giây (default unit ms) delay(1000L) // print sau delay println("World!") } // main thread tiếp tục while coroutine delayed println("Hello,") // block main thread 2 giây giữ JVM alive Thread.sleep(2000L) }Coroutines cũng hỗ trợ operation phức tạp hơn như Job Joining, Channel, Shared Context và Parents. Chi tiết và usage thêm đọc tại đây.
Tóm tắt
Tóm lại, rất dễ bắt đầu dùng Kotlin, bạn code Kotlin rất giống cách code Java. Và Kotlin cung cấp một số tính năng cho bạn lợi thế so với Java.
Chắc Java vẫn mạnh. Nhưng không sai bắt đầu học điều mới. Chúng ta, lập trình viên, cần embracing lifetime learning và không ngừng học. Điều tốt nhất về Kotlin là dễ migrate từ Java.
Cám ơn đã đọc. Hy vọng bạn enjoy và hữu ích! Chúc may mắn khám phá Kotlin, hẹn gặp lần sau.