Chuyển đến nội dung chính

Biến trong Scala

Tìm hiểu về các biến trong Scala, quy tắc định nghĩa biến, các loại biến với khai báo và gán nhiều biến, cũng như phạm vi của biến.
Đã cập nhật 5 thg 10, 2026  · 10 phút đọc

Khám phá cùng AI

ChatGPTClaudePerplexity

Khám phá khóa học Scala mới ra mắt của DataCamp: Giới thiệu về Scala.

Scala được các nhà khoa học dữ liệu sử dụng rộng rãi khi xử lý lượng dữ liệu lớn cùng với Apache Spark trong lĩnh vực Big Data. Đây là một ngôn ngữ lập trình vừa hướng đối tượng vừa hàm, với nhiều tính năng thiết yếu như sau:

  1. Scala được biết đến là ngôn ngữ kiểu tĩnh, trong đó kiểu dữ liệu cho biến được xác định trước khi sử dụng. Việc kiểm tra kiểu được thực hiện ở thời điểm biên dịch thay vì lúc chạy.
  2. Đây cũng là ngôn ngữ "kiểu mạnh", nơi các biến được kiểm tra trước khi thực hiện phép toán trên chúng.
  3. Nó hỗ trợ Suy luận Kiểu (Type Inference), nơi trình biên dịch suy ra kiểu từ biểu thức hoặc hằng, vì vậy việc khai báo kiểu biến là tùy chọn.

Trong hướng dẫn này, bạn sẽ tìm hiểu các chủ đề sau:

Biến

Biến là một vùng được đặt tên trong bộ nhớ, và trình biên dịch cấp phát vị trí dự trữ theo kiểu dữ liệu của biến tương ứng. Biến được khai báo trong Scala với cú pháp sau:

val or val variable_name: variable_datatype = value;

Trong cú pháp trên, biến có thể được định nghĩa theo hai cách bằng từ khóa 'var' hoặc 'val'. Nó gồm 'variable_name' là tên biến mới của bạn, theo sau là dấu hai chấm. Kiểu dữ liệu của biến là 'variable_datatype', có thể là bất kỳ kiểu hợp lệ nào. Sau đó, 'value' được gán cho 'variable_name'.

Ví dụ:

val varValue: Byte = 8;

'val' là từ khóa để định nghĩa biến, và 'varValue' là tên biến. Nó có kiểu dữ liệu 'Byte' và chứa giá trị 8. 'Byte' là giá trị có dấu 8 bit, phạm vi từ 2−7 đến 27−1.

'variable_datatype' ở trên có thể là bất kỳ kiểu dữ liệu nào tồn tại trong Scala như sau.

  1. Int: Số nguyên có dấu 32 bit (dương hoặc âm), phạm vi từ 2−31 đến 231−1.
  2. Byte: Giá trị có dấu 8 bit, phạm vi từ 2−7 đến 27−1.
  3. Short: Giá trị có dấu 16 bit, phạm vi từ 2−15 đến 215−1.
  4. Float: Có thể là 32 bit hoặc 64 bit.

Tương tự, các kiểu dữ liệu khác như Long, Char, Boolean, Char, String, Boolean, Null có phạm vi riêng, và phần giải thích chi tiết được trình bày trong hướng dẫn Hướng dẫn Scala cho người mới bắt đầu. Ngoài ra, 'variable_datatype' nên bắt đầu bằng chữ hoa, ví dụ Int có 'I', cho thấy tất cả các kiểu dữ liệu trên đều là đối tượng trong Scala.

Quy tắc định nghĩa biến trong Scala

Các quy tắc và quy ước để định nghĩa biến trong Scala như sau:

  1. Tên biến dùng kiểu camel thường (lower camel case). Ví dụ, trong tên biến 'nameOfGirl', ký tự 'n' là chữ thường. Sau đó viết hoa chữ cái đầu của các từ tiếp theo như 'O' và 'G'.
  2. Tên biến không được chứa từ dành riêng hoặc từ khóa của Scala.
  3. Tên biến có thể chứa ký hiệu đô la ('$') và gạch dưới ('_'). Tuy nhiên, các ký tự đặc biệt khác như '#','&', v.v. không được phép. Ngoài ra, không khuyến khích dùng gạch dưới.
  4. Khoảng trắng (tab, dấu cách) không được phép trong tên biến.
  5. Tên biến phải bắt đầu bằng chữ cái và không được bắt đầu bằng số hoặc ký tự khác.

Biến có thể thay đổi

Biến có thể thay đổi cho phép bạn thay đổi giá trị của biến ngay cả sau khi đã khai báo.

Cú pháp của biến có thể thay đổi như sau:

var variable_name : variable_datatype = value;

Cú pháp của biến có thể thay đổi cũng có thể được viết như sau:

var variable_name = value;

Ví dụ về biến có thể thay đổi như dưới đây:

var nameOfThing: String = "Car";

Ví dụ trên dùng var làm từ khóa để định nghĩa biến có thể thay đổi. Tên biến là 'nameOfThing'. Sau dấu hai chấm là kiểu dữ liệu của biến là 'String'. Giá trị được lưu trong bộ nhớ sẽ là 'Car'.

Ví dụ trên về biến có thể thay đổi với cú pháp khác có thể viết như sau:

var nameOfThing = "Car";

Bạn có thể định nghĩa biến mà không cần chỉ rõ kiểu dữ liệu như trên. Trình biên dịch Scala sẽ tự động xác định đó là kiểu 'String', gọi là Suy luận Kiểu.

Bạn có thể dễ dàng thay đổi giá trị của biến như sau:

nameOfThing = "Bike";
print(nameOfThing)

Giá trị của biến sẽ đổi từ "Car" sang "Bike". Kết quả in ra sẽ là "Bike", vì từ khóa 'var' cho phép bạn thay đổi giá trị của biến (Nguồn: Variables in Scala).

Biến bất biến

Biến bất biến là biến có giá trị không thể thay đổi sau khi được tạo và được khai báo bằng từ khóa 'val'.

Cú pháp của biến bất biến như sau:

val variable_name : variable_data type = value;

Cú pháp của biến bất biến cũng có thể được viết như sau:

val variable_name = value;

Ví dụ về biến bất biến như dưới đây:

val numberOfThing: Int = 2;

Ví dụ trên dùng val làm từ khóa để định nghĩa biến bất biến và tên biến là 'numberOfThing'. Sau đó là dấu hai chấm với kiểu dữ liệu của biến là 'Int' cùng giá trị lưu trong bộ nhớ là 2.

Ví dụ trên về biến bất biến với cú pháp khác có thể viết như sau:

val numberOfThing = 2;

Bạn có thể định nghĩa biến mà không cần chỉ rõ kiểu dữ liệu như trên, khi đó trình biên dịch Scala sẽ tự động xác định đó là kiểu 'Int'. Quá trình này gọi là Suy luận Kiểu (Nguồn: Variables in Scala).

Bạn không thể thay đổi giá trị của biến như dưới đây:

numberOfThing = 7;

Ví dụ trên sẽ gây lỗi như "error: not found: value numberOfThing", cho thấy việc gán lại giá trị là không thể như bên dưới:

lỗi

Khai báo và gán nhiều biến

Có thể khai báo nhiều biến trong Scala bằng từ khóa 'var' với các tên biến tách nhau bởi dấu phẩy và dấu "=" với giá trị cho biến.

var (x, y, z) = (5, 4.5, "Sit")

Trong ví dụ trên, bạn có thể thấy các biến x, y và z lần lượt được gán giá trị 5, 4.5 và "Sit" như sau.

biến

Việc gán nhiều biến cũng có thể thực hiện trong Scala trên một dòng bằng từ khóa 'val' với các tên biến tách nhau bởi dấu phẩy và dấu "=" với giá trị cho biến.

val a, b, c = 1;

Trong ví dụ trên, bạn có thể thấy các biến a, b và c đều được gán giá trị 1 như sau.

biến

Phạm vi của biến

Phạm vi là mức độ hiển thị của biến, biến sẽ tồn tại trong thời gian chạy bên trong các khối mã xác định. Biến có thể được định nghĩa trong Phạm vi Cục bộ (Local) hoặc Toàn cục (Global). Ví dụ:

var globalVar = 10
def sub(){
var difference = 9-4;
}
print(difference)//Error
print(globalVar)//Valid

Trong đoạn mã trên, biến 'difference' nằm trong Phạm vi Cục bộ, được khai báo bên trong phương thức 'sub', phép trừ sẽ cho kết quả hợp lệ, nhưng in giá trị bên ngoài phương thức 'sub' sẽ gây lỗi. Ngoài ra còn có Phạm vi Toàn cục, nơi biến 'globalVar' có thể được truy cập ở bất kỳ đâu trong chương trình và có thể thực hiện mọi phép toán với nó.

Có ba loại phạm vi cho biến trong Scala (Nguồn: Scala- Variables):

  1. Biến cục bộ (Local variables)
  2. Trường (Fields)
  3. Tham số phương thức (Method Parameters)

Biến cục bộ

Biến cục bộ là biến có thể thay đổi hoặc bất biến được khai báo bên trong một phương thức và chỉ có thể truy cập bên trong phương thức đó, không thể truy cập từ bên ngoài.

Bạn có thể xem ví dụ đơn giản dưới đây để hiểu về biến cục bộ:

class Perimeter  
{
    def triangle()  
    {
        var side1 = 10;
        var side2 = 20;
        var side3 = 30;

        var total = side1+side2+side3;
        print("Perimeter of the  triangle is: " + total);
    }
}

object Test  
{

    def main(args:Array[String])  
    {
        val p1 = new Perimeter()
        p1.triangle()
    }
}
defined class Perimeter
defined object Test

Đoạn mã trên cho kết quả:

Chu vi của tam giác là: 60

Chương trình trên có một lớp tên 'Perimeter' và một đối tượng là 'Test' trong đó có phương thức triangle với ba biến có thể thay đổi là side1, side2, side3. Phép tính và việc in kết quả sẽ được thực hiện bên trong phương thức, cho ra đầu ra chính xác.

Trường (Fields)

Các biến được định nghĩa bên trong lớp được gọi là biến trường (field), có thể là biến có thể thay đổi hoặc bất biến. Nếu biến được khai báo bên trong lớp nhưng không nằm trong bất kỳ phương thức nào, bộ sửa truy cập mặc định sẽ là public và biến có thể được truy cập ở bất kỳ đâu trong chương trình. Tuy nhiên, biến private có thể được truy cập bên trong lớp đã định nghĩa nhưng không thể được truy cập ngoài phạm vi lớp, kể cả trong đối tượng.

class FieldExample
{
  var value1 = 10;
  private var value2 = 30;
  def operation()
  {
    println("Value of value1:"+value1)
  }
  println("Value of value2: "+value2);
}

object Demo
{
  def Main(args:Array[String])
  {
    val obj = new FieldExample()
    obj.operation()
    print(obj.value1)//Valid
    print(obj.value2)


  }
}
defined class FieldExample
defined object Demo

Đoạn mã trên cho kết quả:

Value of value2: 30
Value of value1:10
10

Chương trình trên có một lớp tên 'FieldExample', đối tượng là 'Demo' và một phương thức 'operation'. Biến public value1 có thể được truy cập bằng dấu chấm và in ra giá trị 10. Biến private value2 có giá trị 30, việc truy cập và in biến đó sẽ gây lỗi.

Tham số phương thức

Tham số phương thức là các biến nhận giá trị khi phương thức được gọi, và biến phải là bất biến, được định nghĩa bằng từ khóa 'val'. Ngoài ra, biến có thể được truy cập ngoài phương thức khi có tham chiếu đến nó.

Bạn có thể xem ví dụ đơn giản dưới đây để hiểu về tham số phương thức:

class Triangle
{
    def calculate(height: Int, width: Int)
    {
        var result = 0.5*(height+width);
        println("Area of triangle is: " + result);
    }
}

object Area  
{
     def main(args:Array[String])
    {
        val a = new Triangle()
        a.calculate(4,5);
    }
}
defined class Triangle
defined object Area

Đoạn mã trên cho kết quả:

Area of triangle is: 4.5

Chương trình trên có một lớp tên 'Triangle'. Nó gồm một phương thức 'calculate' với hai tham số phương thức là height và width. Giá trị số nguyên 4 và 5 được truyền vào khi 'calculate' được gọi thông qua thể hiện đối tượng a.

Kết luận

Chúc mừng bạn đã hoàn thành hướng dẫn này!

Trong hướng dẫn này, bạn đã tìm hiểu về các biến trong Scala, quy tắc định nghĩa biến, các loại biến với khai báo và gán nhiều biến, cũng như phạm vi của biến.

Nếu bạn muốn tìm hiểu thêm về Scala, hãy tham gia khóa học Giới thiệu về Scala của DataCamp.

Chủ đề
Scala

Khóa học cho Python

Khóa học

Introduction to Scala

3 giờ
27.2K
Begin your journey with Scala, a popular language for scalable applications and data engineering infrastructure.
Xem chi tiếtRight Arrow
Bắt Đầu Khóa Học
Xem thêmRight Arrow
Liên quan

blog

Claude Opus 4.6: Tính năng, Điểm chuẩn, Bài kiểm tra thực hành và hơn thế nữa

Mô hình mới nhất của Anthropic dẫn đầu ở mã hóa tác tử và lập luận phức tạp. Thêm vào đó, nó có cửa sổ ngữ cảnh 1M.
Matt Crabtree's photo

Matt Crabtree

10 phút

Xem ThêmXem Thêm