Các biến có thể được định nghĩa như không gian lưu trữ trong bộ nhớ để lưu trữ các gía trị được gán vào. Dựa trên kiểu dữ liệu của biến bộ nhớ được cấp phát bởi trình biên dịch / kiểu hệ thống và giá trị liên quan đến biến đấy được lưu trữ.
Khai báo biến trong Scala
Khai báo biến chỉ định tên biến sẽ được lưu trữ trong bộ nhớ mà có thể truy cập được với tên này. Cú pháp của khai báo biến như sau:
var variablename : datatype = value
var
là từ khoá thể hiện rằng nó là một biến với tên biến và kiểu dữ liệu, value
biểu hiện rằng đây là giá trị khởi tạo của biến
ví dụ
var studentId:Int = 12
Từ khoá var chỉ định rằng studentId là một biến và kiểu của nó là Int. Giá trị của studentId được khởi tạo bằng 12 và giá trị này có thể được gán lại trong chương trình
Các hằng số cũng có thể được khai báo như sau:
val variablename:datatype = value
val
là từ khoá thể hiện rằng nó là một biến với tên và kiểu dữ liệu, value
bên phải biểu hiện giá trị không thay đổi nghĩa là nó sẽ không được gán lại trong chương trình.
ví dụ
val pi= 3.14f
pi
là tên của biến với từ khoá val
, và giá trị khởi tạo là 3.14. val
chỉ định rằng giá trị của biến pi
sẽ không thể thay đổi
Thử thay đổi nó như sau
scala> pi=5 <console>:8: error: reassignment to val pi=5 ^ scala>
Kiểu dữ liệu của biến
Kiểu dữ liệu được quy định sau tên biến và trước dấu bằng. Kiểu dữ liệu chỉ định kiểu của biến ví dụ nó có thể là integer, string…
Cú pháp để khai báo kiểu dữ liệu như sau
var variablename:Datatype = value OR val variablename:Datatype = value
Ví dụ
var studage:Int = 8 val studid:Int = 4
Các biến studage
và studid
được khai báo ở trên được chỉ định là các biến với kiểu là Int
Suy luận kiểu biến
Trình biên dịch của Scala có thể xác định kiểu của biến dựa trên giá trị khởi tạo được gán vào được gọi là suy luận kiểu biến. Điều này được thực hiện bằng interface type system
Biến có thể được khai báo như sau
val studid = 10; var studname = "Adam"
Ở đây chúng ta không chỉ định kiểu dữ liệu nhưng dựa trên giá trị được gán vào, trình biên dịch có thể xác định được kiểu dữ liệu của biến studid
là integer và studname
là string.
Gán kép
Một đoạn code có thể trả về một tuple và có thể được gán vào một biến. Gán kép của biến được hỗ trợ bởi Scala
Ví dụ các biến có thể được khai báo như sau:
val(sid:Int, sname:String) = (12,"John")
Ví dụ trên khai báo 2 biến sid
với kiểu là Int và sname
với kiểu là String với các giá trị khở tạo 2 biến này được gán trong một tuple
Hoặc có thể viết đơn giản như sau
val(sid,sname)=(12,"John")
Ở đây chúng ta không chỉ định kiểu dữ liệu cho 2 biến này thay vào đó nó sẽ được suy ra dựa theo giá trị thiết lập được gán vào.
Để hiểu rõ hơn khái niệm bên trên chúng ta hãy cùng xem ví dụ sau
class Student { var sid:Int = 10 var sname = "John" var marks = 72.5f val(sage,city) = (13,"Mysore") def studdetails() { println("Student Id is:"+sid); println("Student Name is:"+sname); println("Marks secured is:"+marks); println("Student Age is:"+sage); println("City is:"+city); } }
Ở đây chúng ta tạo một Student
class với các biến là sid, sname, marks, sage, city
. sage
và city
được gán bằng cách gán kép và phương thức sduddetails
hiển thị chi tiết về Student
khi phương thức được gọi.
object test { def main(args:Array[String]) { val st = new Student(); st.studdetails() } }
Tạo một object test
và sau đó tạo một object Student
và gọi phương thức studdetails()
. Chú ý rằng tuple là một cặp giá trị. Chúng ta sẽ nói về nó sau.
Bây giờ hãy chạy đoạn code trên bằng cách gõ test.main(null)
.
Output
Student Id is:10 Student Name is:John Marks secured is:72.5 Student Age is:13 City is:Mysore
Phạm vi / các loại của biến
Các biến Scala được phân loại theo 3 phạm vi khác nhau dựa trên nơi mà biến được khai báo. Chúng là các trường, tham số của phương thức, biến local. Chúng ta sẽ trình bày từng loại một
Các biến trường: Các biến này có thể truy cập trong tất cả các phương thức trong object và bên ngoài object dựa trên mức truy cập (private, public, protected) thường được sử dụng khi khai báo biến. Chúng thuộc về object và có thể là mutable hoặc immutable phụ thuộc vào nó là var
hay val
Hãy cùng xem ví dụ để miêu tả các biến trường:
class Window { var height = 3.2f var width = 5.6f def windet() { println("Window height is :"+height) } println("Window width is :"+width); }
Class Window
được tạo với các biến trường là height
và width
. Hai biến này có thể được truy cập bên trong phương thức và được gọi từ một object bằng cách tạo tham chiếu.
Tạo một Object Win
như bên dưới:
object Win { def main(args:Array[String]) { val win = new Window() win.windet() } }
Chúng ta tạo một object Window
và truy cập đến các biến height
và width
.
Chạy code ở trên bằng cách thực thi Win.main(null)
Output:
Window width is :5.6 Window height is :3.2
Các tham số của phương thức: Có những biến thường được sử dụng để truyền giá trị vào trong phương thức bất cứ lúc nào phương thức được gọi. Những biến này có thể truy cập bên trong phương thức hoặc bên ngoài phương thức nếu nó được tham chiếu đến một object bên ngoài phương thức. Những biến này thường được định nghĩa immutable bằng cách sử dụng val
Hãy cùng xem ví dụ bên dưới đây
class Subtract { def sub(s1:Int, s2:Int){ var res = s1-s2 println("Result is:"+res); } }
Subtract class
được tạo với phương thức sub
với 2 biến tham số đầu vào là s1
và s2
.
object TestSub { def main(args:Array[String]){ val su = new Subtract() su.sub(40,10) } }
TestSub
object được tạo và phương thức sub đươc gọi bằng cách truyền các giá trị vào 2 biến s1
và s2
Chạy code bằng lệnh sau TestSub.main(null)
Output:
Result is:30
Các biến Local: Các biến local là các biến được khai báo bên trong một phương thức. Những biến này chỉ được truy cập bên trong phương thức. Các biến này có thể là mutable hoặc immutable dựa trên khai báo var hoặc val
Hãy cùng xem ví dụ bên dưới đây
class Addition { def add() { var(a,b) = (10,20); var c = a+b; println("Result is:"+c) } }
Ở đây chúng ta tạo một class Addition
và định nghĩa một phương thức với các biến a, b và c
trong phương thức add
. Nếu chúng ta thử truy cập các biến a, b và c
bên ngoài phương thức thì một error sẽ được đưa ra là không tìm thấy các biến.
Tạo object Test
để truy cập các biến phương thức như sau:
object Test { def main(args:Array[String]) { val ad = new Addition() ad.add() } }
Chạy code bằng cách thực thi câu lệnh Test.main(null).
Output:
Result is:30