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.
💡 Khái niệm
Phần tiêu đề “💡 Khái niệm”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; // Integerdouble height = 1.75; // Số thựcString name = "Dart"; // Chuỗibool isActive = true; // Boolean📝 Các kiểu dữ liệu cơ bản
Phần tiêu đề “📝 Các kiểu dữ liệu cơ bản”| 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} |
🔢 Type Inference với var
Phần tiêu đề “🔢 Type Inference với var”var name = "Dart"; // Suy luận: Stringvar age = 25; // Suy luận: intvar 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 intdynamic - Kiểu động
Phần tiêu đề “dynamic - Kiểu động”dynamic value = 42;value = "Hello"; // OK - có thể đổi kiểuvalue = true; // OK
// Nhưng không có type checking![!WARNING] Tránh dùng
dynamickhi có thể. Nó bỏ qua type safety và có thể gây runtime errors.
🔍 Kiểm tra và chuyển đổi kiểu
Phần tiêu đề “🔍 Kiểm tra và chuyển đổi kiểu”var value = 42;
// Kiểm tra kiểuprint(value is int); // trueprint(value is String); // false
// Runtime typeprint(value.runtimeType); // int🎯 Object - Gốc của mọi kiểu
Phần tiêu đề “🎯 Object - Gốc của mọi kiểu”Object obj = 42; // OKobj = "Hello"; // OKobj = [1, 2, 3]; // OK
// Object nullableObject? nullable = null; // OK🛠️ Thực hành
Phần tiêu đề “🛠️ Thực hành”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>}📱 Trong Flutter
Phần tiêu đề “📱 Trong Flutter”// Widget propertiesText( "Hello", style: TextStyle( fontSize: 16.0, // double fontWeight: FontWeight.bold, // enum color: Colors.blue, // Color ),)
// Stateclass CounterState { int count = 0; // int bool isLoading = false; // bool String? error; // nullable String List<Item> items = []; // typed List}✅ Checklist
Phần tiêu đề “✅ Checklist”- Hiểu các kiểu cơ bản:
int,double,String,bool - Sử dụng
varvới type inference - Phân biệt
var,dynamic,Object - Kiểm tra kiểu với
isvàruntimeType
Tiếp theo: Biến - var, final, const