Trong Dart, final và const đều là các từ khóa được sử dụng để khai báo biến không thay đổi (immutable), nhưng chúng có những điểm giống, khác nhau quan trọng:
final:
- Biến được gán giá trị sau khi khai báo và sau đó không thể thay đổi giá trị đó.
- Giá trị của biến
finalcó thể được tính toán trong runtime. - Không yêu cầu biến
finalphải được khởi tạo ngay khi khai báo. - Có thể khởi tạo biến
finaltrong constructor của một lớp.
Ví dụ vềfinal:
void main() {
final int x;
x = 5; // Có thể gán giá trị sau khi khai báo
print(x); // In ra 5
}
const:
- Biến được gán giá trị khi khai báo và giá trị đó phải là một giá trị hằng (constant) đã biết trong compile time.
- Không thể thay đổi giá trị của biến
constsau khi đã khai báo. - Có thể được sử dụng để tạo các giá trị hằng số, ví dụ như các giá trị literal (
Number,String,boolean, …).
Ví dụ về const:
void main() {
const int y = 10; // Biến y là một giá trị hằng số
// y = 20; // Lỗi: Không thể thay đổi giá trị của biến const
print(y); // In ra 10
}
Giống nhau:
Cả final và const đều tạo ra biến không thay đổi, có nghĩa rằng bạn không thể thay đổi giá trị của chúng sau khi chúng đã được gán.
Khác nhau:
1. Thời điểm gán giá trị:
final: Biếnfinalcó thể được gán giá trị sau khi nó được khai báo, và giá trị có thể tính toán khi chạy.const: Biếnconstphải được gán giá trị tại thời điểm khai báo và giá trị này phải là một hằng số biết trước khi chạy (compile-time constant).
Ví dụ:
final int x = 10; // Gán giá trị cho biến final sau khi khai báo
const int y = 20; // Khai báo và gán giá trị cho biến const cùng lúc
2. Môi trường gán giá trị:
final: Giá trị của biếnfinalcó thể thay đổi tùy theo logic của chương trình, và bạn có thể gán giá trị sau khi khai báo.const: Giá trị của biếnconstphải là một hằng số biết trước khi chạy, nghĩa là bạn không thể tính toán giá trị của nó dựa trên logic chương trình.
Ví dụ:
final int z = someFunction(); // Hợp lệ, giá trị được tính toán khi gán
const int w = someFunction(); // Không hợp lệ, giá trị không biết trước khi chạy
3. Sử dụng trong class và constructor:
final: Bạn có thể sử dụngfinaltrongclassvàconstructorđể tạo ra các biến không thay đổi.const:constchỉ có thể được sử dụng trongclassvàconstructornếu nó tham chiếu đến các biếnconsthoặc các giá trị được xem là hằng số biết trước khi chạy.
Ví dụ:
class MyClass {
final int x;
const MyClass(this.x);
}
4. Sử dụng trong danh sách và map:
constđược sử dụng để tạoListvàmaphằng số biết trước khi chạy.
Ví dụ:
const List<int> myList = [1, 2, 3];
const Map<String, int> myMap = {'one': 1, 'two': 2};

Bình luận