Những điều nên biết khi Code Kotlin cho Android (P1)

Giới thiệu

  • Kotlin ra đời từ tháng 8 năm 2011.Ngôn ngữ này được phát triển bởi JetBrains. Đến ngày 17/5/2017, Google đã chính thức công bố Kotlin trở thành ngôn ngữ chính thức để lập trình Android vì sự tuyệt vời của nó, từ Android Studio 3.0 thì Kotlin sẽ được build sẵn.
  • Mình cũng đang học kotlin để chuyển dần từ code java sang code kotlin và khi học thì mình thấy có những điều sau đây cần nhớ là các bạn có thể yên tâm code thoải mái bằng kotlin.

Phân biệt giữa var vs val

Điều đầu tiên chúng ta cần nhớ là phân biệt varval vì trong kotlin đây là 2 từ khóa được sử dụng nhiều nhất và khá quan trọng trong kotlin.Chúng được sử dụng để khai báo biến và thuộc tính trong kotlin.

  • Khi sử dụng từ khóa val nó cung cấp cho bạn một biến read-only, nó giống như là khi chúng ta sử dụng từ khóa final ở trong java vậy.
  • Sử dụng var khi bạn muốn thay đổi giá trị của biến ở một nơi nào đó.

Class Data

Trong Code java chúng ta phải Code dài dòng, nhưng đối với Code kotlin thì chỉ cần 1 dòng là đủ các chứng năng, các bạn xem demo bên dưới sẽ thấy rõ

public class Hero {
    private int mId;
    private String mName;

    public int getId() {
        return mId;
    }

    public void setId(int id) {
        this.mId = id;
    }

    public String getName() {
        return mName;
    }

    public void setName(String name) {
        this.mName = name;
    }

    public Hero() {
    }

    public Hero(int id, String name) {
        mId = id;
        mName = name;
    }
}

Đối với kotlin chỉ cần 1 dòng là đủ :v

data class Hero(private var mId: Int, private var mName: String)

companion object

Trong Java khi khai báo một đối tượng tĩnh ( static ) ta thường dùng cú pháp như sau :

private static final String TAG = "HeroFragment";

Còn trong Kotlin chúng ta không thể tạo ra các đối tượng hoặc các method tĩnh.Nếu chúng ta cần một số thuộc tính tĩnh, hằng số hoặc các hàm trong một lớp, chúng ta có thể sử dụng companion object.Đối tượng này sẽ được chia sẻ giữa tất cả các trường hợp của lớp, giống như một trường tĩnh trong Java.

companion object {
     val TAG: String = "HeroFragment"
  }

Nếu chúng t dùng thêm từ khóa const thì nó sẽ rút gọi hơn khi mình gọi từ file class khác, như ở trên nếu gọi từ file class khác sẽ là Something.Companion.getTAG() , còn khi chúng ta bỏ từ khóa const thì khi gọi chỉ cần Something.TAG thôi.(Tks to Nguyen Thanh Hai)

companion object {
    const  val TAG: String = "HeroFragment"
  }

Đối với method tĩnh thì ta phải thêm annotation @JvmStatic trước phương thức là được

  @JvmStatic
  fun isBlank(input: String?): Boolean {
    return input == null || input.isEmpty()
  }

Code trên sẽ giống thế này trong Java:

  public static boolean isBlank(String input){
        return input == null || input.isEmpty();
    }

Null Safety

Check 1 biến nào đó hay result về có null hay không là 1 việc làm khá thường xuyên của chúng ta, ví dụ như đoạn code sau :

if (text != null) {
  int length = text.length();
}

Trong Kotlin nó sẽ đơn giản hơn nhiều bởi 1 từ khóa là ? :

val length = text?.length

Từ khóa ? sẽ kiểm tra xem text có null không ,nếu không nó sẽ chạy hàm tiếp theo, còn null thì sẽ dừng lại.Tác dụng khác của từ khóa ? là nếu chúng ta muốn khai báo 1 biến có thể là null thì trong Kotlin phải làm như sau :

val Id:Int? = null

Lambdas

Lambdas ra đời từ Java 8, rất hữu ích, nó giúp code của chúng ta trong gọn và đẹp hơn rất nhiều, đối với những người mới sử dụng thì sẽ khá khó khăn( giống mình :v ). Hàm lambdas được định nghĩa trong hai dấu { }, Dấu -> để tách biệt các tham số và nội dung thực thi. ví dụ như sau :

view.setOnClickListener({ view ->  showToast() })

Chúng ta có thể làm tối ưu hơn nữa bằng cách viết như sau :

view.setOnClickListener { showToast() } 

Trong java chúng ta phải code 1 đoạn như này để thực hiện như tác vụ ở trên :

view.setOnClickListener(new OnClickListener() { 
@Override
public void onClick(View v) {
 showToast();
    }
});

Kết thúc

  • Bài viết chỉ mang tính chất tham khảo thôi ,còn nếu muốn biết rõ hơn thì các bạn có thể lên trang chủ của kotlin để biết chi tiết hơn ( https://kotlinlang.org/docs/reference/ )
  • Cảm ơn các bạn đã đọc bài của mình .