Pregunta

Si "bandera" es cierto que tengo que realizar el paso no. 1 de otro modo evitarlo. ¿Hay una salida para saltar esta comprobación repetitiva innecesaria dentro del bucle. (Como el valor de la bandera no está cambiando mientras que la ejecución del bucle)

private void method(boolean flag) {
        while (man > woman) {
            if (flag) {
                // Step no. 1
                System.out.println(flag);
            }
        }
    }
¿Fue útil?

Solución

No estoy seguro de que es productiva que preocuparse de optimizaciones a este nivel. Por lo general, es más importante para conseguir el funcionamiento del programa y pasar a la siguiente problema.

Una vez dicho esto, hay una optimización llamado bucle unswitching que algunos compiladores va a hacer por ti. Duplican el bucle, una vez con y otra sin el condicional, y se mueven hacia afuera el condicional para seleccionar el bucle. (En el ejemplo, usted podría hacer todo el bucle condicional, pero supongo que es sólo un artefacto de la simplificación de desbordamiento de pila.)

Pero esto es sólo una razón más para no preocuparse demasiado acerca de optimizaciones, al menos, no hasta que tenga un perfil y usted sabe que esta región del código es responsable de cantidades detectables de tiempo de ejecución.

Sin embargo, lo mejor es escribir código tan limpia como sea posible y desconcertante a través de temas como este le enseñará cosas buenas ...

De hecho, condicionales de lazo invariante me molestan demasiado. No creo que hay una respuesta general. Hay respuestas de lujo que involucran funciones o lambdas de orden superior, respuestas "dejar-que-a-la-compilador de respuestas", refactor-el-todo-exterior-rutina ... en general me aprobaría lo hace el código parezca más pequeño. Usted tiene que dar prioridad a fin de discriminar ...

Otros consejos

Depende del alcance de do. Si do siempre es cierto, no es necesario comprobar por ella y puede eliminar if (do). No hay ninguna razón para establecer una variable a cierto si siempre va a ser verdad. ¿Cuál es el alcance?

Si el valor de hacer cambios en cualquier momento en el circuito, hay que comprobar que cada vez a menos que vuelva a escribir el código para que el do == true estado se maneja fuera del bucle de corriente. (tal vez en un bucle más pequeña, depende de lo que estás tratando de hacer [sin juego de palabras])

while (man > woman) {

Tenga cuidado con los bucles infinitos aquí: -)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top