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.
Nội dung chính của bài viế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 đó.
- Quà tặng cho bạn: Miễn phí khóa học Kotlin for Android: Beginner to Advanced
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é.
À quên, nếu có nhiều hơn 10 comment mong muốn đọc cuốn sách “Kotlin in Action“. Mình sẽ chia sẻ miễn phí cho cả nhà nhé.
Bình luận. Cùng nhau thảo luận nhé!