20/07/2019, 09:55

Tìm hiểu về ngôn ngữ Dart - Phần IV

Bài này chúng ta sẽ cùng tìm hiểu về hàm trong Dart Hàm Dart là một ngôn ngữ hướng đối tượng thực sự, vì vậy ngay cả các hàm cũng là các đối tượng và có kiểu Function. Điều này có nghĩa là các hàm có thể được gán cho các biến hoặc được truyền dưới dạng đối số cho các hàm khác. Bạn cũng có thể ...

Bài này chúng ta sẽ cùng tìm hiểu về hàm trong Dart

Hàm

Dart là một ngôn ngữ hướng đối tượng thực sự, vì vậy ngay cả các hàm cũng là các đối tượng và có kiểu Function. Điều này có nghĩa là các hàm có thể được gán cho các biến hoặc được truyền dưới dạng đối số cho các hàm khác. Bạn cũng có thể gọi một thể hiện của lớp Dart như thể nó là một hàm. Để biết chi tiết, xem các lớp Callable .

Đây là một ví dụ về việc thực hiện một hàm:

bool isNoble(int atomicNumber) {
  return _nobleGases[atomicNumber] != null;
}

Mặc dù Dart khuyến nghị nên có chú thích kiểu cho các API, hàm vẫn hoạt động nếu bạn bỏ qua các type:

isNoble(atomicNumber) {
  return _nobleGases[atomicNumber] != null;
}

Đối với các hàm chỉ chứa một biểu thức, bạn có thể sử dụng cú pháp tốc ký:

bool isNoble(int atomicNumber) => _nobleGases[atomicNumber] != null;

Cú pháp => expr là một tốc ký cho { return expr ; }. Ký hiệu => đôi khi được gọi là cú pháp mũi tên .

Một hàm có thể có hai loại tham số: bắt buộc và tùy chọn. Các tham số bắt buộc được liệt kê đầu tiên, theo sau là bất kỳ tham số tùy chọn nào. Các tham số tùy chọn được đặt tên cũng có thể được đánh dấu là @required . Xem phần tiếp theo để biết chi tiết.

Tham số tùy chọn

Các tham số tùy chọn có thể đặt theo vị trí hoặc được đặt tên, nhưng không thể là cả hai.

Các tham số tùy chọn được đặt tên Khi gọi một hàm, bạn có thể chỉ định các tham số được đặt tên bằng paramName : value . Ví dụ:

enableFlags(bold: true, hidden: false);

Khi định nghĩa hàm, sử dụng { param1 , param2 , …} để chỉ định tham số đã đặt tên:

/// Sets the [bold] and [hidden] flags ...
void enableFlags({bool bold, bool hidden}) {...}

Các biểu thức tạo đối tượng Flutter có thể trở lên phức tạp, vì vậy các hàm tạo widget chỉ sử dụng các tham số có tên riêng. Điều này làm cho các biểu thức tạo instance dễ đọc hơn.

Bạn có thể chú thích một tham số đã đặt tên trong bất kỳ mã Dart nào (không chỉ Flutter) với @required để chỉ ra rằng đó là tham số bắt buộc . Ví dụ:

const Scrollbar({Key key, @required Widget child})

Khi Scrollbar được xây dựng, bộ phân tích báo cáo sự cố khi không có đối số child .

Required được xác định trong gói meta . Hoặc là import package:meta/meta.dart trực tiếp hoặc import gói khác có meta , chẳng hạn như package:flutter/material.dart.

Tham số tùy chọn theo vị trí Gói một bộ tham số trong [] đánh dấu chúng là tham số vị trí tùy chọn:

String say(String from, String msg, [String device]) {
  var result = '$from says $msg';
  if (device != null) {
    result = '$result with a $device';
  }
  return result;
}

Đây là một ví dụ về cách gọi hàm này mà không có tham số tùy chọn:

assert(say('Bob', 'Howdy') == 'Bob says Howdy');

Và đây là một ví dụ về cách gọi hàm này với tham số thứ ba:

assert(say('Bob', 'Howdy', 'smoke signal') ==
    'Bob says Howdy with a smoke signal');

Giá trị tham số mặc định Hàm của bạn có thể sử dụng = để xác định các giá trị mặc định cho cả tham số được đặt tên và vị trí. Các giá trị mặc định phải là hằng số thời gian biên dịch. Nếu không có giá trị mặc định được cung cấp, giá trị mặc định là null .

Dưới đây là ví dụ về cài đặt giá trị mặc định cho các tham số được đặt tên:

/// Sets the [bold] and [hidden] flags ...
void enableFlags({bool bold = false, bool hidden = false}) {...}

// bold will be true; hidden will be false.
enableFlags(bold: true);

Ghi chú: Mã cũ có thể sử dụng dấu hai chấm (            </div>
            
            <div class=

0