Erlang - Vệ binh
Bảo vệ là cấu trúc mà chúng ta có thể sử dụng để tăng sức mạnh của khớp mẫu. Sử dụng bảo vệ, chúng ta có thể thực hiện các phép thử và so sánh đơn giản trên các biến trong một mẫu.
Cú pháp chung của câu lệnh bảo vệ như sau:
function(parameter) when condition ->
Ở đâu,
Function(parameter) - Đây là phần khai báo hàm được sử dụng trong điều kiện bảo vệ.
Parameter - Nói chung điều kiện bảo vệ dựa trên tham số.
Condition - Điều kiện cần được đánh giá để xem chức năng có nên được thực thi hay không.
Câu lệnh when phải được sử dụng khi điều kiện bảo vệ được chỉ định.
Hãy xem một ví dụ nhanh về cách sử dụng lính canh -
Thí dụ
-module(helloworld).
-export([display/1,start/0]).
display(N) when N > 10 ->
io:fwrite("greater then 10");
display(N) when N < 10 -> io:fwrite("Less
than 10").
start() ->
display(11).
Những điều sau đây cần được lưu ý về ví dụ trên:
Chức năng hiển thị được xác định cùng với một bảo vệ. Khai báo hiển thị đầu tiên có bảo vệ khi tham số N lớn hơn 10. Vì vậy, nếu tham số lớn hơn 10, hàm đó sẽ được gọi.
Chức năng hiển thị được định nghĩa lại, nhưng lần này với mức bảo vệ nhỏ hơn 10. Bằng cách này, bạn có thể xác định cùng một chức năng nhiều lần, mỗi lần có một điều kiện bảo vệ riêng biệt.
Kết quả của chương trình trên sẽ như sau:
Đầu ra
greater than 10
Các điều kiện bảo vệ cũng có thể được sử dụng cho if else và casecác câu lệnh. Hãy xem cách chúng ta có thể thực hiện các hoạt động bảo vệ trên các câu lệnh này.
Bảo vệ cho Tuyên bố 'nếu'
Các lệnh bảo vệ cũng có thể được sử dụng cho các câu lệnh if để chuỗi các câu lệnh được thực thi dựa trên điều kiện bảo vệ. Hãy xem làm thế nào chúng ta có thể đạt được điều này.
Thí dụ
-module(helloworld).
-export([start/0]).
start() ->
N = 9,
if
N > 10 ->
io:fwrite("N is greater than 10");
true ->
io:fwrite("N is less than 10")
end.
Những điều sau đây cần được lưu ý về ví dụ trên:
Hàm bảo vệ được sử dụng cùng với câu lệnh if. Nếu hàm bảo vệ đánh giá là true, thì câu lệnh “N lớn hơn 10” được hiển thị.
Nếu hàm bảo vệ đánh giá là sai, thì câu lệnh “N nhỏ hơn 10” sẽ được hiển thị.
Kết quả của chương trình trên sẽ như sau:
Đầu ra
N is less than 10
Bảo vệ cho Tuyên bố 'trường hợp'
Các lệnh bảo vệ cũng có thể được sử dụng cho các câu lệnh trường hợp để chuỗi các câu lệnh được thực thi dựa trên điều kiện bảo vệ. Hãy xem làm thế nào chúng ta có thể đạt được điều này.
Thí dụ
-module(helloworld).
-export([start/0]).
start() ->
A = 9,
case A of {A} when A>10 ->
io:fwrite("The value of A is greater than 10"); _ ->
io:fwrite("The value of A is less than 10")
end.
Những điều sau đây cần được lưu ý về ví dụ trên:
Chức năng bảo vệ được sử dụng cùng với câu lệnh trường hợp. Nếu hàm bảo vệ đánh giá là true, thì câu lệnh “Giá trị của A lớn hơn 10” được hiển thị.
Nếu chức năng bảo vệ đánh giá bất kỳ điều gì khác, thì câu lệnh “Giá trị của A nhỏ hơn 10” được hiển thị.
Kết quả của chương trình trên sẽ như sau:
Đầu ra
The value of A is less than 10
Nhiều điều kiện bảo vệ
Nhiều điều kiện bảo vệ cũng có thể được chỉ định cho một chức năng. Cú pháp chung của câu lệnh bảo vệ với nhiều điều kiện bảo vệ được đưa ra dưới đây:
function(parameter) when condition1 , condition1 , .. conditionN ->
Ở đâu,
Function(parameter) - Đây là khai báo hàm đã sử dụng điều kiện bảo vệ.
Parameter - Nói chung điều kiện bảo vệ dựa trên tham số.
condition1, condition1, .. conditionN - Đây là nhiều điều kiện bảo vệ được áp dụng cho các chức năng.
Câu lệnh when phải được sử dụng khi điều kiện bảo vệ được chỉ định.
Hãy xem một ví dụ nhanh về cách có thể sử dụng nhiều bảo vệ -
Thí dụ
-module(helloworld).
-export([display/1,start/0]).
display(N) when N > 10 , is_integer(N) ->
io:fwrite("greater then 10");
display(N) when N < 10 ->
io:fwrite("Less than 10").
start() ->
display(11).
Điểm sau đây cần được lưu ý về ví dụ trên:
Bạn sẽ nhận thấy rằng đối với khai báo hàm hiển thị đầu tiên, ngoài điều kiện cho N> 10, điều kiện cho is_integercũng được chỉ định. Vì vậy, chỉ khi giá trị của N là một số nguyên và lớn hơn 10, hàm này sẽ được thực hiện.
Kết quả của chương trình trên sẽ như sau:
Đầu ra
Greater than 10