Erlang - Chức năng

Erlang được biết đến như một ngôn ngữ lập trình chức năng, do đó bạn sẽ mong đợi thấy nhiều sự nhấn mạnh về cách các chức năng hoạt động trong Erlang. Chương này bao gồm tất cả những gì có thể được thực hiện với các chức năng trong Erlang.

Xác định một chức năng

Cú pháp của một khai báo hàm như sau:

Cú pháp

FunctionName(Pattern1… PatternN) ->
Body;

Ở đâu,

  • FunctionName - Tên hàm là nguyên tử.

  • Pattern1… PatternN- Mỗi đối số là một mẫu. Số đối số N là số hiếm của hàm. Một chức năng được xác định duy nhất bởi tên mô-đun, tên chức năng và độ hiếm. Có nghĩa là, hai chức năng có cùng tên và trong cùng một mô-đun, nhưng có tính chất khác nhau là hai chức năng khác nhau.

  • Body - Phần nội dung mệnh đề bao gồm một chuỗi các biểu thức được phân tách bằng dấu phẩy (,):

Chương trình sau đây là một ví dụ đơn giản về việc sử dụng các hàm:

Thí dụ

-module(helloworld). 
-export([add/2,start/0]). 

add(X,Y) -> 
   Z = X+Y, 
   io:fwrite("~w~n",[Z]). 
   
start() -> 
   add(5,6).

Những điểm sau đây cần được lưu ý về chương trình trên:

  • Chúng tôi đang xác định hai chức năng, một chức năng được gọi là add trong đó có 2 tham số và tham số còn lại là start chức năng.

  • Cả hai chức năng đều được xác định với chức năng xuất. Nếu chúng ta không làm điều này, chúng ta sẽ không thể sử dụng chức năng.

  • Một hàm có thể được gọi bên trong một hàm khác. Ở đây chúng ta đang gọi hàm add từ hàm start.

Đầu ra của chương trình trên sẽ là:

Đầu ra

11

Chức năng ẩn danh

Một hàm ẩn danh là một hàm không có tên liên quan đến nó. Erlang có cơ sở để xác định các chức năng ẩn danh. Chương trình sau đây là một ví dụ về một hàm ẩn danh.

Thí dụ

-module(helloworld). 
-export([start/0]). 

start() -> 
   Fn = fun() -> 
      io:fwrite("Anonymous Function") end, 
   Fn().

Những điểm sau đây cần được lưu ý về ví dụ trên:

  • Chức năng ẩn danh được xác định với fun() từ khóa.

  • Hàm được gán cho một biến gọi là Fn.

  • Hàm được gọi thông qua tên biến.

Đầu ra của chương trình trên sẽ là:

Đầu ra

Anonymous Function

Các hàm với nhiều đối số

Các hàm Erlang có thể được định nghĩa với không hoặc nhiều tham số. Quá tải hàm cũng có thể xảy ra, trong đó bạn có thể xác định một hàm có cùng tên nhiều lần, miễn là chúng có số lượng tham số khác nhau.

Trong ví dụ sau, bản trình diễn hàm được định nghĩa với nhiều đối số cho mỗi định nghĩa hàm.

Thí dụ

-module(helloworld). 
-export([add/2,add/3,start/0]). 

add(X,Y) -> 
   Z = X+Y, 
   io:fwrite("~w~n",[Z]). 
   
add(X,Y,Z) -> 
   A = X+Y+Z, 
   io:fwrite("~w~n",[A]). 
 
start() ->
   add(5,6), 
   add(5,6,6).

Trong chương trình trên, chúng ta đang định nghĩa hàm add hai lần. Nhưng định nghĩa của hàm thêm đầu tiên có hai tham số và hàm thứ hai có ba tham số.

Đầu ra của chương trình trên sẽ là:

Đầu ra

11
17

Chức năng với Trình tự bảo vệ

Các chức năng trong Erlang cũng có khả năng có các chuỗi bảo vệ. Đây không phải là gì ngoài các biểu thức mà chỉ khi được đánh giá là true thì hàm mới chạy.

Cú pháp của một hàm với một chuỗi bảo vệ được hiển thị trong chương trình sau.

Cú pháp

FunctionName(Pattern1… PatternN) [when GuardSeq1]->
Body;

Ở đâu,

  • FunctionName - Tên hàm là nguyên tử.

  • Pattern1… PatternN- Mỗi đối số là một mẫu. Số đối số N là số hiếm của hàm. Một chức năng được xác định duy nhất bởi tên mô-đun, tên chức năng và độ hiếm. Có nghĩa là, hai chức năng có cùng tên và trong cùng một mô-đun, nhưng có tính chất khác nhau là hai chức năng khác nhau.

  • Body - Phần nội dung mệnh đề bao gồm một chuỗi các biểu thức được phân tách bằng dấu phẩy (,).

  • GuardSeq1 - Đây là biểu thức được đánh giá khi hàm được gọi.

Chương trình sau đây là một ví dụ đơn giản về việc sử dụng một hàm với một chuỗi bảo vệ.

Thí dụ

-module(helloworld). 
-export([add/1,start/0]). 

add(X) when X>3 -> 
   io:fwrite("~w~n",[X]). 

start() -> 
   add(4).

Kết quả của chương trình trên là:

Đầu ra

4

Nếu hàm add được gọi là add(3), chương trình sẽ báo lỗi.