O que é o Antipadrão de Caso Prático?

17

O artigo de hoje do TDWTF começa com uma confissão do autor:

Eu não sabia o que era o antipadrão for-case até relativamente recentemente, quando havia uma série de artigos condenando-o como antipadrão. Tenho certeza de que provavelmente já o usei em algum momento, mas nunca o conheci pelo nome . É considerado um antipadrão de livro didático que geralmente implica um mal-entendido de loop for, declarações de caso, o problema sendo resolvido ou uma combinação dos três.

Ele então prossegue como se o leitor, naturalmente, soubesse o que é o antipadrão do Caso For, sem que seja necessária qualquer explicação adicional.

Mas eu não! Não vi a "série de artigos" de que Remy fala, e a única referência significativa que posso encontrar no Google (além do artigo de Remy) é um post de Raymond Chen sobre o antipadrão for-if , aparentemente relacionado . Ele também não define o "antipadrão para casos".

O que é esse "antipadrão for-case" sobre o qual esses caras estão falando e o que o torna um antipadrão?

Mark Amery
fonte
3
É comumente conhecido como (e mais fáceis de encontrar através de motores de busca) como o loop-chave anti-padrão
David Arno

Respostas:

23

O "padrão" foi introduzido em um artigo anterior do Daily WTF. A idéia básica é que você tenha um forloop com um caseinterior que é selecionado com base na forvariável de índice do loop.

Assumindo que a variável de índice não pode ser alterado dentro do loop, (o que nem sempre é verdade, dependendo do idioma que você está usando,) um pouco de análise demonstra que a execução é exatamente o mesmo como se você removeu o foreo caseinteiramente e todos os blocos de casos foram simplesmente executados sequencialmente.

Mason Wheeler
fonte
0

Para simplificar, você está aninhando dois métodos diferentes de controle de fluxo, o que dificulta a compreensão do código.

Se você vir um loop for, geralmente assume que as condições do loop controlarão a lógica dentro do loop. Mas se você aninhar uma declaração de caso inteira dentro, com toda a sua própria lógica, isso sai pela janela.

Satanicpuppy
fonte
1
Não há nada inerentemente errado em aninhar duas estruturas de fluxo de controle. Às vezes você precisa. Mas neste caso é inútil.
Reintegrar Monica
"o que torna o código mais difícil de entender." Rapaz, isso é sempre o eufemismo do dia / mês / ano.
Peter Rowell