Tài liệu

Tổng quan về Dart

Huy Erick

Dart là một ngôn ngữ được tối ưu hóa cho việc phát triển ứng dụng nhanh trên bất kỳ nền tảng nào. Mục tiêu của Dart là cung cấp ngôn ngữ lập trình hiệu quả...

Dart là một ngôn ngữ được tối ưu hóa cho việc phát triển ứng dụng nhanh trên bất kỳ nền tảng nào. Mục tiêu của Dart là cung cấp ngôn ngữ lập trình hiệu quả nhất cho phát triển đa nền tảng, kết hợp với một nền tảng thực thi linh hoạt cho các framework ứng dụng.

Ngôn ngữ được xác định bởi khả năng và sức mạnh của nó trong quá trình phát triển. Dart được thiết kế cho một khung bản kỹ thuật đặc biệt phù hợp cho phát triển trên máy khách, ưu tiên cả việc phát triển (tái tải nhanh trạng thái trong vòng dưới một giây) và trải nghiệm sản xuất chất lượng cao trên nhiều mục tiêu biên dịch khác nhau (web, di động và máy tính để bàn).

Dart cũng là nền tảng cơ sở của Flutter. Dart cung cấp ngôn ngữ và thực thi để làm việc với các ứng dụng Flutter, nhưng Dart cũng hỗ trợ nhiều nhiệm vụ lập trình chính như định dạng, phân tích và kiểm tra mã.

Ngôn ngữ Dart là an toàn với kiểu dữ liệu; nó sử dụng kiểm tra kiểu tĩnh để đảm bảo giá trị của biến luôn phù hợp với kiểu tĩnh của biến. Đôi khi, điều này được gọi là kiểu âm thanh. Mặc dù kiểu được yêu cầu, chú thích kiểu là tùy chọn do khả năng suy luận kiểu. Hệ thống kiểu Dart cũng linh hoạt, cho phép sử dụng kiểu động kết hợp với kiểm tra thời gian chạy, điều này có thể hữu ích trong quá trình thử nghiệm hoặc đối với mã cần phải rất động.

Dart có hỗ trợ tính năng null safety tích hợp sẵn. Điều này có nghĩa là giá trị không thể là null, trừ khi bạn cho phép nó có thể là null. Với null safety, Dart có thể bảo vệ bạn khỏi lỗi null trong quá trình chạy thông qua phân tích mã tĩnh. Khác với nhiều ngôn ngữ khác hỗ trợ null safety, khi Dart xác định biến không thể là null, biến đó sẽ không bao giờ có thể là null. Nếu bạn kiểm tra mã chạy trong bộ gỡ lỗi, bạn sẽ thấy tính không thể là null được giữ nguyên trong thời gian chạy; do đó, null safety đảm bảo tính an toàn về null.

Đoạn mã sau đây cho thấy một số tính năng ngôn ngữ Dart, bao gồm thư viện, cuộc gọi không đồng bộ, kiểu có thể null và không thể null, cú pháp mũi tên, bộ sinh, luồng và getter. Để tìm hiểu thêm về ngôn ngữ này, hãy xem hướng dẫn ngôn ngữ Dart.

import 'dart:math' show Random;  void main() async {   print('Compute π using the Monte Carlo method.');   await for (final estimate in computePi().take(100)) {     print('π ≅ $estimate');   } }  /// Generates a stream of increasingly accurate estimates of π. Stream computePi({int batch = 100000}) async* {   var total = 0; // Inferred to be of type int   var count = 0;   while (true) {     final points = generateRandom().take(batch);     final inside = points.where((p) => p.isInsideUnitCircle);     total += batch;     count += inside.length;     final ratio = count / total;     yield ratio * 4;   } }  Iterable generateRandom([int? seed]) sync* {   final random = Random(seed);   while (true) {     yield Point(random.nextDouble(), random.nextDouble());   } }  class Point {   final double x;   final double y;    const Point(this.x, this.y);    bool get isInsideUnitCircle => x * x + y * y = 1; }

Dart có một bộ thư viện cốt lõi phong phú, cung cấp các tính năng cần thiết cho nhiều tác vụ lập trình hàng ngày:

  • Các kiểu dữ liệu, bộ sưu tập và các chức năng cốt lõi khác cho mọi chương trình Dart (dart:core)
  • Các loại bộ sưu tập phong phú như hàng đợi, danh sách liên kết, bản đồ hash và cây nhị phân (dart:collection)
  • Các bộ mã hóa và giải mã để chuyển đổi giữa các biểu diễn dữ liệu khác nhau, bao gồm JSON và UTF-8 (dart:convert)
  • Hằng số và hàm toán học, và việc tạo số ngẫu nhiên (dart:math)
  • Hỗ trợ cho lập trình không đồng bộ, với các lớp như Future và Stream (dart:async)
  • Danh sách xử lý hiệu quả dữ liệu có kích thước cố định (ví dụ như số nguyên 8-byte không dấu) và kiểu số học SIMD (dart:typed_data)
  • Hỗ trợ cho I/O tệp, socket, HTTP và các ứng dụng I/O khác cho các ứng dụng không phải web (dart:io)
  • Giao diện chức năng ngoại vi dành cho sự tương tác với mã khác có giao diện kiểu C (dart:ffi)
  • Lập trình đồng thời bằng cách sử dụng các đơn vị cách biệt - các công nhân độc lập tương tự như luồng nhưng không chia sẻ bộ nhớ, chỉ giao tiếp thông qua các tin nhắn (dart:isolate)
  • Các phần tử HTML và các tài nguyên khác cho các ứng dụng dựa trên web cần tương tác với trình duyệt và Mô hình Đối tượng Tài liệu (DOM) (dart:html)

Ngoài các thư viện cốt lõi, có nhiều API được cung cấp thông qua một bộ các gói đầy đủ. Nhóm Dart cung cấp nhiều gói bổ trợ hữu ích, chẳng hạn như: characters, intl, http, crypto, markdown.

Ngoài ra, nhà xuất bản bên thứ ba và cộng đồng rộng lớn cũng đăng tải hàng ngàn gói phụ trợ, hỗ trợ các tính năng như: XML, tích hợp Windows, SQLite, nén.

Để xem chuỗi ví dụ làm việc với các thư viện cốt lõi Dart, hãy đọc tài liệu thư viện cốt lõi.

Công nghệ biên dịch Dart cho phép bạn chạy mã theo nhiều cách khác nhau:

  • Nền tảng cục bộ: Đối với các ứng dụng nhắm mục tiêu các thiết bị di động và máy tính để bàn, Dart bao gồm cả Dart VM với việc biên dịch trong lúc chạy (JIT) và trình biên dịch trước khi chạy (AOT) để tạo mã máy.
  • Nền tảng web: Đối với các ứng dụng nhắm mục tiêu web, Dart có thể biên dịch cho mục đích phát triển hoặc sản xuất. Trình biên dịch web của nó chuyển đổi Dart thành JavaScript.

Flutter framework là một toolkit UI đa nền tảng phổ biến được cung cấp bởi nền tảng Dart, cung cấp công cụ và thư viện UI để xây dựng trải nghiệm UI chạy trên iOS, Android, macOS, Windows, Linux và web.

Trong quá trình phát triển, chu kỳ phát triển nhanh của nhà phát triển là quan trọng để lặp lại. Dart VM cung cấp trình biên dịch trong lúc chạy (JIT) với tái biên dịch tăng dần (cho phép tải lại nhanh), thu thập số liệu trực tiếp (cung cấp cho DevTools) và hỗ trợ gỡ lỗi phong phú.

Khi ứng dụng sẵn sàng để triển khai vào sản xuất, dù bạn đăng xuất vào cửa hàng ứng dụng hoặc triển khai vào backend sản xuất, trình biên dịch trước khi chạy (AOT) của Dart có thể biên dịch thành mã máy ARM hoặc x64. Ứng dụng được biên dịch AOT sẽ khởi động với thời gian khởi động ngắn và ổn định.

Mã đã được biên dịch AOT chạy trong một runtime Dart hiệu quả, đảm bảo hệ thống kiểu Dart âm thanh và quản lý bộ nhớ bằng cách cấp phát đối tượng nhanh chóng và bộ thu gom rác theo thế hệ.

Thêm thông tin:

  • Bắt đầu: Ứng dụng dòng lệnh và máy chủ
  • Công cụ dart để chạy với JIT hoặc AOT biên dịch thành mã máy
  • Viết ứng dụng dòng lệnh
  • Viết máy chủ HTTP
1