Android Giới thiệu về Kotlin (P1)

1. What is Kotlin?

Kotlin là một ngôn ngữ phát triền dựa vào Java Vitual Machine được phát triển bở JetBrains5 - Công ty phát triển IntelliJ IDE

Các tính năng thú vị của kotlin

  • Trực quan và dễ học: Hầu hết các phần của kotlin rất giống với những gì chúng ta đã biết,
  • IDE Android studio đã được kết hợp Kotlin free

Vậy lợi thế so với Java 7 là gì

  • More expressive (Biểu cảm hơn) write more with much less code
  • Safer (An toàn hơn) Kotlin is null safe. Trường hợp null trong java sẽ crash nhưng kotlin thì không, Thật thú vị phải không nào.
  • functional (Đoạn này chưa hiểu lắm) nhưng đại khái kotlin là một ngôn ngữ hướng đối tượng không phải ngôn ngữ hướng chức năng tuy nhiên như nhiều ngôn ngữ hiện đại khác nó sự dụng khái niệm chường trình chức năng ví dụ lambda expressions (search google từ khóa này)
  • extension functions (có khả năng mở rộng cao) Chúng ta có thể mở roojgn bất kỳ lớp với các tính năng mới ngay cả khi chúng ta không truy cập vào source code của nó
  • highly interoperable (Tương thích cao) có thể sử dụng hỗn hơp kotlin và java và sử dụng mọi thư viện của java

2. What do we get with Kotlin

Chúng ta hãy cùng so sánh giữa java và kotlin nhé

2.1 More expressive.... Ngắn gọn

Cùng so sánh cách khởi tạo model trong java và kotlin nhé

  1. Java

public class Artist {
private long id;
private String name;
private String url;
private String mbid;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
}
public void setName(String name) {
this.name = name;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getMbid() {
return mbid;
}
public void setMbid(String mbid) {
this.mbid = mbid;
}
@Override public String toString() {
return "Artist{" +
"id=" + id +
", name='" + name + '\'' +
", url='" + url + '\'' +
", mbid='" + mbid + '\'' +
'}';
}
  1. Kotlin
data class Artis(
	var id: Long,
	var name: String,
	var url: String,
	var mbid: String
)

Các bạn thấy đấy ngắn gọn hơn rất nhiều đúng không nào

2.2 Null safety

Đã bao nhiêu lần bạn gặp NullPointerException khi kiểm thử code của bạn? Ngày nay, rõ ràng là việc cho phép các nhà phát triển gán null cho một tham chiếu đối tượng không phải là sự lựa chọn thiết kế tốt nhất! Cố gắng sử dụng một tham chiếu đối tượng có một giá trị null là nguồn gốc làm phát sinh các lỗi lớn trên nhiều ngôn ngữ lập trình khác nhau, bao gồm Java. Trên thực tế, NullPointerException là nguồn gốc gây nên phiền toái lớn từ đó Java 8 đã thêm chú thích @NonNull đặc biệt để cố gắng và khắc phục lỗ hổng này trong hệ thống kiểu của nó.

Vậy với Kotlin thì sao

Trong Kotlin, mặc định tất cả các biến đều được xem là không thể null, vì vậy cố gắng gán một giá trị null cho một biến sẽ dẫn đến một lỗi biên dịch. Ví dụ, code sau đây sẽ không biên dịch:

var artis: Artist? = null 

Vì vậy Kotlin sinh ra toán tử gọi antoanf null safety

?.

Khi bạn thêm toán tử Gọi An toàn vào một tham chiếu, thì tham chiếu đó sẽ được kiểm tra giá trị null. Nếu giá trị là null, thì null được trả về, nếu không tham chiếu đối tượng sẽ được sử dụng như dự định ban đầu. Mặc dù bạn có thể đạt được hiệu quả tương tự khi sử dụng câu lệnh if, nhưng toán tử Gọi An toàn cho phép bạn thực hiện công việc tương tự với lượng code ít hơn nhiều.

  1. Kotlin
var artis: Artist? = null 
private fun show(){
   artist?.print()
   // Kotlin sẽ in ra aritist khi artist !=null còn null thì thôi kệ đi ko làm gì cả
}
  1. Java
private Artist artis;

private void show(){
    if (artis !=null){
        artis.print();
    }
}

Một ví dụ tham khảo tương tự

val name = artist?.name ? : "empty"

2.3 Extension functions

Chúng ta có thể thêm các function vào bất cứ class nào ví dụ bạn muốn, Có thể mở rộng các class cho dù các bạn không có quyền truy cập vào class đó. Ví dụ show Toast ở fragment

fun Fragment.toast(message: CharSequence, duration: Int = Toast.LENGTH_SHORT){
      Toast.makeText(getActivity(), message, duration).show()
}

Vậy là từ bây giờ bất kì các class nào kế thừa Fragment đều có thể sử dụng hàm này

toast("Hello world!")

2.4 Functional support (Lambdas)

Một biểu thức lambda đại diện cho một hàm ẩn danh. Lambda là một cách tuyệt vời để giảm thiểu số lượng code cần thiết để thực hiện một số tác vụ phát sinh tại mọi thời điểm trong phát triển Android—ví dụ như viết listener và callback.

Khi xây dựng biểu thức lambda trong Kotlin, bạn cần phải tuân theo các quy tắc sau:

  • Biểu thức lambda nên được bao quanh bởi các dấu ngoặc nhọn.

  • Nếu biểu thức có chứa bất kỳ tham số nào, thì bạn cần phải khai báo chúng phía trước biểu tượng mũi tên ->.

  • Nếu bạn đang làm việc với nhiều tham số, thì bạn nên tách chúng bằng dấu phẩy.

  • Phần thân theo sau dấu ->.

  1. Kotlin
view.setOnClickListenner({view -> /* something */})
// or
view.setOnClickListener() { // something }
// or 
view.setOnClickListener {/*something */ }
  1. Java
view.setOnClickListenner(new OnClickListenner(){
   override
   public void onClick(View v){
       // something
  }
});

2.5 Singleton

Ở Java thật là dài dòng và vất vả khi muốn khởi tạo Singleton phải không nào các bạn

  1. Java
public class JavaSingleton {
 
  private static JavaSingleton singleton;
 
  private JavaSingleton() { }
 
  public static JavaSingleton getInstance( ) {
     if (singleton ==null){ 
         singleton = new JavaSingleton( );
     }
     return singleton;
  }
  1. Kotlin Thay vì khai báo một lớp, Kotlin cho phép bạn định nghĩa một đối tượng duy nhất, có nghĩa là về mặt ngữ nghĩa giống như một singleton
object KotlinSingleton {
   fun function() { /* something */}
}

và có thể sử dụng luôn như sau

KotlinSingleton.function()

3. Install

Để tích hợp kotlin vào AndroidStudio có 2 cách cho các bạn

  1. Đơn giản nhất download Android Studio Canary 3.0 Beta bản này là bản Beta nên chắc vẫn còn nhiều lỗi nhưng mình có thể trải nghiệm sớm nhất, hiện tại mình đang dùng phiên bản này và cảm thấy khá hài lòng Download

  2. Cài đặt Kotlin Plugin cho Android studio của bạn Các bạn làm theo hướng dẫn tại đây nhé https://blog.jetbrains.com/kotlin/2013/08/working-with-kotlin-in-android-studio/

Vào ngày 17 tháng 5 năm 2017, tại hội nghị Google I/O , team phát triển Android đã thông báo rằng Kotlin sẽ được google support để trở thành ngôn ngữ chính của android. Nếu các bạn có hứng thú với Kotlin hãy tiếp tục dõi theo các version sau nhé.