2009/9/18 Alberto Bertogli <albertito@???>
> Por otro lo de asegurar los invariantes creo que no es cierto. Dependiendo
> de
> cuan formal te quieras poner, te pueden hacer mas o menos dificiles las
> cosas,
> pero creo que la complicacion no pasa porque haya o no breaks o continues.
>
Perdón... pero o sos muuucho más hábil que yo al demostrar esas cosas, o
nunca intentaste.
No hay caso que haya intentado que, si no lo transformo a un bucle sin
break/continue, no se me complique notablemente.
Como dije, cada una de esas sentencias te fuerza a considerar un caso
aparte.
Es particularmente molesta la construcción tan mencionada:
while True:
S1
if not C:
break
S2
Justamente porque el invariante natural no se aplica a S1 / if not C: break
/ S2, transformando a
S1
while C:
S2
S1
La demostración sale (usualmente) mucho más fácil.
El tema es que la primer forma es mejor código (porque no repite S1, y luego
es mejor para mantener).
Pero la segunda forma es más fácil de analizar.
Es importantísimo armarse de una librería de semejantes isomorfismos, porque
sucede muy seguido que el código más fácil de leer o mantener no es el más
fácil de analizar.
Para quien no tiene esa transformación presente en su entrenamiento, la
primer forma del while es difícil de entender. Lo vi con mis alumnos (cuando
enseñaba).