Chức năng Dart là một tập hợp các mã cùng thực hiện một nhiệm vụ cụ thể. Nó được sử dụng để chia đoạn mã lớn thành các mô-đun nhỏ hơn và sử dụng lại khi cần thiết. Các hàm giúp chương trình dễ đọc hơn và dễ gỡ lỗi. Nó cải thiện cách tiếp cận mô-đun và tăng cường khả năng tái sử dụng mã.
Các bài viết liên quan:
Giả sử, chúng ta viết một chương trình máy tính đơn giản, trong đó chúng ta cần thực hiện các phép toán số lần khi người dùng nhập các giá trị. Chúng ta có thể tạo các hàm khác nhau cho từng toán tử máy tính. Bằng cách sử dụng các hàm, chúng ta không cần phải viết mã để cộng, trừ, nhân và chia lặp đi lặp lại. Chúng ta có thể sử dụng các chức năng nhiều lần bằng cách gọi.
Hàm cung cấp sự linh hoạt để chạy một đoạn mã nhiều lần với các giá trị khác nhau. Một hàm có thể được gọi bất cứ lúc nào dưới dạng tham số của nó và trả về một số giá trị tại nơi nó được gọi.
Ưu điểm của các function
Dưới đây là một vài lợi ích của hàm Dart .
- Nó làm tăng cách tiếp cận mô-đun để giải quyết các vấn đề.
- Nó nâng cao khả năng tái sử dụng của chương trình.
- Chúng tôi có thể thực hiện việc ghép nối các chương trình.
- Nó tối ưu hóa mã.
- Nó làm cho việc gỡ lỗi dễ dàng hơn.
- Nó giúp cho việc phát triển trở nên dễ dàng và ít phức tạp hơn.
Hãy hiểu khái niệm cơ bản của chức năng.
Xác định một function
Một hàm có thể được định nghĩa bằng cách cung cấp tên của hàm với tham số và kiểu trả về thích hợp. Một hàm chứa một tập hợp các câu lệnh được gọi là thân hàm. Cú pháp được đưa ra dưới đây.
Cú pháp:
- return_type func_name (danh sách tham số):
- {
- //các câu lệnh)
- return value ;
- }
Hãy hiểu cú pháp chung của hàm xác định.
- return_type – Nó có thể là bất kỳ kiểu dữ liệu nào như void, integer, float, v.v. Kiểu trả về phải khớp với giá trị trả về của hàm.
- func_name – Nó phải là một mã định danh hợp lệ và hợp lệ.
- tham số_danh sách – Nó biểu thị danh sách các tham số, cần thiết khi chúng ta gọi một hàm.
- trả về giá trị – Một hàm trả về một giá trị sau khi hoàn thành việc thực thi.
Hãy hiểu ví dụ sau.
Ví dụ 1
int mul ( int a, int b) { int c; c = a + b; print ( "Tổng là: ${c}" ); return c; }
Gọi một hàm
Sau khi tạo một hàm, chúng ta có thể gọi hoặc gọi hàm đã xác định bên trong thân hàm main () . Một hàm được gọi đơn giản bằng tên của nó cùng với một danh sách tham số, nếu có. Cú pháp được đưa ra dưới đây.
Cú pháp:
- fun_name (<argument_list>);
- hoặc
- value = tên_hàm (đối số);
Lưu ý – Hàm gọi phải được kết thúc bằng dấu chấm phẩy (;).
Khi chúng ta gọi một hàm, điều khiển được chuyển đến hàm được gọi. Sau đó, hàm được gọi thực thi tất cả các câu lệnh đã định nghĩa và trả về kết quả cho hàm đang gọi. Điều khiển quay trở lại hàm main () ..
Ví dụ :
- mul ( 10 , 20 );
switch số đến hàm
Khi một hàm được gọi, nó có thể có một số thông tin theo nguyên mẫu hàm được gọi là một tham số (đối số). Số lượng tham số được truyền vào và kiểu dữ liệu trong khi gọi hàm phải khớp với số lượng tham số trong quá trình khai báo hàm. Nếu không, nó sẽ báo lỗi. Truyền tham số cũng là tùy chọn, có nghĩa là không bắt buộc phải truyền trong khi khai báo hàm. Tham số có thể là hai loại.
Tham số thực – Tham số được truyền trong quá trình định nghĩa hàm được gọi là tham số thực.
Tham số chính thức – Một tham số được truyền trong khi gọi hàm được gọi là tham số chính thức.
Chúng ta sẽ tìm hiểu thêm về tham số trong phần hướng dẫn tiếp theo.
Trả về một giá trị từ hàm
Kết quả là một hàm luôn trả về một số giá trị tại điểm mà nó được gọi. Từ khóa return được sử dụng để trả về một giá trị. Câu lệnh trả về là tùy chọn. Một hàm chỉ có thể có một câu lệnh trả về. Cú pháp được đưa ra dưới đây.
Cú pháp:
- trả về <biểu thức / giá trị>
Ví dụ về hàm
Chúng ta hãy hiểu các chức năng bằng cách sử dụng một chương trình cộng hai số bằng cách sử dụng các chức năng.
Hàm Dart với tham số và giá trị trả về
Trong ví dụ sau, chúng ta đang tạo một hàm sum () để cộng hai số.
Ví dụ 1
void main () { print ( "Ví dụ về phép cộng hai số bằng hàm" ); // Tạo một hàm int sum ( int a, int b) { // nội dung hàm int result ; result = a + b; return result; } // Chúng ta đang gọi một hàm và lưu trữ một kết quả trong biến c var c = sum ( 30 , 20 ); print ( "Tổng của hai số là: ${c}" ); }
Giải trình:
Trong ví dụ trên, chúng ta đã khai báo một hàm có tên sum () và truyền hai biến số nguyên làm tham số thực tế. Trong phần thân hàm, chúng ta đã khai báo một biến kết quả để lưu trữ tổng của hai số và trả về kết quả.
Để thêm hai giá trị, chúng tôi gọi một hàm có cùng tên, truyền các tham số chính thức 30 và 20. Hàm sum () trả về một giá trị mà chúng tôi đã lưu trữ trong biến c và in tổng trên bảng điều khiển.
Hàm Dart không có tham số và giá trị trả về
Như chúng ta đã thảo luận trước đó, các tham số là tùy chọn để truyền trong khi xác định một hàm. Chúng ta có thể tạo một hàm mà không có giá trị trả về tham số. Cú pháp được đưa ra dưới đây.
Cú pháp:
- return_type func_name ()
- {
- //Các câu lệnh);
- return value ;
- }
Hãy hiểu ví dụ sau.
Ví dụ – 2
void main () { // Tạo một hàm không có đối số message () { return "Chào mừng đến với dart" ; } // Gọi hàm bên trong câu lệnh print print (message ()); }
Giải trình:
Trong ví dụ trên, chúng ta đã tạo một hàm có tên là welcome () không có đối số và trả về giá trị chuỗi cho hàm đang gọi. Sau đó, chúng tôi gọi hàm welcome () bên trong câu lệnh in và in kết quả ra bảng điều khiển.
Hàm Dart không có tham số và không có giá trị trả về
Chúng ta có thể khai báo một hàm không có tham số và không có giá trị trả về. Cú pháp được đưa ra dưới đây.
Cú pháp:
- func_name () {
- //tuyên bố
- }
- Hoặc
- void fun_name () {
- //các câu lệnh)
- }
Trong cú pháp chung ở trên-
void – Nó đại diện cho hàm không có kiểu trả về.
fun_name – Nó đại diện cho tên hàm.
Hãy hiểu ví dụ sau.
Ví dụ – 3
// Tạo một hàm không có đối số void message () { print ( "Chào mừng bạn đến với Dart" ); } void main () { print ( "Ví dụ về Hàm Dart" ); // gọi hàm message(); }
Giải trình:
Trong ví dụ trên, chúng ta đã tạo một hàm có tên là welcome () bên ngoài hàm main () và viết câu lệnh in. Bên trong hàm main () , chúng ta đã gọi hàm đã xác định và in đầu ra ra bảng điều khiển.
Hàm Dart có tham số và không có giá trị trả về
Chúng tôi đang tạo một hàm để tìm số đã cho là chẵn hay lẻ. Hãy hiểu ví dụ sau.
Ví dụ – 4
void main () { void number ( int n) { // Kiểm tra số đã cho là chẵn hay lẻ if (n% 2 == 0 ) { print ( "Số đã cho là số chẵn" ); } else { print ( "Số đã cho là số lẻ" ); } } number ( 20 ); }
Hàm ẩn danh (Anonymous)
Chúng ta đã học Hàm Dart, được định nghĩa bằng cách sử dụng tên do người dùng định nghĩa. Dart cũng cung cấp cơ sở để chỉ định một chức năng không tên hoặc chức năng không có tên. Loại hàm này được gọi là hàm ẩn danh, lambda hoặc hàm đóng . Một hàm ẩn danh hoạt động giống như một hàm thông thường, nhưng nó không có tên với nó. Nó có thể không có hoặc bất kỳ số lượng đối số nào với chú thích kiểu tùy chọn.
Chúng ta có thể gán hàm ẩn danh cho một biến và sau đó chúng ta có thể truy xuất hoặc truy cập giá trị của bao đóng dựa trên yêu cầu của chúng ta.
Một hàm Ẩn danh chứa một khối mã độc lập và có thể được chuyển vào mã của chúng tôi dưới dạng các tham số hàm. Cú pháp như sau.
Cú pháp:
- (danh_sách_tham_số) {
- các câu lệnh
- }
Hãy xem xét ví dụ sau.
Ví dụ:
void main () { var list = [ "James" , "Patrick" , "Mathew" , "Tom" ]; print ( "Ví dụ về hàm ẩn danh" ); list.forEach ((item) { print ( '${list.indexOf (item)}: $item' ); }); }
Giải trình:
Trong ví dụ trên, chúng tôi đã xác định một hàm ẩn danh với một mục đối số không kiểu. Hàm đã gọi cho từng mục trong danh sách và in các chuỗi với giá trị chỉ mục được chỉ định của nó.
Nếu hàm bao gồm một câu lệnh, thì chúng ta cũng có thể viết đoạn mã trên theo cách sau.
- list.forEach (
- (item) => print ( “$ {list.indexOf (item)}: $ item” ));
Nó tương đương với mã trước đó. Bạn có thể xác minh nó bằng cách dán vào Dart và chạy.
Lexical Scope
Như chúng ta đã thảo luận trong phần giới thiệu Dart , nó là một ngôn ngữ phạm vi từ vựng có nghĩa là phạm vi của biến được quyết định tại thời điểm biên dịch. Phạm vi của biến được xác định khi mã được biên dịch. Biến hoạt động khác nhau nếu chúng được định nghĩa trong các dấu ngoặc nhọn khác nhau. Hãy hiểu ví dụ sau.
Ví dụ:
bool topVariable = true ; void main () { var inside_Main = true ; // Định nghĩa hàm lồng nhau void myFunction () { var inside_Function = true ; void nestedFunction () { var bên trong_NestedFunction = true ; // Hàm này đang sử dụng tất cả các biến của các hàm trước đó. assert(topVariable); assert(inside_Main); assert(inside_Function); assert(inside_NestedFunction); } } }
Quan sát đoạn mã trên, hàm nestedFunction () đã sử dụng các biến của hàm trước đó.
Lexical Closure
Một bao đóng từ vựng được gọi là bao đóng, là một đối tượng hàm có quyền truy cập vào các biến trong phạm vi từ vựng của nó ngay cả khi hàm được sử dụng trong phạm vi ban đầu của nó. Nói cách khác, nó cung cấp quyền truy cập vào phạm vi của chức năng bên ngoài từ chức năng bên trong. Hãy hiểu ví dụ sau.
Ví dụ:
void main () { String initial() () { var name = 'Will Smith' ; // tên là một biến cục bộ được tạo bởi init void disp_Name () { // displayName () là một hàm bên trong, một bao đóng in (name); // sử dụng biến được khai báo trong hàm cha } disp_Name (); } init();
Giải trình:
Trong đoạn mã trên, hàm initial () đã tạo một biến cục bộ có tên là tên và hàm có tên là disp_Name () . Hàm disp_Name () được định nghĩa bên trong hàm initial () và do đó, hàm disp_Name () không có biến cục bộ của riêng nó.
Hàm bên trong có thể truy cập biến của các hàm bên ngoài. Hàm disp_Name () có thể truy cập biến tên được khai báo trong hàm bên ngoài, initial () .
Hàm main ()
Hàm main () là hàm cấp cao nhất của Dart. Đây là chức năng quan trọng nhất và quan trọng nhất của ngôn ngữ lập trình Dart . Việc thực thi chương trình bắt đầu bằng hàm main () . Hàm main () chỉ có thể được sử dụng một lần trong một chương trình.
Nó chịu trách nhiệm về tất cả các kiểu thực thi như câu lệnh, hàm và chức năng thư viện do người dùng định nghĩa. Chương trình bắt đầu với hàm main () và chúng tôi khai báo biến và các câu lệnh thực thi do người dùng định nghĩa bên trong nó. Hàm main trả về void và có thể có tham số List <String> làm đối số. Cú pháp chung của hàm main () được đưa ra dưới đây.
Cú pháp:
- void main () {
- // nội dung hàm chính
- }
Ví dụ 1
void main () { print ( "Chào mừng Bạn đến với Dart" ); }
Đầu ra
Chào mừng bạn đến với JavaTpoint
Giá trị trả về
Đôi khi hàm trả về một giá trị sau khi đánh giá các câu lệnh hàm đến điểm mà nó được gọi từ đó. Câu lệnh trả về giữ kết quả của hàm và nó được chuyển sang lệnh gọi hàm. Từ khóa return được sử dụng để đại diện cho câu lệnh return. Nếu câu lệnh trả về không được chỉ định, thì hàm trả về null. Câu lệnh trả về là tùy chọn để chỉ định trong hàm, nhưng chỉ có thể có một câu lệnh trả về trong một hàm.
Cú pháp:
- return <biểu thức / giá trị>;
Giá trị Dart với Giá trị trả về
Dưới đây là cú pháp của giá trị trả về.
Cú pháp:
- return_type function_name ()
- {
- //các câu lệnh);
- return value ;
- }
Đây là mô tả của cú pháp trên.
function_name – Tên hàm đại diện cho tên hàm, có thể là bất kỳ mã định danh hợp lệ nào.
kiểu trả về – Nó biểu thị kiểu trả về của hàm. Nó có thể là bất kỳ kiểu dữ liệu hợp lệ nào. Giá trị trả về phải khớp với kiểu trả về của hàm.
Hãy hiểu ví dụ sau:
Ví dụ –
void main () { int mul ( int a, int b) { int c = a * b; return c; } print ( "Phép nhân hai số: ${mul (10,20)}" ); }