Cú pháp hàm
// Hàm kiểm tra nguyên tố khí hiếm
bool kiemTraKhongKhíQuý(int soNguyênTử) {
return bangKhongKhíQuý[soNguyênTử] != null;
}
// Có thể bỏ qua kiểu trả về (không khuyến khích)
kiemTraKhongKhíQuý(soNguyênTử) {
return bangKhongKhíQuý[soNguyênTử] != null;
}
// Hàm chỉ có 1 biểu thức có thể dùng cú pháp ngắn gọn
// => expr tương đương { return expr; }
bool kiemTraKhongKhíQuý(int soNguyênTử)
=> bangKhongKhíQuý[soNguyênTử] != null;
Tham số bắt buộc và tùy chọn
Tham số bắt buộc đặt trước, tham số tùy chọn có thể là tham số có tên hoặc vị trí
// Gọi hàm với tham số có tên
batTatTuongSo(bật: true, ẩn: false);
// Định nghĩa tham số có tên {thamSố1, thamSố2, ...}
/// Thiết lập các cờ [bật] và [ẩn]...
void batTatTuongSo({bool bật, bool ẩn}) {...}
// Tham số tùy chọn có thể đánh dấu bắt buộc
import package:meta/meta.dart
const ThanhCuộn({Key khóa, @required Widget con})
// Tham số vị trí
String nói(String từ, String tin, [String thiếtBị]) {
var kếtQuả = '$từ nói $tin';
if (thiếtBị != null) {
kếtQuả = '$kếtQuả bằng $thiếtBị';
}
return kếtQuả;
}
// Gọi hàm với tham số vị trí
assert(nói('Bob', 'Chào') == 'Bob nói Chào');
assert(nói('Bob', 'Chào', 'tín hiệu khói') ==
'Bob nói Chào bằng tín hiệu khói');
// Giá trị mặc định
void batTatTuongSo({bool bật = false, bool ẩn = false}) {...}
// bật = true; ẩn = false
batTatTuongSo(bật: true);
// Hàm với tham số mặc định
String nói(String từ, String tin,
[String thiếtBị = 'thú bưu điện', String tâmTrạng]) {
var kếtQuả = '$từ nói $tin';
if (thiếtBị != null) {
kếtQuả = '$kếtQuả bằng $thiếtBị';
}
if (tâmTrạng != null) {
kếtQuả = '$kếtQuả (trạng thái $tâmTrạng)';
}
return kếtQuả;
}
assert(nói('Bob', 'Chào') ==
'Bob nói Chào bằng thú bưu điện');
// Tham số mặc định có thể là List hoặc Map
void làmGìĐó(
{List<int> danhSách = const [1, 2, 3],
Map quàTặng = const {
'đầu tiên': 'giấy',
'thứ hai': 'vải',
'thứ ba': 'da'
}}) {
print('danhSách: $danhSách');
print('quàTặng: $quàTặng');
}
Hàm chính
Hàm main là điểm khởi đầu, không trả về giá trị và có thể nhận List
void main() {
querySelector('#sample_text_id')
..text = 'Nhấn vào đây!'
..onClick.listen(đảoNgượcChữ);
}
// Chạy ứng dụng như sau: dart args.dart 1 test
void main(List<String> đốiSố) {
print(đốiSố);
assert(đốiSố.length == 2);
assert(int.parse(đốiSố[0]) == 1);
assert(đốiSố[1] == 'test');
}
Hàm như đối tượng
// Truyền hàm làm tham số
void inPhầnTử(int phầnTử) {
print(phầnTử);
}
var danhSách = [1, 2, 3];
// Truyền inPhầnTử làm tham số
danhSách.forEach(inPhầnTử);
// Gán hàm cho biến
// hàmLớn có kiểu là String Function(String)
var hàmLớn = (tin) => '!!! ${tin.toUpperCase()} !!!';
assert(hàmLớn('xin chào') == '!!! XIN CHÀO !!!');
Hàm vô danh
([[Kiểu] thamSố1[, …]]) {
khốiMã;
};
var danhSách = ['táo', 'chuối', 'cam'];
danhSách.forEach((sảnPhẩm) {
print('${danhSách.indexOf(sảnPhẩm)}: $sảnPhẩm');
});
// Cú pháp rút gọn
danhSách.forEach(
(sảnPhẩm) => print('${danhSách.indexOf(sảnPhẩm)}: $sảnPhẩm'));
Các khái niệm khác
// Phạm vi biến
bool cấpCao = true;
void main() {
var trongMain = true;
void hàmCủaTôi() {
var trongHàm = true;
void hàmLồng() {
var trongHàmLồng = true;
assert(cấpCao);
assert(trongMain);
assert(trongHàm);
assert(trongHàmLồng);
}
}
}
// Hàm đóng gói
/// Trả về hàm cộng [cộngVới] vào đối số
Function taoHamCong(int cộngVới) {
return (int i) => cộngVới + i;
}
void main() {
// Tạo hàm cộng 2
var cộng2 = taoHamCong(2);
// Tạo hàm cộng 4
var cộng4 = taoHamCong(4);
assert(cộng2(3) == 5);
assert(cộng4(3) == 7);
}
// So sánh hàm (kiểm tra bằng nhau)
void hàmChính() {} // Hàm cấp cao
class A {
static void hàmTĩnh() {} // Phương thức tĩnh
void hàmThựcThể() {} // Phương thức thực thể
}
void main() {
var x;
// So sánh hàm cấp cao
x = hàmChính;
assert(hàmChính == x);
// So sánh phương thức tĩnh
x = A.hàmTĩnh;
assert(A.hàmTĩnh == x);
// So sánh phương thức thực thể
var v = A(); // Thực thể #1 của A
var w = A(); // Thực thể #2 của A
var y = w;
x = w.hàmThựcThể;
// Các hàm này trỏ cùng thực thể (#2), nên bằng nhau
assert(y.hàmThựcThể == x);
// Các hàm này trỏ thực thể khác nhau, nên khác nhau
assert(v.hàmThựcThể != w.hàmThựcThể);
}
// Hàm không trả về giá trị sẽ trả về null
hàmChỗ() {}
assert(hàmChỗ() == null);