openplanning

Biến (Variable) trong ngôn ngữ Dart

  1. Biến là gì?
  2. Khai báo biến với từ khoá var
  3. Khai báo biến với từ khoá dynamic
  4. Khai báo biến với kiểu dữ liệu cụ thể
  5. Khai báo biến với từ khoá final
  6. Khai báo biến với từ khoá const

1. Biến là gì?

Trong ngôn ngữ lập trình Dart, biến (variable) là một cái tên (một định danh) trỏ đến một địa chỉ lưu trữ dữ liệu trên bộ nhớ.
Ví dụ:
var myVariable1 = 100;
  • var là một từ khoá để khai báo một biến.
  • myVariable1 là tên biến.
  • 100 là giá trị của biến này.
Sau đây là các quy tắc đặt tên cho biến:
  • Không thể sử dụng từ khoá để đặt tên cho biến. Chẳng hạn "var" là một từ khoá, nó không thể được sử dụng để đặt tên cho biến.
  • Tên của biến bao gồm các chữ cái trong bảng chữ cái latinh và các chữ số.
  • Tên của biến không được chứa khoảng trắng hoặc các ký tự đặc biệt ngoại trừ dấu gạch dưới ( _ ) hoặc ký hiệu đô la ( $ ).
  • Tên của biến không được bắt đầu bởi một chữ số.

2. Khai báo biến với từ khoá var

Khai báo biến là một việc bắt buộc trước khi sử dụng, với mỗi cái tên bạn chỉ cần khai báo nó một lần.
Cách đơn giản nhất để khai báo một biến là sử dụng từ khoá var:
var myVariable1 = "My Text"; // Declare a variable and assign a value to it.

var myVariable2; // Declare a variable but have not assigned a value.
Bạn có thể gán một giá trị mới cho biến, điều này có nghĩa là biến đã trỏ tới một địa chỉ lưu trữ dữ liệu mới trên bộ nhớ.
myVariable1 = "New My Text";
Ví dụ:
Variable_var_ex1.dart
void main() {
  var myVariable1 = "My Text";
  print(myVariable1);

  myVariable1 = "New My Text";  
  print(myVariable1);
}
Output:
My Text
New My Text
Việc sử dụng từ khoá "var" để khai báo một biến có nghĩa là bạn nói với Dart rằng: "Hãy tự phát hiện kiểu dữ liệu của biến". Kiểu dữ liệu của biến sẽ được xác định tại lần đầu tiên nó được gán giá trị. Nếu bạn khai báo một biến nhưng chưa từng gán giá trị cho nó thì kiểu dữ liệu của nó là Null.
Variable_var_ex2.dart
void main() {
  var myVariable1 = "My Text"; // Data type: String
  print("data type of myVariable1: " + myVariable1.runtimeType.toString());

  var myVariable2 = 1000; // Data type: int
  print("data type of myVariable2: " + myVariable2.runtimeType.toString());

  var myVariable3; // Data type: Null
  print("data type of myVariable3: " + myVariable3.runtimeType.toString());

  myVariable3 = true; // Data type: bool
  print("data type of myVariable3: " + myVariable3.runtimeType.toString());
}
Output:
data type of myVariable1: String
data type of myVariable2: int
data type of myVariable3: Null
data type of myVariable3: bool
  • Dart Data Types
Một biến được khai báo với từ khoá var và kiểu dữ liệu được phát hiện là khác Null, bạn không thể gán cho nó một giá trị với kiểu dữ liệu khác.
Ví dụ: Một biến đã được Dart xác định rằng kiểu dữ liệu của nó là String. Trình biên dịch sẽ thông báo lỗi nếu bạn gán một giá trị số cho nó.
void main() {
  var myVariable1 = "My Text"; // Data type: String
  print("data type of myVariable1: " + myVariable1.runtimeType.toString());
 
  // Can not assign to it an integer value.
  myVariable1 = 1000; // Error at compile time.
}
Thông báo lỗi của trình biên dịch:
Error compiling to JavaScript:
Warning: Interpreting this as package URI, 'package:dartpad_sample/main.dart'.
lib/main.dart:6:17:
Error: A value of type 'int' can't be assigned to a variable of type 'String'.
  myVariable1 = 1000; // Error at compile time.
                ^
Error: Compilation failed.

3. Khai báo biến với từ khoá dynamic

Từ khoá dynamic cũng được sử dụng để khai báo một biến, nó khá giống với từ khoá var, điều khác biệt là kiểu dữ liệu của biến này có thể thay đổi.
dynamic v1 = 123;   // v1 is of type int.
v1 = 456;           // changing value of v1 from 123 to 456.
v1 = 'abc';         // changing type of v1 from int to String.

var v2 = 123;       // v2 is of type int.
v2 = 456;           // changing value of v2 from 123 to 456.
v2 = 'abc';         // ERROR: can't change type of v2 from int to String.

4. Khai báo biến với kiểu dữ liệu cụ thể

Bạn có thể khai báo một biến với kiểu dữ liệu cụ thể thay vì yêu cầu Dart tự động dò kiểu dữ liệu của nó.
String myVariable1 = "My Text";

int myVariable2 = 1000;
Việc chỉ định một kiểu dữ liệu cụ thể cho biến tại thời điểm khai báo sẽ giúp giảm các sai sót trong quá trình viết code.
Ví dụ: Bạn khai báo một biến kiểu String nhưng lại gán cho nó một giá trị số, trình biên dịch (compiler) sẽ thông báo lỗi cho bạn.
String myVariable1  = 1000; // Error at compile time.
  • Dart Data Types

5. Khai báo biến với từ khoá final

Từ khoá final cũng được sử dụng để khai báo một biến, và bạn chỉ có thể gán giá trị cho biến này nhiều nhất 1 lần. Kiểu dữ liệu của biến này sẽ được Dart xác định tại lần gán đầu tiên.
void main() {
  final myVariable1; // Declare a variable.

  myVariable1 = 2; // Assign a value to it.

  myVariable1 = 3; // ERROR at compile time.

  final myVariable2 = "Some Text"; // Declare and assign value to variable.

  myVariable2 = "New Text"; // ERROR at compile time.
}
Sử dụng từ khoá final giúp bạn ngăn chặn việc vô tình gán một giá trị mới cho một biến khi nó đã có giá trị. Điều này đảm bảo rằng biến này chỉ trỏ tới 1 địa chỉ duy nhất trên bộ nhớ trong suốt thời gian tồn tại của nó.
Một biến được khai báo với từ khoá final. Dữ liệu tại vùng bộ nhớ mà biến này trỏ tới vẫn có thể thay đổi một cách nội bộ.
Ví dụ: Giá trị của một biến là một mảng, các phần tử của mảng vẫn có thể thay đổi.
Variable_final_ex2.dart
void main() {
  final myArray = ["A", "B", "C"];
  print(myArray);
 
  myArray[2] = "E";
  print(myArray);
}
Output:
[A, B, C]
[A, B, E]
  • Dart Switch

6. Khai báo biến với từ khoá const

Từ khoá const được sử dụng để khai báo một biến đặc biệt, còn được gọi là hằng số. Khi khai báo biến với từ khoá const bạn nên gán giá trị cho nó, nếu không giá trị của nó sẽ là null. Sau khi khai báo bạn không thể gán giá trị cho biến này. Vùng dữ liệu mà biến trỏ tới sẽ trở thành bất biến (immutable), nghĩa là nó không thể thay đổi dữ liệu một cách nội bộ.
Variable_const_ex1.dart
void main() {
  const myVariable1 = 100; // Declare and assign value to variable.

  myVariable1 = 2; // ERROR: Can not assign new value.

  const myVariable2; // Declare a variable (Its value is considered null).

  myVariable2 = "Some Text"; // ERROR: Can not assign new value.
}
Một biến được khai báo với từ khoá const. Vùng bộ nhớ mà nó trỏ tới sẽ trở thành bất biến (immutable).
Ví dụ: Giá trị của một biến là một mảng, mảng này sẽ trở thành bất biến (immutable).
Variable_const_ex2.dart
void main() {
  const myArray = ["A", "B", "C"];
  print(myArray);

  myArray[2] = "E"; // ERROR: myArray is immutable.
  print(myArray);
}
Output:
[A, B, C]
: Unsupported operation: indexed setError: Unsupported operation: indexed set
  • Dart Switch