Switch Statement Flowchart

Declaração  = switch / case 

Como o próprio nome já diz, switch(interruptor) ... case(caso) controla o fluxo de programas, permitindo aos programadores, especificar diferente código que deve ser executado em várias condições.

Em particular, uma declaração  switch compara o valor de uma variável com os valores especificados nas declarações de case. Quando uma declaração case encontra o valor correspondente ao da variável, o código dessa declaração case é executado.

A palavra-chave break(pausa) permite a saída de uma declaração switch, e é normalmente usada no final de cada caso. Sem uma sentença break, a função switch continuará executando as seguintes expressões sem interrupção, até uma pausa (break) ou quando o fim da função switch é encontrado.

Examplo:

switch (var) 
{
case 1:
// execute algo quando a variável é igual a 1
break;

case 2:
// execute algo quando a variável é igual a 2
         break; 

default:
// Se nada é comparado então execute default
// default é opcional
}


Sintaxe:

switch (var) 
{
case label:
// declarações
break;

case label:
        // declarações
break;

default:
// declarações
}


Parâmetros:

var:  a variável cujo valor é usada para comparar com os vários casos 

label (etiqueta) : um valor para ser comparado à variável

Referência :

http://arduino.cc/en/Reference/SwitchCase#.Uwyxh_ldWa8

Sugestões, correções, exemplos são bem vindos.

Exibições: 10698

Responder esta

Respostas a este tópico

Caro colega, 

será que poderei adaptar esta sintaxe no meu sketch?

Vamos gerar polêmica:

Qual é o melhor desempenho?

switch (var) 
{
case 1:
break;
case 2:
break; 
default:
}

ou

if(var == 1) {}
else if (var == 2) {}
else if (var == 3) {}
else {}


O case e mais rápido que o if.

por vezes o IF ao "encontrar" a igualdade pretendida executa o comando associado ao laço e passa todos os IF e ELSE que estão abaixo... Já o CASE pode ser um laço enorme e com "infinitas" considerações. Há tambem o lanca do tempo... o IF só sai do laço apos executar todos os " i++ " ... incrementamos 500 i´s ... só sai depois dos 500 i´s ... Já o case e um tempo de processamento para cada condição.

Pergunta-se então ... Porque existe o IF se o ELSE é bem melhor!? ... há caso que o IF é melhor. Principalmente, quando queremos assossiar várias condicionais como &, por exemplo ....Abraços. :)

Allan, discordo de você.

O exemplo que o Rogério Filho passou mostra um caso do IF (else IF) em que podemos testar quantas condições quisermos.

Na verdade, o CASE é um estrutura de controle antiquada que foi criada para resolver o problemas das múltiplas condições. Com a sintaxe do ELSE IF, ele passou a ser desnecessário.

Das implementações do CASE entre as linguagens de programação, a versão da linguagem C é a pior.

No Pascal (Delphi) e no BASIC  da Microsoft o SWITCH CASE ou SELECT CASE são bem melhores, pois podemos usar qualquer expressão nas condições.

Murta, a implementação do CASE em Kotlin é um pouco melhor qua linguagem C. Possui uma sintaxe mais limpa.

A estrutura CASE é tão desnecessária que a própria linguagem PYTHON, uma linguagem moderna, não possui essa estrutura de controle.

Outro ponto: Quando você precisa de códigos mais extensos para serem usados em condições, o ideal é criar funções.

Em todo caso, é bom ter essa diversidade de estruturas de controle, pois cada um vai usar aquela que mais se adapta ao seu problema.

Faça uma rotina para ligar um Led (por exemplo) e meça com o Analisador Lógico Arduino ou com um osciloscópio. Ai poderá medir esses tempos. 

Mas pela lógica, dá para ver que o Switch/Case é mais rápido, pois assim que a Variável é comparada, a rotina selecionada é executada, e depois sai do loop com o break.

Bom dia caro amigo JOSÉ MURTA  ...

Poderia me esclarecer se possivel, o fato abaixo relacionado:

Gostaria de saber se nessa declaração que é feita no escopo do void loop, ( SWITCH  (VAR)), não há necessidade de declará-la no escopo principal também ? Pois no exemplo de: 
http://arduino.cc/en/Reference/SwitchCase#.Uwyxh_ldWa8,   parece-me não condizer com a minha dúvida ...

agradeço,

abçs meu prezado !!!

ANDRÉ.

Bom dia André, 

Não entendi a sua pergunta. 

Essa "função" (não sei se é o nome mais adequado) switch /case pode ser usada dentro do void loop() ou fora dele.

É essa a sua dúvida ?

Abraços, 

Gustavo 

Opa, boa noite caro amigo José Murta !!!

Não não, a minha dúvida é, se ao declarar um laço seja ele: switch case, for, while, if,  if else, etc etc ...

eu devo declará-la no:

ESCOPO "GLOBAL" ?

ESCOPO "VOID SETUP() "? ou no, 

ESCOPO  "VOID LOOP()" apenas ?

Uma variável tem que ser declarada no Escopo Global, mas aí pra chamar a rotina especificada é que tenho dúvidas, entendeu ?

André.

 

Bom dia André, 

Não sou especialista em programação.

A variável a ser testada tem que ser declarada antes dela ser testada - óbvio. 

Se for declarada no escopo Global - ela funcionará. 

Se for declarada no escopo Setup - ela somente funcionará, se a função switch/case estiver  dentro do Setup. ( não recomendável). Não tenho certeza disso. 

Já no escopo Loop, ela somente funcionará, se a função switch/case estiver  dentro do Loop

Acho que é isso. Faça testes para confirmar.

Abraços. 

Para interessados em questões de desempenho sugiro comparar o assembler gerado para if e switch, ver quantidade de instruções, o ciclo de maquina dessas intruções... 

Marco, boa tarde!

Não há dúvidas que o CASE é mais rápido que o IF, mas em alguns casos.

Por que o CASE é mais rápido?

Porque, na maioria das vezes, o CASE não precisa resolver expressões lógicas mais complexas em suas condições.

Na maioria das vezes o CASE testa apenas um valor inteiro.

Como no exemplo do Murta:

CASE  1 faça isso. CASE 2 faça aquilo. Dessa forma é rápido mesmo

Já o IF foi feito para testes mais elaborados.

Podemos dizer que o CASE é um derivado do IF, assim como as estruturas de repetição como o  WHILE também o são.

Ou seja, o IF é a única estrutura de controle realmente necessária em programação. As outras (CASE, WHILE, FOR) são todas derivadas dele.

Basta olhar os códigos em Assembly. Lá só existem IFs.

Mas como eu disse, a diversidade é importante para a resolução dos problemas.

As linguagens vão se modernizando aos poucos.

Veja, por exemplo, a linguagem GOLANG uma das novas linguagens desenvolvidas pela Google. Nela, só existe uma estrutura de repetição. As estruturas FOR, WHILE e REPEAT foram todas substituídas pela estrutura FOR.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço