Kotlin là ngôn ngữ lập trình được phát triển bởi JetBrains. Nó xuất hiện lần đầu năm 2011 khi JetBrains công bố dự án của họ mạng tên “Kotlin”. Đây là một ngôn ngữ mã nguồn mở
Về cơ bản, cũng như Java, C hay C++ , Kotlin cũng là “ngôn ngữ lập trình kiểu tĩnh”. Nghĩa là các biến không cần phải định nghĩa trước khi sử dụng. Kiểu tĩnh thực hiện việc kê khai nghiêm ngặt hoặc khởi tạo các biến trước khi chúng được sử dụng
Kiểu tĩnh không có nghĩa chúng ta phải khai báo tất cả các biến lúc đầu trước khi sử dụng chúng. Các biến có thể được khởi tạo bất cứ nơi nào trong chương trình và chúng ta có thể sử dụng chúng bất cứ nơi nào khi cần Ví dụ:
1 2 3 4 |
/* Java Code */ static int num1, num2; //explicit declaration num1 = 20; //use the variables anywhere num2 = 30; |
1 2 3 4 5 |
/* Kotlin Code*/ val a: Int val b: Int a=5 b=10 |
Ngoài class và method của lập trình hướng đối tượng, Kotlin cũng hỗ trợ lập trình thủ tục với việc sử dụng hàm.
Giống như Java, C and C++, điểm mấu chốt của chương trình Kotlin là hàm “main”. Nó thông qua một mảng chứa bất kỳ đối số của command line nào. Ví dụ
1 2 3 4 5 6 7 8 9 10 11 |
/* Kotlin Code*/ /* Simple Hello Word Example*/ //optional package header package hello //package level function, which return Unit and takes an array of string as parameter fun main(args: Array < String > ) { val scope = “world” println(“Hello, $scope!”) //semicolons are optional, have you noticed that? :) } |
1 2 3 4 5 6 7 8 9 10 11 |
/* Kotlin Code*/ /* Simple Hello Word Example*/ //optional package header package hello //package level function, which return Unit and takes an array of string as parameter fun main(args: Array < String > ) { val scope = “world” println(“Hello, $scope!”) //semicolons are optional, have you noticed that? :) } |
Phần đuôi file của Java là .java, .class, .jar thì phần đuôi file của Kotlin là .kt và .kts.
ngày 17/5 vừa qua, tại Google I/O keynote, Android team đã thông báo Kotlin sẽ trở thành ngôn ngữ chính thức của Android
Điểm mạnh của Kotlin
Kotlin biên dịch thành JVM bytecode hoặc JavaScript – Giống như Java, Bytecode cũng là format biên dịch cho Kotlin. Bytecode nghĩa là một khi đã biên dịch, các đoạn code sẽ chạy thông qua một máy ảo thay vì một bộ xử lý. Bằng cách này, code có thể chạy trên bất kỳ nền tảng nào, khi nó được biên dịch và chạy thông qua máy ảo. Khi Kotlin được chuyển đổi thành bytecode, nó có thể truyền được qua mạng và thực hiện bởi JVM
Kotlin có thể sử dụng tất cả các nền tảng và thư viện Java hiện có – Bất kể là nền tảng cao cấp dựa trên xử lý annotation. Điều quan trọng là Kotlin dễ dàng tích hợp với Maven, Gradle hay các hệ thống build khác.
Kotlin dễ học và dễ tiếp cận. Có thể học dễ dàng bằng những ví dụ tham khảo đơn giản. Cú pháp đơn giản và trực quan. Kotlin khá giống Scala nhưng dễ hiểu hơn
Kotlin là mã nguồn mở nên không tốn kém gì để có thể sử dụng
Chuyển đổi tự động Java thành Kotlin – JetBrains tích hợp chức năng mới vào IntelliJ để chuyển đổi Java thành Kotlin và điều này tiết kiệm một lượng thời gian rất lớn. Nó cũng giúp chúng ta không phải code lại kiểu tay to
Null-safety của Kotlin: giúp chúng ta thoát khỏi NullPointerExceptions. Giúp chúng ta tránh những exeption kiểu con trỏ null. Trong Kotlin, hệ thống sẽ từ chối biên dịch đoạn code đang gán hay trả về giá trị null
Review code không còn là vấn đề – Kotlin tập trung nhiều hơn vào việc cú pháp dễ hiểu, dễ đọc để review, chúng có thể hoàn thành bởi những thành viên team chưa quen với ngôn ngữ này
Khác biệt giữa Kotlin và Java
Null safety – như đã nói ở trên, Kotlin tránh NullPointerException. Kotlin dừng lại ở bất cứ thời điểm biên dich nào khi NullPointerException xuất hiện
Data Classes – trong Kotlin có Data Classes để tự phát sinh boilerplate như equals, hashCode, toString, getters/setters v.v . Ví dụ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
/* Java Code */ class Book { private String title; private Author author; public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public Author getAuthor() { return author; } public void setAuthor(Author author) { this.author = author; } } |
Nhưng ở Kotlin class tương tự như trên chỉ cần định nghĩa bởi 1 dòng code
1 2 3 |
/* kotlin Code */ data class Book(var title:String,var author:Author) |
Nó cũng giúp chúng ta dễ dàng copy data classes với việc sử dung copy()
1 2 3 |
val book = Book(“Kotlin”, “JetBrains”) val copy = book.copy() |
*Các chức năng mở rộng *- Kotlin cho phép chúng ta có thể mở rộng các chức năng của các class hiện có mà không kế thừa từ chúng. Nghĩa là Kotlin cung cấp khả năng mở rộng class với chức năng mới mà không cần kế thừa. Nó được thực hiện bởi chức năng mở rộng. Để khai báo, chúng ta cần đặt tên nó với một receiver type, như một loại được mở rộng. Ví dụ
1 2 3 4 5 6 7 8 9 |
fun MutableList<Int>.swap(index1:Int,index2:Int){ val tmp=this[index1] this[index1]=this[index2] this[index2]=tmp } |
1 2 3 4 5 6 7 8 9 |
fun MutableList<Int>.swap(index1:Int,index2:Int){ val tmp=this[index1] this[index1]=this[index2] this[index2]=tmp } |
từ khóa “this” trong chức năng mở rộng tương ứng với 1 đối tượng nhận, được truyền trước dấu chấm. Giờ chúng ta có thể gọi như 1 hàm trong bất kỳ MutableList<Int> nào
1 2 3 |
val abc = mutableListOf(1, 2, 3) abc.swap(0, 2) |
Smart Casts – Khi nói đến các phôi, trình biên dịch Kotlin thực sự thông minh. Trong nhiều trường hợp, người ta không cần sử dụng các toán tử cast rõ ràng trong kotlin, nhưng trong Kotlin có “is-checks” cho các giá trị không thay đổi và chèn các phôi tự động khi cần thiết
1 2 3 4 5 6 7 8 |
fun demo(x:Any){ if(x is String){ print(x.length) // x is automatically cast to string } } |
1 2 3 4 5 6 7 8 |
fun demo(x:Any){ if(x is String){ print(x.length) // x is automatically cast to string } } |
Type Inference – Trong Kotlin, có một điều tuyệt vời là bạn không phải chỉ rõ loại của mỗi biến một cách rõ ràng (theo cách rõ ràng và chi tiết). Nhưng nếu bạn muốn xác định một loại dữ liệu một cách rõ ràng, bạn cũng có thể làm điều đó. Ví dụ:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
/* not explicitly defined */ fun main(args: Array<String>) { val text = 10 println(text) } /* explicitly defined */ fun main(args: Array<String>) { val text: Int = 10 println(text) } |
Lập trình hướng chức năng – Điều quan trọng nhất là Kotlin là một ngôn ngữ lập trình hướng chức năng. Về cơ bản Kotlin bao gồm nhiều method hữu ích, bao gồm các chức năng bậc cao, biểu thức lambda, operator overloading, lazy evaluation, vận hành quá tải và nhiều hơn nữa.
Lập trình hướng chức năng làm cho Kotlin dễ xử lý hơn nữa khi tập hợp chúng lại
1 2 3 4 5 6 7 8 |
fun main(args: Array<String>) { val numbers = arrayListOf(15, -5, 11, -39) val nonNegativeNumbers = numbers.filter { it >= 0 } println(nonNegativeNumbers) } |
Tốc độ biên dịch (giữa Java và Kotlin)
Clean build (build codebase lần đầu)
Khi chúng ta biên dịch mã Kotlin lần đầu tiên, thì phải mất nhiều thời gian hơn Java. Java biên dịch nhanh hơn 15-20% so với Kotlin.
Incremental Builds
Nhưng như chúng ta biết, hầu hết thời gian chúng ta cần incremental builds như thay đổi một đoạn code có sẵn và build lại chúng, và deploy không ngừng.
Theo quan điểm này, Kotlin mất thời gian biên dịch như Java, thâm chí còn nhanh hơn 1 chút
Tương lai của ngôn ngữ Kotlin
Kotlin liên kết với Java và cung cấp sự thay đổi không ngừng của mã và hệ thống cấp cao sang Java và cung cấp cách Migration dễ dàng từ Java với khả năng tương thích ngược.
Với các tính năng như nhiều khai báo hơn, ít mã, cơ sở dữ liệu ngôn ngữ hỗn hợp và diễn cảm hơn Java, Kotlin sẽ là tương lai cho các ứng dụng doanh nghiệp và di động thời gian tới. Với chia sẻ trên hy vọng sẽ giúp ích cho bạn !