Ngôn ngữ Kotlin là gì?

Kotlin là một ngôn ngữ lập trình mới từ JetBrains. Nó xuất hiện lần đầu tiên vào năm 2011 khi JetBrains công bố một dự án mới có tên là "Kotlin". Giống như Swift, Kotlin là một ngôn ngữ mã nguồn mở.

Giống như Java, C, và C++, Kotlin cũng là một ngôn ngữ kiểu tĩnh, "statically typed programming language".  Ngôn ngữ kiểu tĩnh là những ngôn ngữ mà các variable cần phải định danh trước khi được sử dụng. Có nghĩa là variable cần phải khai báo và khởi tạo trước.

Về cơ bản thì kiểu Static typing không có nghĩa là chúng ta cần phải khai báo toàn bộ variable trước tiên. Chúng có thể được khởi tạo ở bất cứ đâu trong ứng dụng và các lập trình viên phải làm việc đó, để sử dụng những variable ở nơi mà mình cần. Xét ví dụ như sau:

/* Java Code */
static int num1, num2; //explicit declaration
num1 = 20; //use the variables anywhere
num2 = 30;
/* Kotlin Code*/
val a: Int
val b: Int
a=5
b=10

Bên cạnh lập trình hướng đối tượng thì Kotlin cũng hỗ trợ lập trình hướng thủ tục. Giống như Java, C, C++, fucntion đầu tiên mà Kotlin sẽ chạy là main. 

/* 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? :)
}

Các file được viết bằng Kotlin có đuôi là .kt và .kts

Và vào ngày 17 tháng 5 năm 2017, tại hội nghị Google I/O keynote, team phát triển Android đã thông báo rằng Kotlin sẽ là ngôn ngữ lập trình chính thức của Android.

Tham khảo các khóa học lập trình online, onlab, và thực tập lập trình tại TechMaster

Điểm mạnh của Kotlin

  • Kotlin biên dịch tới JVM bytecode hoặc JavaScript, giống như Java, Bytecode ở đây nghĩa là sau khi biên dịch code sẽ được chạy qua một máy ảo thay vì là bộ vi xử lý của máy tính. Bằng cách này thì source code có thể chạy trên mọi nền tảng. Sau khi chương trình Kotlin được convert thành bytecode, nó sẽ được tải qua network và thực thi bởi JVM(Java Virtual Machine).
  • Kotlin có thể sử dụng toàn bộ những Framework và thư viện sẵn có của Java. Điểm đặc biệt nhất về Kotlin là nó có thể dễ dàng kết hợp với Maven, Gradle và các hệ thống build khác.
  • Kotlin là một ngôn ngữ rất dễ học, cú pháp rất trong sách và dễ hiểu. Kotlin có nét giống như Scala nhưng đơn giản hơn.
  • Kotlin mã nguồn mở
  • JetBrains cũng đã đính kèm tính năng tự động chuyển đổi Java thành Kotlin, qua đó tiết kiệm được rất nhiều thời gian cho lập trình viên.
  • Giống như Swift, thì Kotlin cũng là một ngôn ngữ an toàn, với cơ chế null-safety, sẽ không còn khái niệm NullPointerExceptions nữa.
  • val 	name: String = null 	// tries to assign null, won’t 	compile.
    	
    fun 	getName() : String = null 	// tries to return null, won’t 	compile.

     

Tương tự với optional trong Swift, chúng ta cũng có thể thêm "?" vào trong các variable và ở ví dụ dưới đây, chúng ta sẽ thấy là Kotlin sẽ không biên dịch và sẽ thrown ở run-time:

val name: String? = null	 	 //assigned 	null and it will compile 	also.
	
fun getName() : String? = null	//returned null and it 	will compile too.
/* won’t compile */	
  val name: String? = null
  val len = name.length	

/* correct way */	
  val name: String? = null	
  val len = name?.length

Tính linh hoạt

Như các bạn thấy ở bức hình dưới thì Kotlin rất linh hoạt và có thể lập trình ở nhiều nền tảng:

Sự khác biệt giữa Kotlin và Java

  • Null Safety — Như đã nói ở trên thì sự khác biệt lớn nhất giữa hai ngôn ngữ là Kotlin tránh được lỗi NullPointerException.
  • Data Classes —Trong Java thì có một vài Data Class sẽ dẫn đến việc tự động tạo ra những đoạn code dài và cồng kềnh như equals, hashCode, toSTring, getter/setter..vv. Còn Kotlin thì cú pháp sẽ ngắn gọn hơn, ví dụ:
/* 	Java program */	

public class Address {
  
   private String street;

   private int streetNumber;

   private String postCode;

   private String city;

   private Country country;

   public Address(String street, int streetNumber, String postCode, String city, Country country) {

       this.street = street;

       this.streetNumber = streetNumber;

       this.postCode = postCode;

       this.city = city;

       this.country = country;

   }

   @Override
   public boolean equals(Object o) {
       if (this == o) return true;

       if (o == null || getClass() != o.getClass()) return false;

       Address address = (Address) o;

       if (streetNumber != address.streetNumber) return false;

       if (!street.equals(address.street)) return false;

       if (!postCode.equals(address.postCode)) return false;

       if (!city.equals(address.city)) return false;

       return country == address.country;
   }

   @Override
   public int hashCode() {
       int result = street.hashCode();

       result = 31 * result + streetNumber;

       result = 31 * result + postCode.hashCode();

       result = 31 * result + city.hashCode();

       result = 31 * result + (country != null ? country.hashCode() : 0);

       return result;

   }

   @Override

   public String toString() {

       return "Address{" +

               "street='" + street + '\'' +

               ",     streetNumber=" + streetNumber +

               ",     postCode='" + postCode + '\'' +

               ",     city='" + city + '\'' +

               ",     country=" + country +

               '}';

   }

   public String getStreet() {

       return street;

   }

   public void setStreet(String street) {

       this.street = street;

   }

   public int getStreetNumber() {

       return streetNumber;

   }

   public void setStreetNumber(int streetNumber) {

       this.streetNumber = streetNumber;

   }

   public String getPostCode() {

       return postCode;

   }

   public void setPostCode(String postCode) {

       this.postCode = postCode;

   }

   public String getCity() {

       return city;

   }

   public void setCity(String city) {

       this.city = city;

   }

   public Country getCountry() {

       return country;

   }

   public void setCountry(Country country) {

       this.country = country;

   }

}
/* 	Kotlin Program */

data class Address(var street:String,

       var streetNumber:Int,

       var postCode:String,

       var city:String,

       var country:Country)