Así, en Python (aunque creo que se puede aplicar a muchos idiomas), me encuentro con algo como esto muy a menudo:pequeña redundancia de código dentro mientras que los bucles (no se siente limpio)
the_input = raw_input("what to print?\n")
while the_input != "quit":
print the_input
the_input = raw_input("what to print?\n")
Tal vez estoy siendo demasiado quisquilloso, pero no me gusta cómo debe repetirse la línea the_input = raw_input("what to print?\n")
. Disminuye la facilidad de mantenimiento y la organización. Pero no veo ninguna solución alternativa para evitar el código duplicado sin empeorar aún más el problema. En algunos idiomas, podría escribir algo como esto:
while ((the_input=raw_input("what to print?\n")) != "quit") {
print the_input
}
Esto es definitivamente no Pythonic, y Python no permite ni siquiera para la asignación dentro de las condiciones de bucle que yo sepa.
Este código válido fija la redundancia,
while 1:
the_input = raw_input("what to print?\n")
if the_input == "quit":
break
print the_input
pero no se siente del todo bien tampoco. El while 1
implica que este ciclo se ejecutará para siempre; Estoy usando un bucle, pero dándole una condición falsa y poniendo el real dentro de él.
¿Estoy siendo demasiado quisquilloso? ¿Hay una mejor manera de hacer esto? ¿Quizás hay alguna construcción de lenguaje diseñada para esto que yo no sepa?
Creo que la primera forma es perfectamente aceptable. –
Este es un patrón común llamado [loop y half] (http://www.cs.duke.edu/~ola/patterns/plopd/loops.html#loop-and-a-half). –