Dart là một ngôn ngữ lập trình hiện đại do Google phát triển, được thiết kế để xây dựng các ứng dụng hiệu suất cao trên nhiều nền tảng như di động, web và server-side. Với cú pháp dễ tiếp cận, hệ thống kiểu an toàn và khả năng biên dịch linh hoạt, Dart ngày càng trở thành lựa chọn phổ biến, đặc biệt trong hệ sinh thái Flutter. Nếu bạn là người mới bắt đầu, lập trình viên muốn học Flutter hoặc đang tìm kiếm một ngôn ngữ mới để mở rộng kỹ năng, bài viết này sẽ giúp bạn xây dựng lộ trình tự học Dart một cách hiệu quả, từ cơ bản đến nâng cao.
Để tự học Dart, bạn có thể tham khảo lộ trình sau đây:
- Bước 1: Cài đặt môi trường và công cụ phát triển
- Bước 2: Nắm được cấu trúc của ngôn ngữ Dart
- Bước 3: Nắm được các thành phần phổ biến của ngôn ngữ Dart
- Bước 4: Nắm được cách quản lý thư viện
- Bước 5: Bắt đầu bắt tay vào việc xây dựng chương trình đơn giản đầu tiên
Đọc thêm: Dart là gì? Cú pháp, Đặc điểm, Ứng dụng thực tế của Dart
Phần dưới đây sẽ giải thích chi tiết từng bước trong lộ trình:
Bước 1: Hướng dẫn cài đặt môi trường và công cụ phát triển
Trước khi bắt đầu học Dart, bạn cần chuẩn bị một môi trường lập trình phù hợp để có thể viết, chạy và thử nghiệm mã một cách hiệu quả. Ở bước này, bài viết sẽ cung cấp hướng dẫn chi tiết cách cài đặt Dart trên các hệ điều hành phổ biến và cách thiết lập các công cụ lập trình.
Cài đặt Dart SDK trên Windows/macOS/Linux
Dart SDK (Software Development Kit) là bộ công cụ cung cấp trình biên dịch, thư viện và các tiện ích hỗ trợ lập trình với Dart.
Cài đặt Dart trên Windows
Có hai cách chính để cài đặt Dart trên Windows:
Cách 1: Sử dụng trình cài đặt Chocolatey (khuyên dùng)
Chocolatey là một trình quản lý các Packages giúp cài đặt phần mềm dễ dàng.
- Mở Command Prompt (cmd) hoặc PowerShell với quyền Administrator.
- Chạy lệnh sau để cài đặt Dart: choco install dart-sdk
- Kiểm tra cài đặt bằng cách chạy: dart –version
Cách 2: Cài đặt thủ công từ trang chính thức
- Truy cập trang tải xuống Dart: https://dart.dev/get-dart
- Chọn Windows và tải xuống bộ cài đặt .zip.
- Giải nén và thêm đường dẫn Dart vào Environment Variables để có thể sử dụng Dart từ terminal.
- Kiểm tra cài đặt với: dart –version
Cài đặt Dart trên macOS
Cách đơn giản nhất để cài đặt Dart trên macOS là sử dụng Homebrew:
Mở Terminal và chạy lệnh:
brew install dart
Kiểm tra phiên bản:
dart --version
Nếu bạn muốn cài đặt thủ công, có thể tải về Dart SDK từ trang chính thức và thêm nó vào biến môi trường như cách làm trên Windows.
Cài đặt Dart trên Linux
Trên Linux, bạn có thể cài đặt Dart bằng cách sử dụng APT (Debian/Ubuntu) hoặc DNF/YUM (Fedora).
Sử dụng Debian/Ubuntu:
- Thêm kho lưu trữ Dart:
sudo apt update sudo apt install apt-transport-https sudo sh -c 'wget -qO- https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -' sudo sh -c 'wget -qO- https://storage.googleapis.com/download.dartlang.org/linux/debian/dart_stable.list > /etc/apt/sources.list.d/dart_stable.list'
- Cài đặt Dart SDK:
sudo apt update sudo apt install dart
Sử dụng Fedora:
Chạy lệnh sau để cài đặt Dart:
sudo dnf install dart
Sau khi cài đặt, kiểm tra bằng lệnh:
dart --version
Sử dụng Dart với trình biên dịch trực tiếp (DartPad)
DartPad là một công cụ trực tuyến miễn phí do Google cung cấp, giúp bạn chạy code Dart ngay trên trình duyệt mà không cần cài đặt gì.
Cách sử dụng DartPad:
Mở DartPad trên trình duyệt.
Xóa code mẫu và nhập đoạn code Dart đơn giản:
void main() { print('Xin chào, Dart!'); }
Nhấn Run để thực thi code và xem kết quả trong phần Console.
Dưới đây là hình ảnh minh hoạ:
DartPad rất hữu ích để thử nghiệm nhanh các đoạn code nhỏ hoặc học cú pháp cơ bản của Dart mà không cần thiết lập môi trường cài đặt.
Thiết lập VSCode hoặc IntelliJ để lập trình với Dart
Sau khi cài đặt Dart SDK, bạn cần một trình soạn thảo để viết code. Dưới đây là hai IDE phổ biến nhất cho Dart:
Cách thiết lập Dart trên VSCode
VS Code là trình soạn thảo nhẹ, mạnh mẽ và có nhiều tiện ích hỗ trợ Dart.
Cài đặt VS Code:
Tải từ https://code.visualstudio.com.
Cài đặt Dart & Flutter extension:
- Mở VS Code.
- Vào Extensions (Ctrl + Shift + X hoặc Cmd + Shift + X trên macOS).
- Tìm Dart và Flutter, sau đó nhấn Install.
Cấu hình Dart SDK:.
- Vào Code → Settings.
- Tìm dart.sdkPath và đặt đường dẫn đến thư mục cài đặt Dart SDK của bạn.
Sau khi thiết lập xong, bạn có thể bắt đầu viết code Dart trong VS Code.
Cách thiết lập Dart trên IntelliJ IDEA
IntelliJ IDEA (hoặc Android Studio) cũng hỗ trợ lập trình Dart rất tốt.
Tải IntelliJ IDEA từ https://www.jetbrains.com/idea/download.
Cài đặt Plugin Dart:
- Mở IntelliJ IDEA.
- Vào File → Settings → Plugins.
- Tìm Dart và cài đặt plugin.
Cấu hình Dart SDK:
- Vào File → Settings → Languages & Frameworks → Dart.
- Chỉ định đường dẫn đến Dart SDK đã cài đặt.
Sau khi hoàn tất, bạn có thể tạo một project mới và bắt đầu lập trình với Dart. Tiếp theo, chúng ta sẽ tìm hiểu các thành phần, cấu trúc và kiến thức cơ bản trong việc lập trình ứng dụng mobile bằng Dart.
Bước 2: Tìm hiểu về cấu trúc ngôn ngữ lập trình Dart
Trong phần này, chúng ta sẽ đi sâu vào cấu trúc ngôn ngữ Dart, bắt đầu từ những khái niệm cơ bản nhất.
Đọc thêm: Dart tutorial: Các bước đầu tiên làm quen với lập trình Dart
Cú pháp cơ bản
Dart có cú pháp tương tự các ngôn ngữ lập trình phổ biến như JavaScript, Java và C#. Dưới đây là một số đặc điểm cơ bản của cú pháp Dart:
1. Chương trình Dart bắt đầu bằng hàm main():
void main() { print('Chào mừng bạn đến với Dart!'); }
Hàm main() là điểm bắt đầu của chương trình.
2. Khai báo lệnh kết thúc bằng dấu “;” :
int a = 10; double b = 20.5;
3. Dấu ngoặc nhọn {} được sử dụng để bao các khối lệnh:
void sayHello() { print('Xin chào!'); }
4. Comment trong code:
- Dòng đơn: // Đây là một dòng chú thích
- Nhiều dòng:
/* Đây là một đoạn chú thích nhiều dòng */
Biến và Kiểu dữ liệu
Dart hỗ trợ nhiều kiểu dữ liệu khác nhau, giúp lập trình viên dễ dàng làm việc với dữ liệu trong ứng dụng.
1. Kiểu dữ liệu cơ bản
Số nguyên (int): Dùng để lưu trữ số nguyên:
int age = 25;
Số thực (double): Lưu trữ số thực có dấu chấm động:
double pi = 3.1415;
Chuỗi (String): Dùng để lưu trữ văn bản:
String name = "Dart";
Boolean (bool): Chỉ nhận giá trị true hoặc false bool:
isFlutterAwesome = true;
2. Kiểu danh sách (List)
Danh sách là một tập hợp các phần tử có thứ tự.
List<int> numbers = [1, 2, 3, 4, 5]; print(numbers[0]); // 1
3. Kiểu từ điển (Map)
Từ điển lưu trữ các cặp khóa – giá trị.
Map<String, int> scores = { 'Alice': 90, 'Bob': 85 }; print(scores['Alice']); // 90
4. Kiểu động (dynamic, var, late)
dynamic: Biến có thể nhận bất kỳ kiểu dữ liệu nào.
dynamic x = 10; x = "Hello"; // Không báo lỗi
var: Xác định kiểu dựa trên giá trị gán ban đầu.
var y = 20; // y = "String"; // Lỗi biên dịch vì `y` đã được xác định là `int`
late: Chỉ khởi tạo biến khi cần thiết, giúp tối ưu bộ nhớ:
late String message; message = "Xin chào!"; print(message);
Toán tử và Biểu thức
Dart hỗ trợ nhiều loại toán tử giúp xử lý dữ liệu linh hoạt hơn.
1. Toán tử số học:
int a = 10, b = 3; print(a + b); // 13 print(a - b); // 7 print(a * b); // 30 print(a / b); // 3.3333 print(a ~/ b); // 3 (Chia lấy phần nguyên) print(a % b); // 1 (Lấy phần dư)
2. Toán tử so sánh:
Trả về giá trị true hoặc false.
print(5 > 3); // true print(5 < 3); // false print(5 == 5); // true print(5 != 3); // true
3. Toán tử logic:
Dùng để kết hợp các biểu thức điều kiện.
bool x = true, y = false; print(x && y); // false (AND) print(x || y); // true (OR) print(!x); // false (NOT)
4. Toán tử gán:
Gán giá trị cho biến.
int c = 10; c += 5; // c = c + 5 print(c); // 15
5. Toán tử điều kiện (? : và ??)
Dart hỗ trợ toán tử ba ngôi giúp viết code ngắn gọn hơn.
int score = 85; String result = (score >= 50) ? 'Đậu' : 'Rớt'; print(result); // Đậu Toán tử ?? dùng để kiểm tra giá trị null. String? name; print(name ?? 'Không có tên');
Tóm tắt về cấu trúc ngôn ngữ lập trình Dart:
Chủ đề | Mô tả |
Cú pháp cơ bản | Sử dụng main() làm điểm bắt đầu, kết thúc lệnh bằng ;, dùng {} để nhóm khối lệnh, có thể thêm nhận xét với // hoặc /* */. |
Biến & Kiểu dữ liệu | Hỗ trợ nhiều kiểu dữ liệu: int, double, String, bool, List, Map, dynamic, var, late. |
Toán tử | Gồm toán tử số học, so sánh, logic, gán, điều kiện và null. |
Toán tử số học | Các phép toán: +, -, *, /, %. |
Toán tử so sánh | So sánh hai giá trị (==, !=, >, <, >=, <=). |
Toán tử logic | Kết hợp biểu thức điều kiện (&&, ‘!`). |
Toán tử gán | Gán giá trị (=, +=, -=, *=, /=). |
Toán tử điều kiện | Kiểm tra điều kiện (? :). |
Toán tử null (??) | Gán giá trị mặc định nếu biến null. |
Hiểu rõ những khái niệm này sẽ giúp bạn dễ dàng học và áp dụng Dart vào các dự án thực tế, đặc biệt là khi phát triển ứng dụng với Flutter.
Bước 3: Tìm hiểu các thành phần phổ biến trong Dart
Dart hỗ trợ nhiều cấu trúc điều khiển giúp kiểm soát luồng thực thi của chương trình:
Câu lệnh điều kiện
1. if, else if, else:
Dùng để kiểm tra điều kiện và thực thi các khối lệnh tương ứng.
int age = 20; if (age >= 18) { print("Bạn đủ tuổi."); } else { print("Bạn chưa đủ tuổi."); }
2. Switch-case:
Thay thế nhiều điều kiện if-else bằng cách kiểm tra giá trị cụ thể.
String role = "admin"; switch (role) { case "admin": print("Bạn là quản trị viên."); break; case "user": print("Bạn là người dùng."); break; default: print("Không xác định."); }
Vòng lặp for, while, do-while, forEach
- for: Lặp với số lần xác định.
- while: Lặp khi điều kiện đúng.
- do-while: Lặp ít nhất một lần rồi kiểm tra điều kiện.
- forEach: Duyệt qua danh sách.
Ví dụ vòng lặp for:
for (int i = 0; i < 5; i++) { print("Lặp lần thứ $i"); }
Xử lý ngoại lệ với try-catch-finally
Dart hỗ trợ xử lý lỗi với try-catch-finally để ngăn chương trình bị dừng đột ngột:
try { int result = 10 ~/ 0; print(result); } catch (e) { print("Lỗi xảy ra: \$e"); } finally { print("Luôn thực hiện"); }
Hàm và lập trình hướng đối tượng trong Dart
Hàm trong Dart là một khối mã có thể tái sử dụng.
double tinhTong(double a, double b) => a + b;
Định nghĩa hàm tinhTong đầu vào sẽ có 2 tham số là a và b, có kiểu dữ liệu là double và đầu ra (kết quả) sẽ là giá trị tổng sau khi cộng 2 tham số a và b.
Các kiểu tham số trong hàm:
- Vị trí: Truyền tham số theo thứ tự.
- Đặt tên: Truyền tham số theo tên.
- Mặc định: Thiết lập giá trị mặc định.
Lớp và đối tượng
Dart là ngôn ngữ hướng đối tượng, sử dụng lớp và đối tượng.
class Person { String name; int age; Person(this.name, this.age); }
Ví dụ trên định nghĩa một đối tượng có tên là Person (người), có hai giá trị thuộc tính sau là age (tuổi) và name (tên) của đối tượng Person. Về bản chất thì cách khai báo một đối tượng trong Dart cũng tương tự format của các ngôn ngữ khác, điểm khác nhau duy nhất là cú pháp của mỗi ngôn ngữ lập trình mà thôi.
Constructor, getter, setter
- Constructor: Hàm khởi tạo đối tượng.
- Getter/Setter: Truy cập và thay đổi dữ liệu an toàn.
class Car { String _brand; Car(this._brand); String get brand => _brand; set brand(String b) => _brand = b; }
Kế thừa và đa hình
- Kế thừa: Lớp con có thể sử dụng lại thuộc tính và phương thức của lớp cha.
- Đa hình: Cho phép ghi đè phương thức.
class Animal { void makeSound() => print("Âm thanh chung"); } class Dog extends Animal { @override void makeSound() => print("Gâu gâu"); }
Trong DartPad chúng ta có thể tái hiện lại logic đoạn code trên như sau
Abstract class, Interface, Mixins
- Abstract class: Lớp trừu tượng không thể khởi tạo.
- Interface: Xác định bộ quy tắc cần thực hiện.
- Mixins: Cho phép một lớp sử dụng nhiều đặc điểm từ lớp khác.
abstract class Shape { void draw(); } class Circle implements Shape { @override void draw() => print("Vẽ hình tròn"); }
Trong Dart Pad, ta có thể tái hiện lại code như sau
Lập trình bất đồng bộ (Asynchronous Programming)
1. Future và async-await:
Dart hỗ trợ lập trình bất đồng bộ với Future và async-await
Future<String> fetchData() async { await Future.delayed(Duration(seconds: 2)); return "Dữ liệu tải xong"; }
2. Stream và cách sử dụng:
Stream giúp xử lý nhiều dữ liệu theo thời gian.
Stream<int> countStream() async* { for (int i = 0; i < 5; i++) { yield i; } }
Sự khác biệt giữa Future và Stream
- Future: Trả về một giá trị duy nhất sau khi hoàn thành.
- Stream: Cung cấp nhiều giá trị theo thời gian.
Bước 4: Cách quản lý các thư viện và package phổ biến
Quản lý thư viện và package trong Dart là một kỹ năng cốt yếu, giúp tận dụng mã nguồn mở từ cộng đồng thông qua kho lưu trữ chính thức Pub.dev. File pubspec.yaml đóng vai trò trung tâm, nơi bạn khai báo các dependencies cần thiết. Sử dụng lệnh flutter pub get (hoặc dart pub get cho dự án thuần) để tải và kích hoạt các package này, sau đó import chúng vào code của bạn để mở rộng khả năng ứng dụng một cách hiệu quả và tiết kiệm thời gian.
Dưới đây là ví dụ khi bạn muốn cài đặt và sử dụng một thư viện bên thứ 3 như http:
Cách cài đặt như sau:
dependencies: http: ^0.13.4
Ngoài ra còn có 1 vài các thư viện phổ biến khác như:
Ví dụ sử dụng package cơ bản
import 'package:http/http.dart' as http; Future<void> fetchData() async { final response = await http.get(Uri.parse('https://api.example.com')); print(response.body); }
Bước 5: Hướng dẫn bắt đầu với chương Dart đầu tiên
Xây dựng một ứng dụng console đơn giản:
void main() { stdout.write("Nhập tên của bạn: "); String? name = stdin.readLineSync(); stdout.write("Xin chào, $name!"); stdout.write("\n"); }
Bạn có thể tham khảo thêm một vài hướng dẫn cụ thể hơn dưới đây:
- Dart Official Documentation – https://dart.dev: Nguồn chính thức về Dart, bao gồm hướng dẫn chi tiết và API reference
- Flutter & Dart Cookbook – https://pub.dev: Trang quản lý package của Dart, giúp tìm kiếm thư viện hữu ích
- Dart Asynchronous Programming – https://dart.dev/guides/language/language-tour#asynchrony-support: Hướng dẫn chính thức về lập trình bất đồng bộ trong Dart
- Effective Dart – https://dart.dev/guides/language/effective-dart: Các best practices khi lập trình với Dart
Tài nguyên tự học Dart hiệu quả
Các nguồn tài nguyên được liệt kê dưới đây sẽ giúp bạn nghiên cứu và tìm hiểu sâu về ngôn ngữ Dart dễ dàng hơn:
Tài liệu chính thức của Dart
Tài liệu chính thức luôn là nguồn học tập đáng tin cậy nhất, cung cấp kiến thức chuẩn xác và cập nhật liên tục. Khi học Dart, bạn nên bắt đầu từ những tài nguyên sau:
- Dart Documentation dart.dev: Trang chủ Dart với đầy đủ tài liệu, hướng dẫn và API reference.
- Dart Language Tour: Cung cấp cái nhìn tổng quan về cú pháp và tính năng chính của Dart.
- Dart Cookbook: Tổng hợp các bài hướng dẫn về cách giải quyết các vấn đề thường gặp khi lập trình với Dart.
- DartPad (dartpad.dev): Một môi trường trực tuyến để thử nghiệm code Dart mà không cần cài đặt.
Các khóa học miễn phí chất lượng:
Ngoài tài liệu chính thức, bạn có thể học qua các khóa học trực tuyến từ cơ bản đến nâng cao. Dưới đây là một số khóa học miễn phí và chất lượng:
- Dart from Scratch – freeCodeCamp: Trang này chứa một bộ sưu tập các bài viết, hướng dẫn và tài nguyên liên quan đến ngôn ngữ lập trình Dart. FreeCodeCamp là một nền tảng nổi tiếng để học lập trình và phần tin tức của họ thường có nội dung chất lượng cao được tạo ra bởi cộng đồng những nhà phát triển nói chung và lập trình viên mobile sử dụng Dart – Flutter nói riêng.
- Dart Programming for Beginners: Một khóa học do Google hỗ trợ, thích hợp cho người mới.
- Dart Fundamentals – Codecademy: Học thông qua các bài tập thực hành trực tiếp.
Các khóa học trả phí chất lượng
- The Complete Dart Bootcamp – Udemy: Khóa học toàn diện về Dart từ cơ bản đến nâng cao.
- Flutter & Dart – The Complete Guide – Udemy: Kết hợp học Dart và Flutter.
- Dart for Absolute Beginners – Pluralsight: Hệ thống kiến thức chi tiết và có bài tập thực tế.
Cộng đồng hỗ trợ
Việc tham gia các cộng đồng lập trình Dart dưới đây giúp bạn tiếp cận nhanh với kiến thức mới, học hỏi từ những người đi trước và nhận trợ giúp khi gặp vấn đề:
- Dart Discord: Cộng đồng chính thức của Dart, nơi bạn có thể hỏi đáp và giao lưu với các lập trình viên khác.
- Stack Overflow: Hàng nghìn câu hỏi và câu trả lời về Dart từ các lập trình viên trên toàn thế giới.
- Reddit r/dartlang: Nơi thảo luận về Dart và các ứng dụng thực tế.
Lời khuyên để tự học Dart hiệu quả
Học Dart không khó, nhưng để đạt hiệu quả cao, bạn nên áp dụng một số phương pháp sau:
- Học đi đôi với thực hành: Đừng chỉ đọc lý thuyết, hãy viết code liên tục trên DartPad hoặc VS Code.
- Xây dựng dự án nhỏ: Hãy thử xây dựng một ứng dụng console đơn giản hoặc một ứng dụng Flutter nhỏ để áp dụng những gì bạn học.
- Tham gia thử thách lập trình: Các nền tảng như LeetCode, CodeSignal có nhiều bài tập giúp rèn luyện tư duy lập trình với Dart.
- Ghi chú và tóm tắt: Tự tổng hợp lại kiến thức giúp bạn nhớ lâu hơn và có thể dễ dàng ôn tập lại.
- Thường xuyên cập nhật kiến thức: Dart không ngừng phát triển, vì vậy hãy theo dõi blog của Dart (medium.com/dartlang) để cập nhật các tính năng mới.
Với lộ trình trên, bạn có thể tự học Dart một cách bài bản và hiệu quả. Hãy kiên trì luyện tập, tham gia cộng đồng và liên tục thử nghiệm với các dự án thực tế để nhanh chóng làm chủ ngôn ngữ này!
Các câu hỏi thường gặp về lộ trình học Dart
Cần có kiến thức nền tảng gì trước khi học Dart?
- Nếu bạn đã biết lập trình (Java, JavaScript, Python, C++), bạn có thể học Dart nhanh hơn.
- Nếu bạn chưa có kinh nghiệm lập trình, nên bắt đầu với các khái niệm cơ bản như biến, kiểu dữ liệu, vòng lặp, hàm, và lập trình hướng đối tượng.
Tôi nên học Dart trong bao lâu trước khi chuyển sang Flutter?
Khoảng 1-2 tuần nếu bạn đã biết lập trình. Nếu mới bắt đầu, có thể mất 1-2 tháng để nắm vững Dart trước khi học Flutter.
Dart có thể dùng để lập trình backend không?
Có! Bạn có thể dùng Dart với framework Shelf hoặc Dart Frog để xây dựng backend.
Sự khác biệt giữa Dart và JavaScript là gì?
Tiêu chí | Dart | Javascript |
Kiểu dữ liệu | Có kiểu tĩnh, nhưng linh hoạt | Kiểu động |
Biên dịch | AOT & JIT, chạy nhanh hơn | Chạy trên trình duyệt, thông dịch |
Ứng dụng | Flutter, Web, Backend | Web, Server, Mobile (React Native) |
Tổng kết
Dart là một ngôn ngữ lập trình mạnh mẽ và dễ tiếp cận, đặc biệt quan trọng nếu bạn muốn phát triển ứng dụng đa nền tảng với Flutter. Lộ trình tự học Dart nên bắt đầu từ những kiến thức cơ bản như cú pháp, kiểu dữ liệu, vòng lặp, và lập trình hướng đối tượng, sau đó tiếp tục với lập trình bất đồng bộ và thực hành với các dự án nhỏ.
Việc nắm vững Dart không chỉ giúp bạn làm chủ Flutter mà còn mở ra nhiều cơ hội phát triển ứng dụng web, backend và desktop. Hãy kiên trì thực hành, tận dụng các tài nguyên học tập trực tuyến và tham gia cộng đồng để nâng cao kỹ năng. Chúc bạn thành công trên hành trình chinh phục Dart!