Olá e bem-vindo. Nesta palestra, quero falar sobre a instrução switch.
É uma alternativa a uma
instrução if, mas geralmente usada apenas em situações específicas.
Mas tem uma sintaxe legal para fazer algumas repetições em sua instrução if.
Portanto, o operador condicional e as instruções if than
else facilitam a escrita de programas que escolhem entre duas alternativas.
É muito fácil fazer perguntas e tomar decisões.
No entanto, muitas vezes,
um programa precisa escolher uma das várias alternativas.
E isso seria essencialmente
o if else if else if else if else if.
É complicado porque você pode obviamente implementar isso com a instrução if quando você
tem várias alternativas, mas você
pode ter uma centena de outros ifs. Portanto, é tedioso, está sujeito a erros e
é realmente apenas um pé no saco. É como escrever um monte de código clichê.
Portanto, a alternativa a essa sintaxe e tudo o que você pode
fazer no switch pode ser feito em um if.
Mas é mais limpo, mais fácil e muito mais eficiente também.
Portanto, quando o valor de uma variável é comparado com sucesso com diferentes valores, use
a instrução switch.
E o que isso significa se você tiver uma instrução if e então tiver um else if, else if, else
if, else if, else if, else if, use a instrução switch.
Agora, se essas expressões booleanas são um pouco mais complicadas.
Você não pode usar uma instrução switch. Você só pode
usar uma instrução switch quando estiver comparando com um valor, como uma constante.
A expressão não pode ser tão complicada.
Mas é muito mais conveniente e eficiente usar a instrução switch, e a maioria
das linguagens também tem essa construção. E veja que é muito bom. A única coisa que
você nota que muitas linguagens construirão com base em c.
Se você já programou antes,
verá e se familiarizará com muitos desses
construtos porque eles vieram originalmente em c ou be, a linguagem anterior.
Portanto, aqui está a sintaxe de uma instrução switch. Você tem a palavra-chave switch.
E então, dentro do switch, você tem esses parênteses esquerdo e
direito, que é a expressão. Portanto, ela se parece com a instrução if
no início, exceto que em vez da palavra-chave if, você tem a palavra-chave switch.
Você então tem o colchete esquerdo.
Os colchetes esquerdos são obrigatórios. Esse colchete esquerdo inicia o corpo do switch.
E você vê o suporte direito final na parte inferior, que termina o corpo da chave.
Outra coisa importante aqui é o caso dessas palavras-chave.
Case é na verdade como a
própria instrução if. Portanto, switch vai
realmente olhar para uma expressão, não
se ela é necessariamente verdadeira ou falsa.
A opção pode estar apenas olhando para uma variável ou algo assim.
E então vai avaliar essa variável nas declarações de caso.
Portanto, se o valor 1 for igual à expressão,
se o valor n for igual à expressão.
Mas você pode ver isso como
se o switch estivesse no nível superior e os casos cada um sendo
uma instrução if, comparando os valores com as expressões no switch.
Portanto, os casos também são palavras-chave. Você também percebe o cólon após o caso.
Então você tem o caso e então tem o seu valor.
E aí dentro, você pode ter várias instruções de programa.
E então, no final, você tem uma palavra-chave de quebra. Essa é outra palavra-chave. Portanto, há três
palavras-chave aqui, na verdade quatro. Há a palavra-chave switch, a palavra-chave case, a palavra-chave break
e o padrão na parte inferior.
Portanto, essas são as coisas importantes a serem observadas. Veremos um exemplo detalhado,
mas você pode ter casos diferentes. E, novamente, isso é apenas fazer como um if else, if else, if else, else if.
Portanto, se o valor um for igual à expressão, execute o código.
Caso contrário, se o valor dois for igual
à expressão, avalie isso. Caso contrário, se o valor três for igual à expressão, avalie isso.
Caso contrário, se o valor n for igual a expressão, execute o código dentro desse bloco.
E o bloqueio para os casos começa com o cólon e termina com o intervalo.
E se você não tiver essa folga aí,
vai cair nos outros casos. Vamos falar sobre isso novamente.
E a última coisa importante aqui é essa palavra-chave padrão. Este é essencialmente o else, else
if, else if, else if e então else na parte inferior.
Portanto, isso é definido se nenhum dos outros casos avaliar para a expressão.
Então, vamos falar sobre alguns desses detalhes que mencionei.
A expressão entre parênteses é comparada com sucesso com os valores.
Portanto, novamente,
se voltarmos à sintaxe, a expressão é comparada a todos os valores.
E se for igual a qualquer um dos valores, você executa o código dentro desse valor.
Os casos devem ser constantes simples ou expressões constantes, expressões
que avaliam como uma constante.
Portanto, você poderia ligar x mais y
porque se x fosse 5, isso apenas ligaria 10 e compararia os valores com 10.
Mas geralmente, você liga uma variável que é igual a algum tipo de número.
Se for encontrado um caso cujo valor é igual ao valor da expressão,
as instruções que seguem o caso são executadas.
Quando mais de uma instrução é incluída, elas não precisam ser fechadas entre colchetes.
Isso significa apenas que, quando
mais de uma instrução é incluída, não há
chaves necessárias para as instruções de caso.
Lembre-se, para a instrução if, sempre teríamos que ter
essas chaves, esse não é o caso. Você pode simplesmente colocá-los uma linha após a outra, a chave é a quebra aí.
A instrução break sinaliza o fim do caso particular e
faz com que a execução da instrução seja encerrada, ela
salta para fora.
Se você não tiver uma chance, no próximo caso ela não funcionará.
Portanto, você deseja incluir a instrução break de cada caso. Quando você não inclui intervalos, geralmente significa
que há um bug ou algo assim.
O único motivo pelo qual você deseja incluir uma pausa é se você tiver
várias condições para executar o código. Então, se você tivesse vários casos,
basicamente dizendo se a expressão era
este caso, este caso ou aquele caso, então faça
a mesma coisa,
então você tiraria os intervalos.
Portanto, tome cuidado com as quebras, pois as quebras podem
causar problemas se determinados blocos serão ou não executados no próximo caso.
O caso opcional especial denominado padrão é executado se o valor
da expressão não corresponder a nenhum dos casos. É o mesmo que uma queda, senão acontece
se nenhum dos casos for verdadeiro.
Portanto, aqui está um bom exemplo em que estamos criando um switch para avaliar um enum.
Nesse caso, temos um tipo de enum chamado dia da semana, que
é apenas especificado por todos os dias da semana.
Em seguida, criamos uma variável do tipo enum weekday e a definimos como segunda-feira
e ligamos hoje.
Portanto, dependendo do valor de hoje, a variável, uma
das instruções do caso será executada.
Se hoje for igual a domingo, vai imprimir hoje
é domingo e depois pular.
Se hoje for igual a segunda-feira, vai imprimir hoje é segunda-feira e pular.
Se não for igual a
nenhum deles, irá para o caso padrão. Então, vamos percorrer este exemplo em blocos de código.
Aqui temos nosso código de amostra. E você verá isso porque hoje
é igual a segunda-feira, caso
segunda-feira será avaliada e você verá a saída hoje é segunda-feira.
Portanto, vamos construir este código e executá-lo. E é isso que vamos ver,
hoje é segunda-feira.
Porque o que está acontecendo aqui hoje vai ser segunda-feira. Você coloca esta expressão
com a qual deseja avaliar a variável hoje e a avalia.
Os principais itens a serem lembrados aqui são que
você tem um colchete para iniciar a instrução switch na linha 16 em
um colchete final para encerrar o nome do switch na linha 29.
Você pode ter várias linhas dentro de cada instrução case sem usar colchetes.
Agora vamos ver o que acontece se retirarmos
a instrução break depois de segunda-feira.
Porque lembre-se, o intervalo vai saltar para fora do caso. Mas se removê-lo,
o que vai acontecer é que
vai cair até terça-feira e você verá os dois printfs
executados na segunda-feira de hoje e hoje é terça-feira.
Portanto, agora, quando executamos o programa,
vemos que hoje é segunda-feira e hoje é terça-feira.
Essa é a importância da instrução break.
O intervalo salta para fora.
Portanto, isso pode ser útil se você quiser a mesma saída para segunda e terça-feira.
Por exemplo, às vezes você verá declarações
de caso como este, caso terça-feira porque você deseja a mesma saída
e não importa a que a variável é igual.
Então, você pode ver coisas assim, mas quando você tem instruções case separadas
que têm execuções diferentes, você tem que adicionar essa pausa lá.
Portanto, estamos olhando apenas para domingo, segunda e terça-feira.
O que acontecerá se definirmos o valor de hoje igual a domingo,
porque não há nenhum caso que corresponda a isso.
Bem, o que vai acontecer é que vai cair no padrão e vai imprimir o que quer que seja.
Então, vamos tentar executar novamente.
E vemos que hoje é domingo.
Desculpe, defina-o para a variável errada. Eu quero definir para,
digamos, quarta-feira. Tínhamos um caso para o domingo.
Portanto, agora veremos que ele realmente imprime qualquer coisa porque não
corresponde a nenhum dos casos.
Portanto, tudo o que você precisa fazer para switch é realmente memorizar a sintaxe.
A expressão entre parênteses é o que você vai avaliar.
Os casos devem corresponder à expressão. Então, normalmente, você está fazendo variáveis e é
por isso que tem que ser constantes ou expressões que avaliam para um valor constante específico.
E então você tem casos para cada coisa e um padrão para todos os casos, e não se esqueça das quebras.
Vamos voltar e falar um pouco mais e outro exemplo da construção
de switch com casos.
No próximo exemplo, é um pouco diferente.
O que estamos fazendo aqui é obter dados do usuário e ativá-los.
Portanto, neste exemplo em nossa função principal, ele começa criando alguns
flutuadores e, em seguida, cria um operador de caractere e, em seguida, pede ao usuário
para inserir um valor, um operador e um valor dois.
E está usando especificadores de formato para fazer a distinção, e todos eles têm um endereço de e comercial.
Dependendo do caractere que você inserir para o operador, se é mais menos ou estrela, é isso
que você deseja incluir em sua caixa de switch.
Portanto, se o usuário inseriu um sinal
de mais, você verá na próxima coluna aqui, a construção do switch, é um operador de ativação.
Ele vai comparar o valor do operador, o valor do operador variável para cada
uma dessas declarações de caso. E você notará que essas declarações
de caso estão entre aspas simples porque estamos comparando caracteres.
Assim, você pode comparar
números, variáveis a constantes de valores específicos ou caracteres a constantes específicas.
E então, dentro de cada declaração de caso, estamos imprimindo um formato específico.
Valor um mais valor dois, valor um menos valor dois.
Na verdade, estamos realizando cálculos em nossa impressão.
E então, novamente, você vê aquelas declarações de interrupção importantes
que estão saltando e são necessárias se você não quiser falhar em nenhum dos outros casos.
Você também percebe que na última instrução case, onde tem a barra, o divisor, temos
uma instrução if.
Não temos colchetes ao redor do caso
porque podemos ter várias instruções em cada caso sem colchetes.
Então, no último caso, dizemos que se o valor dois é igual a 0, estamos
fazendo uma pequena verificação para ter certeza de não dividir por 0.
E se não dividirmos por 0, então vamos realmente realizar nossa divisão.
E então, no final desse caso, temos outra pausa.
Nosso caso padrão é dizer que você inseriu um operador com o qual não sabemos como lidar.
Mas a instrução switch é muito eficiente.
É muito rápido escrever sempre que você está
comparando muitos valores diferentes a uma variável específica e deseja fazer coisas diferentes.
A última coisa que eu queria mencionar era a declaração ir para em relação à tomada de decisão.
Não é uma declaração de
decisão direta, é mais para pular para uma linha de código diferente, usando um rótulo,
mas está disponível em c, e é por isso que eu queria mencioná-lo.
Há duas partes na instrução go to, o rótulo e a palavra-chave go to.
Agora, para aqueles de vocês que já
programaram em Fortran ou alguma outra linguagem básica, você provavelmente reconhecerá isso e
provavelmente o utilizou um pouco.
Agora chegando ao c, não há necessidade
de usá-lo realmente. Há alguns casos em
que vi que era muito útil, que explicarei em um segundo, mas ir para é pular para
algum código e você pode ir para qualquer linha de código.
Uma das razões pelas quais as pessoas não gostam de usá-lo é muito difícil de seguir.
Quando você está mantendo um programa e se ele for sequencial, você vai linha
por linha, instruções if nos loops while.
É ruim o suficiente quando você tem as instruções if nos loops while.
Mas agora, se você tem algo em que basicamente está na linha 27 do seu
código-fonte e vai pular para a linha 800 sem nenhum motivo além da palavra-chave ir para, de repente você
está pulando uma tonelada de código, e é muito difícil de manter e seguir.
Portanto, as duas partes a serem acessadas e o nome do rótulo. O nome do rótulo
segue a mesma convenção para nomear uma variável, caracteres alfanuméricos, você não pode
começar com dígitos, você pode começar com sublinhados.
você pode começar com sublinhados.
Basicamente, você apenas usa a palavra-chave ir para e vai para algum
identificador, parte dois. A parte dois é um rótulo em algum lugar.
Portanto, para realmente pular para essa linha de código, você deve rotular essa linha de código.
Tem que haver uma declaração que diga a parte dois.
Agora vou mostrar um exemplo disso, mas você realmente nunca deve usar
isso por causa dos problemas associados à manutenção.
No entanto, gostaria de mencionar se você já programou antes e está acostumado a usá-lo.
Em c, você realmente não precisa usá-lo tanto.
Vi um caso de uso que pode ser útil.
Eu estava trabalhando outro dia com um colega programador
e ele tinha um monte de loops aninhados
ou instruções if aninhadas.
Mas os loops são provavelmente o melhor exemplo. Loops, lembre-se, código de repetição. Ele tinha muitos loops aninhados.
E no próprio loop aninhado interno, como o quinto,
ele queria pular de todos os loops porque tinha alguma condição.
E então ele costumava saltar para fora de todos aqueles loops.
Agora, a outra maneira de pular de loops é usando a
palavra-chave de freio, mas o freio só vai pular do interior.
Portanto, não havia realmente nenhuma maneira eficaz sem ele definir um monte
de sinalizadores e ter um monte de instruções if para sair de cada
loop, então ele costumava ir. E esse foi um caso que achei muito
útil porque reduziu a quantidade de código que você tinha que escrever e estava bem claro o que estava acontecendo.
Você estava pulando de todos os loops aninhados porque atendeu
a uma determinada condição.
E esse é um caso. Mas, na maioria das vezes, você realmente não precisa ir
e, pelos motivos que mencionei, é muito problemático, é difícil seguir o código quando você está pulando de um lugar para outro.
Mas ir para é exatamente como você o usa, assim como você usa em outros idiomas.
Você tem uma palavra-chave ir para com o nome do rótulo.
E o que acontecerá em seu código é que você pulará para aquela linha de código com o rótulo.
Portanto, você pode pular todos os tipos de código.
Portanto, neste exemplo aqui, temos um rótulo chamado top, e ele
tem dois pontos. É assim que você sabe que é um rótulo.
E o topo tem algumas declarações. E no fundo disso,
você tem uma declaração if. E você diz que se char for igual a y, vá para o topo.
Então, novamente, você vê como pode simplesmente pular em seu código e isso torna muito difícil segui-lo.
Portanto, não o use basicamente, a menos que você tenha muitos, muitos loops aninhados e
queira pular de todos os loops. Obrigada.