Bỏ qua để đến nội dung

Giá trị (Values) và Kiểu dữ liệu (Data Types)

🎯 Mục tiêu: Hiểu hệ thống kiểu dữ liệu của Dart - strongly typed với sound null safety.


Dart là ngôn ngữ strongly typed - mỗi biến có kiểu xác định tại compile-time. Dart hỗ trợ sound null safety từ Dart 2.12.

int age = 25; // Integer
double height = 1.75; // Số thực
String name = "Dart"; // Chuỗi
bool isActive = true; // Boolean

Kiểu Mô tả Ví dụ
int Số nguyên 42, -5, 0
double Số thực 3.14, -0.5
num Số (int hoặc double) 42 hoặc 3.14
String Chuỗi ký tự "Hello", 'Dart'
bool Boolean true, false
List Danh sách [1, 2, 3]
Map Key-value pairs {"key": "value"}
Set Tập không trùng {1, 2, 3}

var name = "Dart"; // Suy luận: String
var age = 25; // Suy luận: int
var price = 99.99; // Suy luận: double
// Không thể đổi kiểu sau khi gán
// name = 123; // Error! String không thể gán int
dynamic value = 42;
value = "Hello"; // OK - có thể đổi kiểu
value = true; // OK
// Nhưng không có type checking!

[!WARNING] Tránh dùng dynamic khi có thể. Nó bỏ qua type safety và có thể gây runtime errors.


var value = 42;
// Kiểm tra kiểu
print(value is int); // true
print(value is String); // false
// Runtime type
print(value.runtimeType); // int

Object obj = 42; // OK
obj = "Hello"; // OK
obj = [1, 2, 3]; // OK
// Object nullable
Object? nullable = null; // OK

Bài tập 1: Xác định kiểu dữ liệu

void main() {
var a = 100;
var b = 3.14;
var c = "Dart";
var d = true;
var e = [1, 2, 3];
// TODO: In ra runtimeType của mỗi biến
}

Lời giải:

void main() {
var a = 100;
var b = 3.14;
var c = "Dart";
var d = true;
var e = [1, 2, 3];
print("a: ${a.runtimeType}"); // int
print("b: ${b.runtimeType}"); // double
print("c: ${c.runtimeType}"); // String
print("d: ${d.runtimeType}"); // bool
print("e: ${e.runtimeType}"); // List<int>
}

// Widget properties
Text(
"Hello",
style: TextStyle(
fontSize: 16.0, // double
fontWeight: FontWeight.bold, // enum
color: Colors.blue, // Color
),
)
// State
class CounterState {
int count = 0; // int
bool isLoading = false; // bool
String? error; // nullable String
List<Item> items = []; // typed List
}

  • Hiểu các kiểu cơ bản: int, double, String, bool
  • Sử dụng var với type inference
  • Phân biệt var, dynamic, Object
  • Kiểm tra kiểu với isruntimeType

Tiếp theo: Biến - var, final, const