Class trong Kotlin (Bài 6)

Bài viết class trong Kotlin sẽ trình bày đến bạn đọc phương pháp lập trình hướng đối tượng với Kotlin. Những nội dung được đề cập gồm class, đối tượng, hàm, hàm khởi tạo, thuộc tính, overriding function, static (Companion Object) và access modifier. Nếu các bạn đã từng tìm hiểu về lập trình hướng đối tượng nói chung và lập trình hướng đối tượng với Java thì những nội dung mà chúng tôi vừa liệt kê không có gì mới lạ. Hôm nay, chúng tôi sẽ đề cập đến những nội dung này theo hướng tiêp cận với Kotlin.

Class trong Kotlin – Class

Giống như Java, class trong Kotlin được khai báo với từ khóa class

class tên_class {

}

Ví dụ về khai báo lớp NhanVien

class NhanVien {

}

Lưu ý về cách đặt tên class sử dụng danh từ, viết hoa kí tự đầu mỗi từ và chúng ta cũng đã biết class được dùng để tạo đối tượng (thể hiện của lớp). Mỗi đối tượng được đề cập thường có đặc điểm (thuộc tính) và những xử lý liên quan (hàm). Do đó, bên trong class sẽ có những thành viên này.

Class trong Kotlin – Hàm khởi tạo

Như các bạn đã biết, hàm khởi tạo (constructor) dùng để khởi tạo giá trị cho các thuộc tính khi tạo một thể hiện của lớp. Và một lớp không nhất thiết phải có hàm khởi tạo.

Một class trong Kotlin có thể có một hàm khởi tạo chính (primary constructor), một hoặc nhiều hàm khởi tạo thức cấp (secondary constructor)

1/ Cú pháp khai báo hàm khởi tạo chính

class tên_class (danh_sách_tham_số){

}

Ví dụ khai báo hàm khởi tạo của class NhanVien với 2 tham số là  ma và ten

class NhanVien(var ma: String, var ten: String){

}

Với khai báo như trên đồng nghĩa với việc class NhanVien có 2 thuộc tính là ma và ten. Đối với Java sẽ được khai báo như sau

class NhanVien {
  String ma;
  String ten;
  public NhanVien(String ma, String ten) {
    this.ma = ma;
    this.ten = ten
  }
}

Không khó để nhận ra rằng cùng một yêu cầu nhưng việc cài đặt bằng Kotlin sẽ gọn hơn Java

2/ Cú pháp khai báo hàm khởi tạo thứ cấp

Để khai báo một hoặc nhiều hàm khởi tạo thưc cấp, chúng ta sử dụng từ khóa constructor

class NhanVien(var ma: String, var ten: String) {

    // Hàm khởi tạo thứ cấp không tham số
    constructor() : this("","")
}

Với khai báo như trên, class NhanVien có 2 hàm khởi tạo. Một hàm khởi tạo có 2 tham số và một hàm khởi tạo không có tham số. Và đoạn code : this(“”,””) với mục đích gọi hàm khởi tạo chính. Đây là xử lý bắt buộc.

Class trong Kotlin – Thuộc tính

Có 2 cách để khai báo thuộc tính trong class với Kotlin. Một là khai báo sử dụng hàm khởi tạo chính như ở trên. Hai là khai báo theo cú pháp sau

class tên_Class {
    [lateinit] var tên_thuộc_tính: kiểu_dữ_liệu
}

Trong đó từ khóa lateinit để xác định thuộc tính sẽ được khởi tạo giá trị ban đầu sau. Nếu không sử dụng từ khóa này, thuộc tính phải được gán giá trị tại thời điểm khai báo.

Ví dụ khai báo lớp KhachHang có 3 thuộc tính kiểu String

class KhachHang{
    lateinit var ma: String
    lateinit var ten: String
    lateinit var diachi: String
}

Tới đây các bạn cũng nên biết về access modifier cũng có thể hiểu là quyền truy cập. Access modifier được sử dụng khai báo thuộc tính, khai báo phương thức. Nó cho biết những thuộc tính, phương thức nào được sử dụng ở lớp khác.

Trong Kotlin có 4 access modifier bao gồm private, protected, internalpublic. Nếu lúc khai báo thuộc tính hay phương thức mà chúng ta không chỉ định 1 trong 4 access modifier trên thì mặc định là public.

Access modifier Giải thích
private Chỉ sử dụng ở lớp khai báo
protected Tương tự như private ngoài ra còn được sử dụng ở lớp con
internal Tương tự như protected ngoài ra còn được sử dụng ở các lớp cùng module
public Không giới hạn truy cập

Class trong Kotlin – Hàm

Hàm trong Kotlin được khai báo sử dụng từ khóa fun. Cũng như những ngôn ngữ lập trình khác, hàm trong Kotlin có thể có tham số, có thể trả về giá trị.

1/ Ví dụ khai báo hàm dùng để hiển thị chuỗi “Xin chào mọi người!”. Hàm này không có tham số, không trả về giá trị nơi gọi hàm

fun hienThi() {
  println("Xin chào mọi người!")
}

Sử dụng hàm

hienThi()

2/ Ví dụ khai báo hàm tính tổng 2 số nguyên. Hai số nguyên được truyền vào hàm khi hàm được gọi. Hàm nhận vào 2 số nguyên

fun tinhTong(n: Int, m: Int) {
  var tong = n + m
  println("Tổng hai số là $tong")
}

Sử dụng hàm

tinhTong(100, 200)

3/ Ví dụ khai báo hàm tính lũy thừa 2 của số nguyên x. Hàm trả về giá trị sau khi tính toán tại nơi gọi hàm.

fun tinhLuyThua(x: Int): Int {
  return x * 2
} 

Sử dụng hàm tinhLuyThua

val kq = tinhLuyThua(100)

Class trong Kotlin – Ví dụ

1/ Tạo một class tên Student gồm 3 thuộc tính và 2 hàm

class trong kotlin

2/ Tạo một file Kotlin tên System có một hàm Main

3/ Kết quả khi chạy chương trình