Trong Scala có chứa rất nhiều thứ và khái niệm khác nhau, là một ngôn ngữ hướng đối tượng. Điều này nghĩa là chúng ta có thể định nghĩa các class trong Scala, và khởi tạo các object trong những class này.
Scala class giống như một template cho Scala object. Điều này nghĩa là một class xác định những object thông tin nào mà class nắm giữ, và những phương thức nào mà nó đưa ra. Một class có thể chứa các thông tin như sau:
- Các trường
- Constrcutors
- Các phương thức
- Superclasses (kết thừa)
- Các Interface hay là trait được thực hiện bởi class
Trong bài viết này chúng ta sẽ chỉ tập trung vào các trường, constructor và phương thức trong class.
Định nghĩa class cơ bản
Đây là một định nghĩa đơn giản về class trong Scala
class MyClass { }
Cách định nghĩa không có gì đặc biệt đúng ko? Nó tương đối đơn giản như các ngôn ngữ thông thường khác
Các trường
Một trường đơn giản là một biến có thể truy cập được bên trong toàn bộ object. Điều này trái ngược với biến cục bộ chỉ có thể truy cập bên trong các phương thức mà được chúng ta khai báo. Đây là khai báo đơn giả cho một trường:
class MyClass { var myField : Int = 0; }
Khai báo này định nghĩa kiểu của trường là Int và giá trị khởi tạo ban đầu bằng 0
Suy luận kiểu trong Scala có thể tìm ra kiểu của biến, dựa trên giá trị nó được gán vào. Do đó, bạn có thể bỏ qua việc khai báo kiểu cho trường giống như ở trên như sau:
class MyClass { var myField = 0; }
Bởi vì 0 là giá trị mặc định cho việc giả định nó là một Int, trình biên dịch Scala có thể suy luận kiểu của trường myField dựa trên giá trị 0 được gán cho nó
Constructors
Trong Scala contructor được khai báo như sau:
class MyClass { var myField : Int = 0; def this(value : Int) = { this(); this.myField = value; } }
Ví dụ này định nghĩa một construcor với một tham số đấu vào, và gán giá trị của tham số này vào trường myField
Để ý rằng dấu = giữa các tham số và body của constructor (bắt đầu bằng { ). Dấu bằng này phải được dùng trong các Constructor.
Chú ý rằng chúng ta có gọi một contructor mà không có tham số, this()
. Tất cả các constructor ngoại trừ contructor mà không có tham số, phải gọi một constructor khác khi bắt đầu trong body.
Các phương thức
Các phương thức trong class được định nghĩa như sau
class MyClass { var myField = 0; def getMyField() : Int = { return this.myField; } }
Ví dụ ở trên định nghĩa một phương thức được gọi là getMyField(). Kiểu trả về là Int, được khai báo sau tên của phương thức. Bên trong { và } body của phương thức được khai báo. Phương thức hiện tại chỉ trả về gía trị của trường myField. Chú ý dấu bằng giữa Int và {. Các phương thức mà trả về một giá trị nên có dấu bằng này ở đây.
Đây là một phương thức không có giá trị trả về. Nhưng thay vào đó sẽ chỉnh sửa trạng thay hay giá trị của object. Chú ý rằng phương thức addToMyField() không có dấu bằng và không trả về một kiểu xác định
class MyClass { var myField = 0; def getMyField() : Int = { return this.myField; } def addToMyField(value : Int) { this.myField += value; } }