Scala – Biến và tham số phương thức

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 studagestudid đượ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. sagecity đượ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à heightwidth. 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 heightwidth.

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à s1s2.

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 s1s2

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

 

You May Also Like

About the Author: Nguyen Dinh Thuc

Leave a Reply

Your email address will not be published.