Ferrugem - Tomada de Decisão

Estruturas de tomada de decisão requerem que o programador especifique uma ou mais condições a serem avaliadas ou testadas pelo programa, juntamente com uma instrução ou instruções a serem executadas se a condição for determinada como verdadeira e, opcionalmente, outras instruções a serem executadas se o condição é determinada como falsa.

Abaixo, é mostrada a forma geral de uma estrutura típica de tomada de decisão encontrada na maioria das linguagens de programação -

Sr. Não Declaração e descrição
1

if statement

Uma instrução if consiste em uma expressão booleana seguida por uma ou mais instruções.

2

if...else statement

Uma instrução if pode ser seguida por uma instrução else opcional , que é executada quando a expressão booleana é falsa.

3

else...if and nested ifstatement

Você pode usar uma instrução if ou else if dentro de outra instrução if ou else if .

4

match statement

Uma declaração de correspondência permite que uma variável seja testada em relação a uma lista de valores.

Declaração If

A construção if… else avalia uma condição antes que um bloco de código seja executado.

Sintaxe

if boolean_expression {
   // statement(s) will execute if the boolean expression is true
}

Se a expressão booleana for avaliada como verdadeira, o bloco de código dentro da instrução if será executado. Se a expressão booleana for avaliada como falsa, o primeiro conjunto de código após o final da instrução if (após a chave de fechamento) será executado.

fn main(){
   let num:i32 = 5;
   if num > 0 {
      println!("number is positive") ;
   }
}

O exemplo acima irá imprimir number is positive pois a condição especificada pelo bloco if é verdadeira.

declaração if else

A if pode ser seguido por um opcional elsequadra. O bloco else será executado se a expressão booleana testada pela instrução if for avaliada como falsa.

Sintaxe

if boolean_expression {
   // statement(s) will execute if the boolean expression is true
} else {
   // statement(s) will execute if the boolean expression is false
}

FlowChart

o ifbloco guarda a expressão condicional. O bloco associado à instrução if é executado se a expressão booleana for avaliada como verdadeira.

O bloco if pode ser seguido por uma instrução else opcional. O bloco de instruções associado ao bloco else é executado se a expressão for avaliada como falsa.

Ilustração - Simples se ... mais

fn main() {
   let num = 12;
   if num % 2==0 {
      println!("Even");
   } else {
      println!("Odd");
   }
}

O exemplo acima imprime se o valor em uma variável é par ou ímpar. O bloco if verifica a divisibilidade do valor por 2 para determinar o mesmo. Aqui está a saída do código acima -

Even

Aninhado se

o else…ifescada é útil para testar várias condições. A sintaxe é mostrada abaixo -

Sintaxe

if boolean_expression1 {
   //statements if the expression1 evaluates to true
} else if boolean_expression2 {
   //statements if the expression2 evaluates to true
} else {
   //statements if both expression1 and expression2 result to false
}

Ao usar as instruções if ... else ... if e else, há alguns pontos a serem considerados.

  • Um if pode ter zero ou um else e deve vir depois de qualquer else..if.
  • Um if pode ter de zero a muitos else..if e eles devem vir antes do else.
  • Depois que um else..if for bem-sucedido, nenhum dos outros else..if or else será testado.

Exemplo: senão ... se escada

fn main() {
   let num = 2 ;
   if num > 0 {
      println!("{} is positive",num);
   } else if num < 0 {
      println!("{} is negative",num);
   } else {
      println!("{} is neither positive nor negative",num) ;
   }
}

O snippet exibe se o valor é positivo, negativo ou zero.

Resultado

2 is positive

Declaração de correspondência

A instrução match verifica se um valor atual está correspondendo a uma lista de valores, isso é muito semelhante à instrução switch na linguagem C. Em primeiro lugar, observe que a expressão após a palavra-chave match não precisa ser colocada entre parênteses.

A sintaxe é mostrada abaixo.

let expressionResult = match variable_expression {
   constant_expr1 => {
      //statements;
   },
   constant_expr2 => {
      //statements;
   },
   _ => {
      //default
   }
};

No exemplo abaixo, state_code corresponde a uma lista de valores MH, KL, KA, GA- se qualquer correspondência for encontrada, um valor de string é retornado ao estado variável . Se nenhuma correspondência for encontrada, o caso padrão _ corresponde e o valor Desconhecido é retornado.

fn main(){
   let state_code = "MH";
   let state = match state_code {
      "MH" => {println!("Found match for MH"); "Maharashtra"},
      "KL" => "Kerala",
      "KA" => "Karnadaka",
      "GA" => "Goa",
      _ => "Unknown"
   };
   println!("State name is {}",state);
}

Resultado

Found match for MH
State name is Maharashtra