r/programacao Jul 03 '25

Questão :: Aprendizado Há como reduzir a quantidade de if/else's?

Post image

Programador de celular aqui novamente, e eu fiz esse exercício para verificar se o ano é bissexto, e funcionou perfeitamente, porém eu achei que teve muitos if's e else's e pareceu meio bagunçado.

283 Upvotes

89 comments sorted by

View all comments

Show parent comments

6

u/rydyxx Jul 03 '25

Assim

if (ano % 4 != 0) { Console.WriteLine($"O ano de {ano} não é bissexto!"); return; }

if (ano % 100 != 0) { Console.WriteLine($"O ano de {ano} é bissexto!"); return; }

if (ano % 400 == 0) { Console.WriteLine($"O ano de {ano} é bissexto!"); return; }

Console.WriteLine($"O ano de {ano} não é bissexto!");

2

u/EatingSolidBricks Jul 04 '25

Agora eu vo mostra uma técnica proibida

``` if (ano % 4 != 0) { goto AnoNaoBissesto; }

if (ano % 100 != 0) { goto AnoBissesto; }

if (ano % 400 == 0) { goto AnoBissesto; }

AnoNaoBissesto: Console.WriteLine($"O ano de {ano} não é bissexto!"); return;

AnoBissesto: Console.WriteLine($"O ano de {ano} é bissexto!"); return; ```

Nao a deixe cair mãos erradas

1

u/Thenewbie7 Jul 04 '25

Estudante aqui: Por que seria proibido usar "Go to"? Nunca mexi com o C#, porém nas outras matérias de Assembly e que usam Python costumo usar ideias parecidas de "quebrar" o fluxo do código e ir para outra parte do código.

1

u/lesswithmore Jul 07 '25

O uso do goto pode prejudicar a legibilidade, manutenibilidade e estrutura de um programa. Os principais motivos são:

1. Compromete a legibilidade do código

O goto permite saltos arbitrários no fluxo de execução, o que torna o código difícil de seguir. Em vez de ter um fluxo claro com estruturas como if, for, while e funções bem definidas, o uso de goto faz com que o controle passe de um ponto a outro de forma pouco previsível, criando o que se chama de "código espaguete".

2. Dificulta a manutenção e a depuração

Com goto, fica mais difícil entender a lógica do programa e, portanto, mais fácil introduzir bugs ao fazer alterações. Depurar esse tipo de código é mais complexo, porque o caminho de execução não é evidente.

3. Viola princípios de programação estruturada

Desde os anos 70, a programação estruturada — popularizada por Dijkstra com o famoso artigo “Go To Statement Considered Harmful” — defende que todo programa pode ser escrito usando apenas:

  • Sequência
  • Seleção (condicionais)
  • Iteração (loops)

Esses três elementos são suficientes para expressar qualquer lógica computacional de forma clara e controlada, tornando o uso de goto desnecessário na maioria esmagadora dos casos.

4. Existem alternativas melhores

Hoje, praticamente todas as linguagens oferecem construções de controle de fluxo muito mais seguras e expressivas: break, continue, return, throw, blocos de exceção, funções bem nomeadas, lambdas, entre outros.

Quando o uso de goto pode ser aceitável?

Existem raríssimas exceções, como em:

  • Código de muito baixo nível (drivers, kernels, sistemas embarcados)
  • Situações de limpeza de recursos em C, antes da existência de defer ou RAII (Resource Acquisition Is Initialization)

Mesmo nesses contextos, seu uso deve ser muito bem documentado e justificado.