English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Erlang 가드(Guard)

Guard는 패턴 매칭 기능을 추가할 수 있는 구조입니다. Guard를 사용하면 패턴 내의 변수에 간단한 테스트와 비교를 수행할 수 있습니다.

Guard 문의 일반 문법은 다음과 같습니다-

function(parameter) when condition ->

어디서

  • Function(parameter) −이는 보호 조건하에서 사용되는 함수 선언입니다.

  • Parameter −보통 보호 조건은 매개변수에 기반합니다.

  • Condition −조건을 평가하여 함수가 실행되어야 하는지 결정합니다.

  • Guard 조건을 지정했을 때, when 문을 사용해야 합니다.

Guard를 사용하는 간단한 예제를 보여드리겠습니다-

예시

-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)

위 예제에 대해 다음 사항을 주의해야 합니다:

  • 보호와 함께 display 함수를 정의합니다. 매개변수 n이10제한 사항이 있을 때, 첫 번째 display 선언에 보호가 있습니다. 따라서 매개변수가10이면, 해당 함수가 호출됩니다.

  • 다시 display 함수를 정의했지만, 이번에는 보호 조건이 작은10。이렇게 하면 동일한 함수를 여러 번 정의할 수 있으며, 각 함수는 독립적인 Guard 조건을 가집니다.

위 프로그램의 출력은 다음과 같습니다:

greater than 10

보호 조건은 if else와 case 문에도 사용될 수 있습니다. 이러한 문에 대한 보호 작업을 어떻게 수행하는지 보여드리겠습니다.

if 문의 Guard

Guard는 if 문에도 사용될 수 있습니다. 실행할 수 있는 문장열은 보호 조건에 기반합니다. 이를 어떻게 할 수 있는지 보여드리겠습니다.

-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.

위 예제에 대해 다음 사항을 주의해야 합니다:

  • guard 함수와 if 문을 함께 사용합니다. guard 함수의 계산 결과가 true 인 경우, "N is greater than" 문장이 표시됩니다.10”。

  • guard 함수의 계산 결과가 false 인 경우, "N is less than" 문장이 표시됩니다.10”。

위 프로그램의 출력은 다음과 같습니다:

출력

N is less than 10

“case” 문의 Guard

보호는 case 문에도 사용될 수 있습니다. 실행할 수 있는 문장열은 보호 조건에 기반합니다. 이 목표를 달성하는 방법을 보여드리겠습니다.

예시

-module(helloworld). 
-export([start/0]) 
start() -> 
   A = 9, 
   case A of {A} when A>10 -> 
      io:fwrite("A의 값이10"); _ -> 
      io:fwrite("A의 값이10") 
   end.

위 예제에 대해 다음 사항을 주의해야 합니다:

  • guard 함수와 case 문을 함께 사용합니다. guard 함수의 계산 결과가 true 인 경우, "A의 값이" 문장이 표시됩니다.10”。

  • guard 함수의 계산 결과가 다른 값이면, "A의 값이" 문장이 표시됩니다.10”。

위 프로그램의 출력은 다음과 같습니다:

출력

A의 값이10

다중 Guard 조건

함수에 여러 보호 조건을 지정할 수도 있습니다. 여러 보호 조건을 가진 보호 문의 일반 문법은 다음과 같습니다-

function(parameter) when condition1 , condition1 , .. conditionN ->

어디서

  • Function(parameter) −이는 보호 조건을 사용하는 함수 선언입니다.

  • Parameter −보통 보호 조건은 매개변수에 기반합니다.

  • condition1, condition1, .. conditionN −이는 함수에 적용되는 복잡한 보호 조건입니다.

  • 보호 조건을 지정했을 때는 when 문을 사용해야 합니다.

여러 가드를 사용하는 간단한 예제를 보겠습니다-

예시

-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("소于人 10) 
   
start() -> 
   display(11)

위 예제에 대해 주의해야 할 몇 가지 사항이 있습니다:

  • 첫 번째 display 함수 선언에 대해 N>10의 조건 외에도 is\u integer 조건을 지정했습니다. 따라서 N의 값이 정수이고10이 함수가 실행될 때만.

위 프로그램의 출력은 다음과 같습니다:

출력

소于人 10