¿Qué es el antipatrón For-Case?

17

El artículo de TDWTF de hoy comienza con una confesión del autor:

No sabía cuál era el antipatrón For-Case hasta hace relativamente poco tiempo, cuando hubo una serie de artículos que lo condenaban como un antipatrón. Estoy seguro de que probablemente lo haya usado , en algún momento, pero nunca lo supe por su nombre . Se considera como un antipatrón de libro de texto que generalmente implica un malentendido de bucle for, declaraciones de casos, el problema que se está resolviendo o una combinación de los tres.

Luego procede como si el lector, naturalmente, supiera cuál es el antipatrón For-Case sin que se necesite ninguna explicación adicional.

Pero yo no! No he visto la "serie de artículos" de los que habla Remy, y la única referencia significativa que puedo encontrar en Google (además del artículo de Remy) es una publicación de blog de Raymond Chen sobre el antipatrón for-if , que aparentemente está relacionado . Sin embargo, tampoco define el "antipatrón para el caso".

¿Qué es este "antipatrón For-Case" del que hablan estos tipos y qué lo convierte en un antipatrón?

Mark Amery
fuente
3
Es comúnmente conocido (y más fácil de encontrar a través de los motores de búsqueda) como el antipatrón de cambio de bucle
David Arno,

Respuestas:

23

El "patrón" se introdujo en un artículo anterior de Daily WTF. La idea básica es que tiene un forbucle con un caseinterior que se selecciona en función de la forvariable de índice del bucle.

Suponiendo que la variable de índice no se puede cambiar dentro del bucle, (que no siempre es cierto, en función del idioma que está utilizando,) un poco de análisis demuestra que la ejecución es exactamente el mismo que si ha quitado el fory la casetotalidad y todos los bloques de casos simplemente se ejecutaron secuencialmente.

Mason Wheeler
fuente
0

En pocas palabras, está anidando dos métodos diferentes de control de flujo, lo que hace que el código sea más difícil de entender.

Si ve un bucle for, generalmente asume que las condiciones del bucle controlarán la lógica dentro del bucle. Pero si luego anida una declaración de caso completa en su interior, con toda su propia lógica, eso se va por la ventana.

Satanicpuppy
fuente
1
No hay nada inherentemente malo en anidar dos estructuras de flujo de control. A veces lo necesitas. Pero en este caso es inútil.
Restablece a Monica
"lo que hace que el código sea más difícil de entender". Vaya, esa es la subestimación del día / mes / año.
Peter Rowell