Thiết kế bởi | JetBrains |
---|---|
Nhà phát triển | JetBrains và cộng đồng mã nguồn mở |
Xuất hiện lần đầu | 2011 |
Phiên bản ổn định | 1.3.11
/ 6 tháng 12 năm 2018; 5 năm trước |
Kiểm tra kiểu | tĩnh, suy luận |
Nền tảng | Xuất ra máy ảo Java bytecode và mã nguồn Java |
Hệ điều hành | Bất cứ trình thông dịch JVM hay Java |
Giấy phép | Apache 2 |
Phần mở rộng tên tập tin | .kt, .kts |
Trang mạng | kotlinlang |
Ảnh hưởng từ | |
C#, Gosu, Groovy, Java, ML, Python, Scala |
Kotlin là một ngôn ngữ lập trình kiểu tĩnh hoạt động trên máy ảo Java (JVM) và có thể biên dịch sang mã Java hoặc sử dụng nền tảng biên dịch LLVM. Được JetBrains phát triển và duy trì, Kotlin dù có cú pháp khác biệt so với Java nhưng vẫn được thiết kế để tương thích với mã Java, tận dụng thư viện Java như collections framework. Ngôn ngữ này sử dụng suy luận kiểu để xác định loại dữ liệu và biểu thức, giúp giảm bớt độ dài mã so với Java, vốn thường yêu cầu khai báo kiểu dữ liệu một cách chi tiết. Kotlin hỗ trợ các phiên bản JVM mới nhất đến Java 11.
Kể từ phiên bản Android Studio 3.0 (phát hành tháng 10 năm 2017), Google đã chính thức hỗ trợ Kotlin cho việc phát triển ứng dụng Android. Kotlin được tích hợp trực tiếp vào IDE này, thay thế cho trình biên dịch Java tiêu chuẩn. Trình biên dịch Android Kotlin cho phép người dùng chọn mã bytecode tương thích với Java 6 hoặc Java 8.
Lịch sử phát triển
Vào tháng 7 năm 2011, JetBrains đã công bố Project Kotlin, một ngôn ngữ lập trình mới cho JVM được phát triển trong suốt một năm. Dmitry Jemerov, lãnh đạo JetBrains, cho biết hầu hết các ngôn ngữ không có các tính năng mà họ cần, trừ Scala. Tuy nhiên, ông lưu ý rằng Scala có thời gian biên dịch rất chậm. Một trong những mục tiêu của Kotlin là đạt hiệu suất biên dịch nhanh tương đương Java. Đến tháng 2 năm 2012, JetBrains đã phát hành mã nguồn của dự án theo giấy phép Apache 2.
Tên ngôn ngữ này xuất phát từ đảo Kotlin, gần St. Petersburg. Andrey Breslav cho biết nhóm phát triển chọn tên này tương tự như Java được đặt theo tên đảo Java ở Indonesia (dù ngôn ngữ Java có thể được đặt theo tên một loại cà phê).
JetBrains kỳ vọng rằng ngôn ngữ Kotlin mới sẽ giúp gia tăng doanh số của IntelliJ IDEA.
Kotlin phiên bản 1.0 ra mắt vào ngày 15 tháng 2 năm 2016, đánh dấu phiên bản chính thức ổn định đầu tiên. JetBrains cam kết sẽ duy trì sự tương thích ngược dài hạn từ phiên bản này.
Tại hội nghị Google I/O 2017, Google đã công bố việc hỗ trợ chính thức (first-class support) cho Kotlin trên nền tảng Android.
Kotlin phiên bản 1.2 được phát hành vào ngày 28 tháng 11 năm 2017, bổ sung tính năng chia sẻ mã nguồn giữa nền tảng JVM và Javascript.
Kotlin phiên bản 1.3 được phát hành vào ngày 29 tháng 10 năm 2018, mang đến API coroutine cho lập trình bất đồng bộ.
Thiết kế
Andrey Breslav, trưởng nhóm phát triển, cho biết Kotlin được thiết kế để là một ngôn ngữ lập trình hướng đối tượng mạnh mẽ và được coi là một 'phiên bản cải tiến' của Java. Ngôn ngữ này vẫn đảm bảo tương thích hoàn toàn với mã Java, giúp các công ty dễ dàng chuyển đổi từ Java sang Kotlin theo từng bước.
Dấu chấm phẩy là tùy chọn để kết thúc câu lệnh; thường thì một newline đủ để trình biên dịch nhận biết rằng câu lệnh đã kết thúc.
Kotlin khai báo biến và danh sách tham số với kiểu dữ liệu đi kèm tên biến (phân cách bằng dấu hai chấm), tương tự như cách khai báo trong Pascal.
Trong Kotlin, biến có thể là bất biến (immutable) khi khai báo với từ khóa val, hoặc có thể thay đổi (mutable) khi sử dụng từ khóa var.
Các thành viên của lớp mặc định có phạm vi công khai (public), và các lớp đó cũng mặc định là 'final', nghĩa là không thể tạo lớp kế thừa trừ khi lớp cơ sở được khai báo với từ khóa open.
Kotlin hỗ trợ cả lập trình hướng đối tượng thông qua các lớp và phương thức (hay còn gọi là hàm thành viên), đồng thời cũng hỗ trợ lập trình thủ tục bằng cách sử dụng hàm.
Cú pháp
Phong cách lập trình hàm
Kotlin nới lỏng các giới hạn của Java vốn chỉ cho phép phương thức và biến tĩnh (static) chỉ tồn tại trong thân hàm. Đối tượng và hàm tĩnh có thể được định nghĩa ở mức cao nhất (top level) của gói (package) mà không cần một mức của lớp dư thừa. Để tương thích với Java, Kotlin cung cấp chú thích JvmName
để đặc tả một tên lớp được sử dụng khi gói được xem từ một dự án Java. Ví dụ như @file:JvmName("JavaClassName")
.
Điểm vào chính
Cũng như trong C và C++, điểm vào chính (entry point) của một chương trình Kotlin là một hàm tên "main", được truyền vào một mảng chứa bất cứ đối số dòng lệnh nào. Nội suy chuỗi kiểu Perl và Unix shell cũng được hỗ trợ, cũng như suy luận kiểu.
// Hello, World! example fun main(args: Array<String>) { val scope = "World" println("Hello, $scope!") }
Phương thức mở rộng
Giống như C#, Kotlin cho phép người dùng thêm các phương thức vào bất kỳ lớp nào mà không cần phải tạo một lớp con mới. Thay vào đó, Kotlin sử dụng khái niệm phương thức mở rộng để cho phép gán bất kỳ hàm nào vào danh sách các phương thức công khai của lớp mà không cần phải khai báo chính thức bên trong lớp đó. Nói cách khác, phương thức mở rộng là một phương thức hỗ trợ có quyền truy cập vào tất cả các giao diện công khai của lớp, cho phép tạo ra một giao diện công khai mới cho lớp và xuất hiện như một phần của tính năng hoàn tất mã trong lớp. Ví dụ:
Khi đặt mã ở cấp cao nhất của gói, lớp String được mở rộng bằng cách thêm phương thức lastChar, một phương thức không có trong định nghĩa ban đầu của lớp String.
Hàm lồng nhau
Kotlin cho phép định nghĩa các hàm cục bộ bên trong các hàm hoặc phương thức khác, gọi là hàm lồng nhau.
class User(val id: Int, val name: String, val address: String) fun saveUserToDb(user: User) { fun validate(user: User, value: String, fieldName: String) { if (value.isEmpty()) { throw IllegalArgumentException('Không thể lưu người dùng ${user.id}: trống $fieldName') } } validate(user, user.name, 'Tên') validate(user, user.address, 'Địa chỉ') // Lưu người dùng vào cơ sở dữ liệu ... }
Thư viện Anko
Anko là một thư viện đặc biệt dành cho Kotlin, hỗ trợ việc phát triển giao diện người dùng cho ứng dụng Android một cách dễ dàng hơn.
fun Activity.showAreYouSureAlert(process: () -> Unit) { alert( title = 'Bạn có chắc chắn không?', message = 'Bạn có thực sự chắc chắn không?') { positiveButton('Có') { process() } negativeButton('Không') { cancel() } } }
Shell tương tác với Kotlin
Công cụ
- IntelliJ IDEA hỗ trợ plug-in cho Kotlin, với IntelliJ IDEA 15 là phiên bản đầu tiên tích hợp plugin Kotlin vào trong trình cài đặt và cung cấp hỗ trợ ngay lập tức cho Kotlin.
- JetBrains cũng đã phát hành một plugin dành cho Eclipse.
- Tích hợp với các công cụ xây dựng Java phổ biến như Apache Maven, Apache Ant và Gradle cũng được hỗ trợ.
- Android Studio (dựa trên IntelliJ IDEA) bắt đầu hỗ trợ chính thức Kotlin từ phiên bản Android Studio 3.
- Emacs cũng có chế độ Kotlin Mode trong kho chứa gói Melpa.
- So sánh các ngôn ngữ lập trình
- Bài viết này chứa các trích dẫn từ các hướng dẫn về Kotlin được phát hành dưới giấy phép Apache 2.0.
Các liên kết bên ngoài
Ngôn ngữ lập trình | |
---|---|
Dùng cho kỹ nghệ |
|
Dùng trong giảng dạy |
|
Có giá trị lịch sử |
|