Autor
|
Tema: while(true) mala practica? (Leído 15,666 veces)
|
Panic0
Desconectado
Mensajes: 218
|
Hola, como estan, vengo enojado porque hoy mi profesor me anulo un examen por usar while(true) (en java)....
Es muy mala practica usar un while true de esa forma?
Gracias!
|
|
|
En línea
|
Los ataques de pánico suelen comenzar de forma súbita, sin advertencia.
|
|
|
Danielㅤ
Desconectado
Mensajes: 1.835
🔵🔵🔵🔵🔵🔵🔵
|
Hola, si tal cual tu profesor tiene razón y de hecho yo siempre he pensado que usar while(True) es una mala práctica porque lo veo irrelevante, ya que él while además de ser un bucle es como si fuera una función recursiva que se llama a si misma y los parámetros es lo que se tiene que cumplir para que el bucle genere ciclos (vueltas).
Para mi la mejor manera de usar un bucle infinito es con while(1).
Saludos
|
|
|
En línea
|
|
|
|
Tachikomaia
Desconectado
Mensajes: 1.411
Hackentifiko!
|
https://www.reddit.com/r/CharruaDevs/comments/z2bjqy/posta_es_malo_usar_whiletrue/De ahí, concuerdo conque es mejor poner la condición que andar poniendo breaks o quién sabe qué, quién sabe donde, pero puede resultar cómodo hacerlo como lo hiciste y me parece bien salvo que implique muchas cosas complicadas. Por ejemplo podés pensar "quiero que cuando se presione tales teclas sucedan cuales cosas" y después que ponés "repetir" ves hasta cuando querés que se repita o los casos de quiebre donde los quieras. Si es así, es mejor poner por ejemplo terminar = "no" do cosa while terminar=="no" O sea en vez de poner breaks cambiás la variable terminar y es lo mismo y más claro, AUNQUE menos rápido e intuitivo, quizá por eso se intuye poner cualquier condición... No me cierra mucho eso de las buenas/malas prácticas, hago lo que quiero. Bueno, para mí es mala práctica, o al menos desagradable de leer, el no tabular bien los códigos (si me vas a criticar que en el meme están mal, te aviso que no es tanto mi culpa, hice lo que pude), por ejemplo... pero creo que eso es otro tema.
|
|
|
En línea
|
|
|
|
MCKSys Argentina
|
Hola! Le preguntaste a tu profesoir el porqué te anuló el examen? Porqué el considera que es una mala práctica? Porque él es quien devería responder primero... Desde mi punto de vista, se considera mala practica pues internamente deve evaluarse la condición que termina el bucle. Y puede que por error (por complejidad del código, lógica del algoritmo u otro) nunca se alcance la condición, por lo cual el bucle infinito sería infinito. Lo ideal es examinar la condición al momento de ejecutar el while (en la declaración del loop). Ahora, habiendo reverseado muchos programas, puedo asegurarte que (a bajo nivel) el while (True) se usa muchísimo. Incluso en muchos códigos de alto nivel (donde es más sencillo ver los errores en el código) existen innumerables while(true). Pero siempre está la sombra de error en la lógica del algoritmo, por lo cual la condición de fin nunca se cumple y terminas con un bucle infinito. Saludos! PD: Para mi la mejor manera de usar un bucle infinito es con while(1).
While(1) es lo mismo que While(True) pues 1 resuelve como True cuando se lo evalúa como boolean. No me cierra mucho eso de las buenas/malas prácticas, hago lo que quiero. Bueno, para mí es mala práctica, o al menos desagradable de leer, el no tabular bien los códigos
Cuando trabajes codeando en una empresa, verás que tendrás que aprender dichas buenas/malas prácticas; pues tu código deberá ser entendido/modificado/evaluado por otras personas (aunque puedes seguir haciendo lo que quieras, en algún momento tendrás inconvenientes por ello). Es por ello que existen dichas prácticas.
|
|
|
En línea
|
MCKSys Argentina "Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."
|
|
|
**Aincrad**
|
Para mi la mejor manera de usar un bucle infinito es con while(1).
te hiba a comentar que ambos son exactamente lo mismo, ya que el 1 se evalua como True. pero ya te lo pusieron arriba. ------------ Acerca del post principal. los ciclos while siempre los he considerado malos (es cuestion mia, no tengo motivo), si los he usado pero siempre prefiero usar un ciclo for, incluso cuando necesito un bucle infinito, uso un for. Podrias poner tu codigo en tal caso para evaluarlo.
|
|
« Última modificación: 9 Diciembre 2022, 14:54 pm por **Aincrad** »
|
En línea
|
|
|
|
MinusFour
|
Técnicamente, lo que se argumenta es el desplace de la condición al cuerpo del while. Yo no creo que esa sea razón para anular un examen.
Y si te anula el examen porque al usar true generas un loop infinito. Hay varias formas en las que puedes producir loops infinitos con condiciones. A veces incluso es mucho más difícil dar con el loop infinito puesto que la condición que lo genera se da también en el cuerpo.
Yo no anularía un examen, a menos que el examen te este evaluando eso, el uso de loops con condiciones. La instrucción debió haber sido explicita. Si la instrucción del examen no incluye los requerimientos mínimos en la cual se debe hacer uso de una condición entonces no hay motivo de anular el examen.
Si tu, sabiendo que el examen era acerca de este tema en específico e inclusive cuenta con la instrucción que delinea los requerimientos entonces si, el maestro hizo bien en anularte el problema/examen.
Los exámenes de programación son para evaluar los conceptos de programación aprendidos. No para saber si sabes programar bien cualquier cosa o no.
|
|
« Última modificación: 9 Diciembre 2022, 16:19 pm por MinusFour »
|
En línea
|
|
|
|
Serapis
|
Yo no lo veo como una mala práctica...
Yo uso el formato, como un modo de señalar que hay múltiples condiciones que debe cumplir el bucle y que no todas se deben procesar a la vez.
A menudo es preciso verificar una condición y decidir en ella si se sale del bucle o no, pero sería un error de semántica incluirla con el while si no es la única condición, pues hace pensar eso... que es la única condición que debe cumplirse... y falsea así su propósito.
...como digo a menudo tras una condición cumplida debe procesarse algo y luego verificarse otra condición (indistintamente de si luego en ese preciso instante la primera condición ya no se cumple). Entonces la condición expresada tras el while ensombrece al resto de condiciones más o menos complejas que haya dentro del bucle.
En tales situaciones suele ser más adecuado un 'while true', y para mi refleja que ese bucle tiene varias condicion es decir que es compleja y no una simple evaluación... informa con ello al desarrollador de que el bucle es solo la 'patraña' sintáctica y el meollo de condiciones está dentro del bucle.
Después de todo un condicional puede ser visto como un bucle de 0 ó 1 ciclo...
Ahora como reza el dicho: "donde hay patrón no manda marinero"... así, si tu profe te regaña (no debería llegar a suspenderte si no hubo amonestación previa por lo mismo), debes hacer lo que te dice... y tú ya deliverarás si el razonamiento es o no justificado, para decidir por tí mismo si lo adoptas o solo lo encumbras mientras estés a su sombra.
|
|
|
En línea
|
|
|
|
Serapis
|
los ciclos while siempre los he considerado malos (es cuestion mia, no tengo motivo), si los he usado pero siempre prefiero usar un ciclo for, incluso cuando necesito un bucle infinito, uso un for.
En general un bucle 'while' es más rápido de ejecutarse que un bucle 'for'... (depende del compilador si hace optimizaciones al for, no hay diferencia), sin embargo, esa no es la razón discriminatoria de usar uno u otro tipo de bucle. Los bucles 'for', los usas cuando hay una cantidad finita conocida de antemano (sea constante o varible), en cambio el bucle 'while' suelen usarse cuando la cantidad (la condición, no necesarisamente numérica) no se sabe cuando se cumplirá, aunque se prevee que sí se dará... Entonces cuando usas un bucle u otro estás declarando si la condición es conocida o no de antemano... esa y solo esa debería ser la regla que indique cuando usar un tipo de bucle. ...de hecho los bucles 'while' pueden absorber prefectamente a los bucles 'for', al revés suele añadir redundancia. Para ilustrar esto mismo, te sugiero que programes la 'serie granizo', y veas como aún siendo valores numéricos, el bucle 'while' con el bucle 'while' no tienes inconveniente en marcar la condición, con un bucle 'for', tendrás que forzar redundancia con algún 'if' que traslade un valor a una varible y sea esta luego la que se valúe... de hecho para optimizar dicho bucle deberías hacer un bucle infinito, con un incremento de 0 Para x = n a 1 con incremento de 0 <---- el incremeneto de 0, supone un bucle infinito a priori, pues si inicalmente no vale 1, nunca se aplicará un incremento-decremento a x. n sería el valor inicial de la serie granizo. La serie granizo, toma inicialmente un valor cualquiera, si es par se divide entre 2, si es impar se multiplica por 3... el bucle continúa hasta que la serie decaiga en 2 y finalmente en 1. Dado un número cualquiera se desconoce cuanto tardará en alcanzar la condición de salida (valor 1).
|
|
|
En línea
|
|
|
|
Danielㅤ
Desconectado
Mensajes: 1.835
🔵🔵🔵🔵🔵🔵🔵
|
Solo comentar que si sabía que usar while(True) y while(1) hacen lo mismo de crear un bucle infinito, pero yo prefiero usar while(1), igualmente hay otras formas de crear bucles infinitos y si en algún momento se necesitara detener el bucle se pueden usar diversos métodos en vez de break o usar semaforos.
|
|
« Última modificación: 15 Diciembre 2022, 14:17 pm por Danielㅤ »
|
En línea
|
|
|
|
Tachikomaia
Desconectado
Mensajes: 1.411
Hackentifiko!
|
Yo nunca entendí los for, jaja. Si leo while A==B entiendo que es Mientras A sea igual que B (aunque eso de "==" en vez de "=" no tiene mucha lógica que digamos). Si leo for (i = 0; i < max; i++ ) veo Para i que es 0, mientras i sea menor que max, incrementarle 1. Yo creo que arranca mal porque la palabra "Para" se usa como indicador de cómo hacer algo (ej: Para apagar fuego, use agua), o como pedido de detención (¡Para, detente!), o... bueno, sí: "A José que no sabe multiplicar frutas, durante 1 hora, incrementando los segundos de a 1 darle clases de Matemática. A Pablito que no sabe medir la velocidad conque se propagan las noticias falsas, durante 2 horas, incrementando los segundos de a 2 de Física. Para Juanito que no sabe que la dictadura es una evolución de la monarquía , durante 3 horas, incrementando los segundos de a 1, de Biología" pero así sin contexto no se dice "Para X mientras Y haciendo el incremento Z", se dice "A X...". Sí se está diciendo cómo actuar frente a cierta situación, pero no sé, no me cierra. Además es mucha info en poco tiempo, sin estar diciendo lo más relevante: Qué es lo que se hará. ¿Y si ya tienes definida la variable o quieres que la defina el usuario? Ejemplo: ¿Desde qué número quieres que empiece a mostrar en pantalla los siguientes? n Se podría hacer for (i = n; i < max; i++ ) pero si la variable n no necesita conservar su estado original entonces pa qué crear otra variable. Tal vez for da la opción de no crearla, bueno... Por otro lado se ve limitante, puede ser que en un bucle siempre convenga que una variable incremente y el bucle se acabe cuando la variable alcanza cierto valor, pero no estoy seguro, no veo por qué atarme a eso. ¿Estoy equivocado en algo? Yo uso el formato, como un modo de señalar que hay múltiples condiciones que debe cumplir el bucle y que no todas se deben procesar a la vez.
A menudo es preciso verificar una condición y decidir en ella si se sale del bucle o no, pero sería un error de semántica incluirla con el while si no es la única condición, pues hace pensar eso... que es la única condición que debe cumplirse... y falsea así su propósito.
...como digo a menudo tras una condición cumplida debe procesarse algo y luego verificarse otra condición (indistintamente de si luego en ese preciso instante la primera condición ya no se cumple). Entonces la condición expresada tras el while ensombrece al resto de condiciones más o menos complejas que haya dentro del bucle.
En tales situaciones suele ser más adecuado un 'while true', y para mi refleja que ese bucle tiene varias condicion es decir que es compleja y no una simple evaluación... informa con ello al desarrollador de que el bucle es solo la 'patraña' sintáctica y el meollo de condiciones está dentro del bucle.
Después de todo un condicional puede ser visto como un bucle de 0 ó 1 ciclo... Se <agradece ejemplo.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
¿(Python) Es una mala práctica/costumbre llamar desde __init__ a otros métodos?
Programación General
|
theluigy13etv
|
1
|
3,611
|
13 Mayo 2013, 20:43 pm
por s00rk
|
|
|
Duda, mala práctica?
Java
|
n-utz
|
3
|
3,349
|
11 Diciembre 2017, 17:19 pm
por Serapis
|
|
|
[C++] ¿Utilizar Windows.h es mala práctica?
Programación C/C++
|
deleted_account
|
2
|
2,118
|
19 Enero 2018, 18:29 pm
por deleted_account
|
|
|
[C++] ¿Usar "Using namespace std;" es mala práctica?
Programación C/C++
|
deleted_account
|
2
|
2,886
|
22 Enero 2018, 20:17 pm
por deleted_account
|
|
|
Usar "static" en Concurrencia. ¿mala práctica?
Java
|
fjlopezc17
|
2
|
3,884
|
7 Mayo 2018, 12:58 pm
por srWhiteSkull
|
|