Chương trình Dart đơn giản

Đây là một chương trình Dart đơn giản, lưu nó thành file basic.dart, đặt nó trong một thư mục dự án mới là theo hướng dẫn ở phần Cài đặt SDK Dart để tạo launch.json trong VS Code, rồi nhấn Ctrl + F5 chạy thử

import 'dart:math'; //Nạp thư viện

///Hàm tính tổng sumint
///
///Tính tổng 2 số nguyên
///trả về tổng 2 số nguyên ...
sumInt(int a, int b) {
  return a + b;
}

/**
 * Hàm main là điểm mồi ứng dụng bắt đầu chạy từ
 * hàm này
 */
main(List<String> args) {
  var tong;               //Khai báo một biến
  var a = 10;             //Khai báo và khởi tạo biến luôn

  tong = sumInt(a, 20);   //Gọi hàm sumInt
  print('Tổng là: $tong');

  var sqrtvalue = sqrt(tong);
  print('Căn bậc 2 của $tong là $sqrtvalue');

}

Kết quả chạy chương trình

ket qua

Từ đoạn mã trên, lưu ý một số vấn đề cơ bản nhất sau đây.

Hàm main

Một ứng dụng Dart bắt đầu chạy từ hàm main, hàm này bắt buộc phải có, nó có thể có tham số như khai báo ở trên. Nếu ứng dụng không nhận tham số ở main thì có thể chỉ cần khai báo

main() {
    // ...
}

Dart có phân biệt chữ hoa/thường nên khi đặt tên cho các thành phần hàm, biến ... cần lưu ý. Hàm main() và hàm maIn() là khác nhau.

Câu lệnh, Khối lệnh

Các lệnh trong Dart được viết mà các thành phần không bị ảnh hưởng bởi khoảng trắng, kết thúc một câu lệnh là dấu ;

//Câu lệnh
return a + b;

//Viết lại như sau là tương đương
return
        a
            +
    b;

Một nhóm các lệnh nhóm lại với nhau được gọi là một khối lệnh, trong Dart nó sử dụng cặp dấu {} để tạo khối. Khối lệnh có thể lồng nhau.

if (a > 1) {
    //Khối lệnh 1
}
else {
    //Khối lệnh 2
}

COMMENT - Chú thích code

Các chú thích đưa vào trong code thì không ảnh hưởng gì đến code, mục đích nó là mô tả để đọc lại dễ hiểu, có 2 loại chú thích

Chú thích 1 dòng các chữ phía sau ký hiệu // không ảnh hưởng gì tới code

// Đây là chú thích trên 1 dòng

Chú thích nhiều dòng dòng các dòng chữ nằm giữa ký hiệu /**/ không ảnh hưởng gì tới code

/*
    Đây
    là chú thích
    nhiều dòng
*/

Chú thích Documentation là dòng chữ phía sau ký hiệu ///, nó tương tự như chú thích 1 dòng, nhưng nội dung viết trong nó viết theo một quy tắc nhất định để tham khảo tới hàm, biến, lớp ... (tìm hiểu sau), nó giống PHPDoc trong PHP. Mục đích là để sinh ra tài liệu. Ví dụ nó phát sinh ra tài liệu tham khảo, để người khác đọc tài liệu này biết sử dụng lại logic của code.

Khai báo biến với var

Các biến để lưu giữ các đối tượng, với Dart nó cho phép khai báo biến mà không cần chỉ rõ biến đó thuộc kiểu dữ liệu gì bằng từ khóa var, sau này kiểu dữ liệu của biến phụ thuộc vào đối tượng gán vào biến.

var tenbien;

Chuỗi cụ thể

Một chuỗi là tập hợp các ký tự, ở ví dụ trên lệnh print() nhận tham số là một chuỗi cụ thể và in nó ra. Để tạo ra chuỗi này trong code thì bạn viết chuỗi chữ đó ra trong cặp dấu nháy đơn '' hoặc kép ""

print('Đây là một chuỗi');
print("Đây cũng là một chuỗi");

Bạn có thể đưa một giá trị trong biến vào chuỗi bằng ký hiệu $tên_biến, hoặc chèn cả biểu thức vào chuỗi cụ thể ${biểu_thức}

var a = 4;
var y = 6;

print("Giá trị a là $a");  // => 'Giá trị a là 4'
print("Tổng là ${a + b}"); // => "Tổng là 10"

Nạp thư viên

Dart cũng tổ chức code thành các thư viện, có những thư viện xây dựng sẵn như thư viện toán dart:math ... , cần dùng thư viện nào thì nạp nó vào bằng lệnh import. Bạn cũng sẽ tự xây dựng các thư viện cho mình và nạp vào bằng cách này, kể cả nạp một file .dart cũng dùng import.

import 'dart:math'; //Nạp thư viện toán

//Do có nạp math, mà giờ đây có hàm tính căn bậc 2 sqrt
print(sqrt(9));

Trở lại dự án trên của bạn, giờ bạn tạo ra một file khác đặt tên là banner.dart

Nội dung file có định nghĩa hàm banner()

void banner() {
  print("========================================================");
}

Sau đó trở lại basic.dart, nạp file này vào bằng lệnh import 'banner.dart';, vậy là trong basic.dart gọi được hàm banner();

import 'dart:math';
import 'banner.dart';

///Hàm tính tổng sumint
///
///Tính tổng 2 số nguyên
///trả về tổng 2 số nguyên ...

sumInt(int a, int b) {
  return a + b;
}

/**
 * Hàm main là điểm mồi ứng dụng bắt đầu chạy từ
 * hàm này
 */
main() {
  banner();
  var tong;               //Khai báo một biến
  var a = 10;             //Khai báo và khởi tạo biến luôn

  tong = sumInt(a, 20);   //Gọi hàm sumInt
  print ('Tổng là: $tong');

  var sqrtvalue = sqrt(tong);
  print('Căn bậc 2 của $tong là $sqrtvalue');
  banner();

}

//Kêt quả chạy thử:
========================================================
Tổng là: 30
Căn bậc 2 của 30 là 5.477225575051661
========================================================

Khái niệm cơ bản

Một số thông tin, khái niệm cần biết trước khi đi sau vào ngôn ngữ Dart

  • Mọi thứ lưu trong biến đều là đối tượng (kể cả số, kể cả null), mọi đối tượng đều sinh ra từ định nghĩa lớp, mọi lớp đều kế thừa từ lớp cơ sở có tên Object (Giống C#)
  • Khi biến có chấp nhận mọi kiểu thì sử dụng từ khóa dynamic
  • Dart hỗ trợ định nghĩa kiểu generic (giống C#)
  • Dart cho phép định nghĩa hàm trong hàm (lồng nhau)
  • Dart không có từ khóa public, private, protected khi khai báo phương thức, thuộc tính lớp. Nếu thuộc tính, tên lớp bắt đầu bằng _ thì hiểu đó là private
  • Các định danh (tên biến, tên hàm, tên lớp ...) bắt đầu bằng chữ(a-zA-Z) hoặc _, theo sau là chuỗi chữ có thể kế hợp với số

Quy tắc trình bày code

Những quy tắc này không bắt buộc bạn phải tuân theo, nhưng nếu áp dụng code sẽ trở nên sáng sủa, dễ đọc và thống nhất.

  • Nên đặt tên kiểu UpperCamelCase cho lớp, enums, tham số(chữ đầu của từ là chữ in: HttpRequest )
  • Tên file, thư viện viết chữ thường, các từ nối với nhau bởi _: abc_xyz.dart
  • Biến, hằng, object đặt tên kiểu lowerCamelCase, chữ đầu các từ viết IN, trừ từ đầu tiên (defaultTimeout)
  • Cố gắng viết tắt khi tên trên 2 từ, lấy ký đầu viết IN để tạo chữ viết tắt (IOStream ~ InputOutputStream)

Đăng ký nhận bài viết mới