Cheat sheet Dart
Cập nhật lần cuối
Hello World và cấu trúc chương trình
Mọi chương trình Dart đều bắt đầu từ hàm main ở cấp cao nhất.
| Thao tác | Cú pháp |
|---|---|
| Điểm bắt đầu chương trình | void main() { ... } |
| In một dòng | print("Hello, World!"); |
| Nội suy chuỗi | print("Hi $name"); |
| Biểu thức trong nội suy | print("Sum: ${a + b}"); |
| Chú thích | // this is a comment |
| Chú thích nhiều dòng | /* ... */ |
| Import một thư viện | import 'dart:math'; |
| Chạy một tệp | dart run main.dart |
Biến và kiểu dữ liệu
Dart là ngôn ngữ kiểu tĩnh nhưng có thể tự suy ra kiểu khi dùng var.
| Thao tác | Cú pháp |
|---|---|
| Biến tự suy ra kiểu | var age = 30; |
| Khai báo kiểu tường minh | int age = 30; |
| Hằng số lúc biên dịch | const pi = 3.14; |
| Hằng số lúc chạy | final name = getName(); |
| Kiểu cơ bản | int, double, String, bool |
| Kiểu động | dynamic x = 5; |
| Chuyển đổi kiểu | int.parse("42"), n.toString() |
| Kiểm tra kiểu | x is String, x as String |
Null safety
Mặc định các kiểu không nhận null; thêm ? để cho phép null.
| Thao tác | Cú pháp |
|---|---|
| Không nhận null (mặc định) | int count = 0; |
| Kiểu có thể null | String? name; |
| Truy cập an toàn với null | user?.name |
| Toán tử gộp null | name ?? "default" |
| Gán khi đang null | name ??= "default"; |
| Khẳng định khác null | name! |
| Khởi tạo muộn | late String value; |
| Spread an toàn với null | [...?maybeList] |
Chuỗi
Chuỗi dùng được dấu nháy đơn, nháy kép và ba dấu nháy.
| Thao tác | Cú pháp |
|---|---|
| Độ dài | s.length |
| Chữ hoa / chữ thường | s.toUpperCase(), s.toLowerCase() |
| Nội suy | "Total: $price" |
| Nối chuỗi | "foo" + "bar" |
| Kiểm tra có chứa | s.contains("ell") |
| Bắt đầu / kết thúc bằng | s.startsWith("he") |
| Tách chuỗi | "a,b,c".split(",") |
| Thay thế | s.replaceAll("a", "b") |
| Chuỗi con | s.substring(0, 3) |
| Xóa khoảng trắng hai đầu | s.trim() |
Collection (List, Map, Set)
Ba kiểu collection cốt lõi, đều có cú pháp literal.
| Thao tác | Cú pháp |
|---|---|
| Tạo list bằng literal | var nums = [1, 2, 3]; |
| Thêm vào list | nums.add(4); |
| Truy cập / độ dài | nums[0], nums.length |
| Map / where | nums.map((n) => n * 2), nums.where((n) => n > 1) |
| Tạo map bằng literal | var ages = {"Ada": 30}; |
| Truy cập map | ages["Ada"] |
| Tạo set bằng literal | var ids = {1, 2, 3}; |
| Toán tử spread | var all = [...a, ...b]; |
| If / for trong collection | [if (show) 1, for (n in xs) n] |
Luồng điều khiển
Điều kiện đặt trong dấu ngoặc đơn; switch hỗ trợ pattern.
| Thao tác | Cú pháp |
|---|---|
| If / else | if (x > 0) { ... } else { ... } |
| Toán tử ba ngôi | var r = x > 0 ? "pos" : "neg"; |
| Switch | switch (n) { case 1: ...; default: ... } |
| Vòng lặp for | for (var i = 0; i < 10; i++) { ... } |
| Vòng lặp for-in | for (var item in items) { ... } |
| forEach | items.forEach((x) => print(x)); |
| Vòng lặp while | while (x < 100) { ... } |
| Do-while | do { ... } while (x < 100); |
| Break / continue | break;, continue; |
Hàm
Hàm là first-class; cú pháp mũi tên rút gọn các hàm chỉ có một biểu thức.
| Thao tác | Cú pháp |
|---|---|
| Định nghĩa hàm | int add(int a, int b) { return a + b; } |
| Hàm mũi tên | int square(int x) => x * x; |
| Tham số vị trí tùy chọn | void log(String m, [int? code]) { ... } |
| Tham số có tên | void box({int w = 0, int h = 0}) { ... } |
| Tham số có tên bắt buộc | void box({required int w}) { ... } |
| Hàm ẩn danh | var f = (x) => x * 2; |
| Truyền hàm làm đối số | nums.map((n) => n * 2) |
| Typedef | typedef IntOp = int Function(int); |
Lớp và hàm khởi tạo
Lớp chứa trạng thái và hành vi; hàm khởi tạo có nhiều dạng.
| Thao tác | Cú pháp |
|---|---|
| Định nghĩa lớp | class Point { int x; int y; } |
| Hàm khởi tạo | Point(this.x, this.y); |
| Hàm khởi tạo có tên | Point.origin() : x = 0, y = 0; |
| Tạo instance | var p = Point(1, 2); |
| Phương thức | double dist() { ... } |
| Getter | int get area => w * h; |
| Kế thừa | class Circle extends Shape { ... } |
| Gọi lớp cha | super(args) |
| Lớp trừu tượng | abstract class Shape { ... } |
| Triển khai interface | class Dog implements Animal { ... } |
Async (Future / async-await)
Future đại diện cho giá trị sẽ có sau; await tạm dừng cho đến khi future hoàn tất.
| Thao tác | Cú pháp |
|---|---|
| Hàm async | Future<int> load() async { ... } |
| Chờ một future | var data = await load(); |
| Trả về giá trị | return 42; bên trong hàm async |
| Trì hoãn | await Future.delayed(Duration(seconds: 1)); |
| Xử lý lỗi | try { await load(); } catch (e) { ... } |
| Nối chuỗi bằng then | load().then((v) => print(v)); |
| Chạy song song | await Future.wait([a(), b()]); |
| Stream bất đồng bộ | await for (var x in stream) { ... } |
Cú pháp Dart mà bạn cần nhiều nhất, gom trong một trang. Cheat sheet Dart này là bảng tra cứu nhanh cho phần cốt lõi của ngôn ngữ: biến và kiểu dữ liệu, null safety, chuỗi, collection, luồng điều khiển, hàm, lớp, cùng future và async/await mà bạn dùng để viết các ứng dụng Flutter.
Mọi thứ ở đây đều là Dart chuẩn và chạy trên SDK chính thức. Sao chép phần bạn cần, hoặc chạy thử từng đoạn code ngay trong playground Dart, không cần cài đặt gì.
Câu hỏi thường gặp về cheat sheet Dart
Cheat sheet Dart này có miễn phí không?
Có. Cheat sheet Dart này hoàn toàn miễn phí, không cần đăng ký. Lưu trang lại và quay lại bất cứ khi nào bạn cần tra một toán tử null safety, phương thức collection hay mẫu async.
Null safety trong Dart hoạt động thế nào?
int count không bao giờ chứa được null. Để cho phép null, bạn thêm ? (String? name), và trình biên dịch sẽ buộc bạn xử lý trường hợp null. Các toán tử hỗ trợ giúp code gọn: ?. để truy cập an toàn với null, ?? để lấy giá trị dự phòng, và ! để khẳng định giá trị khác null khi bạn chắc chắn. Nhờ vậy lỗi null được phát hiện lúc biên dịch thay vì lúc chạy.Future là gì, async và await hoạt động thế nào?
Future đại diện cho giá trị sẽ có sau, chẳng hạn kết quả của một lời gọi mạng. Đánh dấu hàm là async cho phép bạn dùng await, tạm dừng thực thi cho đến khi future hoàn tất rồi trả về giá trị. Nhờ vậy code bất đồng bộ đọc từ trên xuống dưới như code đồng bộ. Đặt các lệnh await trong try/catch để xử lý lỗi.Có thể luyện tập Dart online không?
Có. Mở playground Dart để chạy bất kỳ đoạn code nào trong cheat sheet này ngay trên trình duyệt, không cần cài SDK. Khi muốn học có lộ trình, khóa học Dart tương tác miễn phí của Coddy đưa bạn đi từng bước từ null safety và collection đến lớp và async/await.
Cheat sheet này có phù hợp cho người mới bắt đầu không?
Có. Nội dung được sắp xếp từ những chủ đề hay dùng nhất (biến, null safety, luồng điều khiển) đến phần nâng cao (lớp, future, async/await), nên bạn có thể dùng các phần đầu ngay từ ngày đầu tiên rồi dần làm chủ phần còn lại.