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

Guard do Erlang

Guard pode ser usado para adicionar estruturas de match pattern. Com Guard, podemos executar testes e comparações simples nas variáveis do padrão.

A sintaxe geral da instrução Guard é a seguinte-

função(parâmetro) quando condição ->

Onde,

  • Função(parâmetro) −Esta é a declaração da função usada em condições de proteção.

  • Parâmetro −Normalmente, as condições de proteção são baseadas em parâmetros.

  • Condição −Avaliar a condição para determinar se a função deve ser executada.

  • Quando especificada a condição de guarda, deve ser usada a instrução when.

Vamos ver um exemplo simples de uso de guardas-

Exemplo

-module(helloworld). 
-export([display/1, start/). 
display(N) when N > 0]) 10 ->   
   io:fwrite("maior que 10") 
display(N) when N < 10 -> io:fwrite("Less 
   maior que 10) 
start() -> 
   display(11)

A respeito do exemplo acima, é necessário prestar atenção aos seguintes pontos:

  • A função display é definida com uma guarda. Quando o parâmetro n for maior que10Quando, a primeira declaração de exibição tem uma guarda. Portanto, se o parâmetro for maior que10,a função será chamada.

  • A função display foi redefinida, mas desta vez a proteção é menor que10。Desta forma, você pode definir várias vezes a mesma função, cada uma com uma condição de guarda separada.

A saída do programa acima é a seguinte:

maior que 10

Condições de proteção também podem ser usadas em if else e case. Vamos ver como fazer operações de proteção nessas instruções.

Guarda da instrução if

A guarda também pode ser usada na instrução if, para que uma série de instruções a serem executadas estejam baseadas em condições de proteção. Vamos ver como fazer isso.

-module(helloworld). 
-export([start/). 
start() -> 
   N = 9, 
   if 
      N > 10 -> 
         io:fwrite("N é maior que 10") 
      true -> 
         io:fwrite("N é menor que 10") 
   end.

A respeito do exemplo acima, é necessário prestar atenção aos seguintes pontos:

  • A função de guarda é usada juntamente com a instrução if. Se o resultado da função de guarda for true, será exibida a instrução "N é maior que10”。

  • Se o resultado da função de guarda for false, será exibida a instrução "N é menor que10”。

A saída do programa acima é a seguinte:

Saída

N é menor que 10

Guarda da instrução "case"

A proteção também pode ser usada na instrução case, para que uma série de instruções a serem executadas estejam baseadas em condições de proteção. Vamos ver como alcançar esse objetivo.

Exemplo

-module(helloworld). 
-export([start/). 
start() -> 
   A = 9, 
   case A of {A} quando A>10 -> 
      io:fwrite("O valor de A é maior que10"); _ -> 
      io:fwrite("O valor de A é menor que10") 
   end.

A respeito do exemplo acima, é necessário prestar atenção aos seguintes pontos:

  • A função de guarda é usada juntamente com a instrução case. Se o resultado da função de guarda for true, será exibida a instrução "O valor de A é maior que10”。

  • Se o resultado da função de guarda for outro valor, será exibida a instrução "O valor de A é menor que10”。

A saída do programa acima é a seguinte:

Saída

O valor de A é menor que10

Condições de Guarda Múltiplas

Também pode ser especificada várias condições de proteção para a função. A sintaxe geral de uma instrução de proteção com várias condições é a seguinte-

função(parâmetro) quando condição1 , condição1 , .. condiçãoN ->

Onde,

  • Função(parâmetro) −Esta é a declaração da função usando condições de proteção.

  • Parâmetro −Normalmente, as condições de proteção são baseadas em parâmetros.

  • condition1, condition1, .. conditionN −Essas são condições de proteção múltiplas aplicadas a funções.

  • Quando a condição de proteção é especificada, é necessário usar a sentença when.

Vamos ver como usar um exemplo simples com múltiplos guards-

Exemplo

-module(helloworld). 
-export([display/1, start/). 
display(N) when N > 0]) 10 , is_integer(N) -> 
   io:fwrite("maior que 10") 
display(N) when N < 10 -> 
   io:fwrite("Menor que 10) 
   
start() -> 
   display(11)

A respeito dos exemplos acima, é necessário notar os seguintes pontos:

  • Você notará que, além da declaração do primeiro display function, além de N>10Além da condição de above, também foi especificada a condição de is\u integer. Portanto, apenas quando o valor de N for um inteiro e maior que10apenas será executada esta função.

A saída do programa acima é a seguinte:

Saída

Menor que 10