Cách viết hàm khởi tạo Class trong Kotlin vừa gọn, vừa dễ đọc

802

Bài viết được sự cho phép của tác giả Sơn Dương

Một trong những mục tiêu tự học của mình đó chính là nghiên cứu thật kỹ cuốn sách “Kotlin in Action”. Và mình muốn chia sẻ một tip khá thú vị mà mình đọc được: cách khởi tạo class trong Kotlin hiệu quả nhất.

Cách viết hàm khởi tạo Class trong Kolin

Trong lập trình ngôn ngữ Kotlin, để định nghĩa một lớp, bạn có thể định nghĩa bằng từ khóa constructor (mà bước này cũng có thể bỏ qua được), cùng với các đối số cần thiết để khởi tạo lớp đó trong dấu ngoặc đơn. Hàm mới được khởi tạo này thuộc hàm đặc biệt (primary constructor) của lớp.

Giả sử bạn muốn tạo một lớp Gamer với username là tham số bắt buộc phải khai báo trong hàm tạo(constructor) của lớp đó.

class Gamer constructor(username: String){
...
}

Sau đó bạn có thể khai báo bất kỳ thuộc tính nào mà bạn muốn trong phần thân của lớp. Không chỉ thế, bạn cũng có thể khai báo một hoặc nhiều các khối lệnh init{} có chứa các dòng lệnh cần thiết để khởi tạo lớp đó.

♥ Có thể bạn cần: Lambda trong Koltin

Theo như ví dụ ở trên, đầu tiên trong lớp Gamer chúng ta khai báo thuộc tính val username : String, rồi trong khối lệnh init{}, chúng ta gán giá trị nhận được từ constructor cho thuộc tính

class Gamer constructor(username: String) {
    val username : String

    init {
        this.username = username
    }
}

Vậy bí kíp mà mình muốn truyền đạt ở đây là gì?

Đó chính là cách viết cực ngắn sau mà tác dụng thì không thay đổi

class Gamer(val username: String)

CHÍNH XÁC! Bạn có thể khai báo thuộc tính bên trong hàm tạo. Nó hoạt động tương tự và tự sinh ra mã giống với Java. Khi bạn thêm từ khóa val trước đối số của hàm, Kotlin sẽ tạo các thuộc tính và gán giá trị được truyền tới lớp cho thuộc tính đó.

  Class trong Java là gì? Object trong Java là gì?

  Làm thế nào tạo instance của một class mà không gọi từ khóa new?

So sánh với cách làm truyền thống bằng Java

Để chứng thực chúng giống nhau đến 100%, mình đã biên dịch chúng sang ngôn ngữ Java. Mình sẽ đổi tên khai báo lớp ở dòng 1 thành GamerConciseSyntax.
Kết quả là bạn có thể thấy chúng trông như thế này ở ngôn ngữ Java:

// Gamer.java
import [...]

public final class Gamer {
   @NotNull
   private final String username;

   @NotNull
   public final String getUsername() {
      return this.username;
   }

   public Gamer(@NotNull String username) {
      Intrinsics.checkParameterIsNotNull(username, "username");
      super();
      this.username = username;
   }
}
// GamerConciseSyntax.java
import [...]

public final class GamerConciseSyntax {
   @NotNull
   private final String username;

   @NotNull
   public final String getUsername() {
      return this.username;
   }

   public GamerConciseSyntax(@NotNull String username) {
      Intrinsics.checkParameterIsNotNull(username, "username");
      super();
      this.username = username;
   }
}

Như bạn thấy đó, hai đoạn mã trông giống hệt nhau. Trình biên dịch của Kotlin tạo ra hai bytecode giống hệt nhau. Vì vậy chẳng có lý do gì mà không sử dụng cú pháp ngắn gọn này!

Mặc dù khởi tạo class không phải là bí kíp gì to lớn nhưng nó cũng khá thú vị phải không?

Các bạn thấy hay thì like và chia sẻ bài viết nhé.

Bài viết gốc được đăng tải tại vntalking.com

Bạn có thể quan tâm:

Xem thêm công việc CNTT hấp dẫn trên TopDev