Foros del Web » Programación para mayores de 30 ;) » Java »

evitar if anidados

Estas en el tema de evitar if anidados en el foro de Java en Foros del Web. Hola a todos, no se como evitar hacer una serie de if anidados por un switch o similar (lo de los if anidados me parece ...
  #1 (permalink)  
Antiguo 20/04/2011, 03:33
 
Fecha de Ingreso: marzo-2009
Mensajes: 509
Antigüedad: 15 años, 9 meses
Puntos: 17
evitar if anidados

Hola a todos, no se como evitar hacer una serie de if anidados por un switch o similar (lo de los if anidados me parece una solución muy poco elegante y quiero evitarlo)

Se trata de ejecutar 5 funciones independientes que devuelven booleanos, si la primera es "true" se comprueba la segunda, si da "true" la tercera...

si alguna devuelve "false" se sale, vamos, es un switch... pero como son boolean, ¿cómo se podría hacer?

Gracias!!!
  #2 (permalink)  
Antiguo 20/04/2011, 03:43
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años, 7 meses
Puntos: 306
Respuesta: evitar if anidados

Si quieres que todas se ejecuten y luego comprobar si han sido correctas, por cada true suma 1 a una variable, si llega a 5 todo OK. Podrías hacer algo así.

i = i + (funcion1)?1:0

Si quieres que se ejecuten si la anterior se ha ejecutado correctamente, haces la llamada a la siguiente dentro de la primera función si el resultado de la primera es correcto.

Cada función devuelve false si no cumple, y el valor de la función que llama si cumple.

Algo parecido es lo que se usa en los interceptores de Struts2, por ejemplo.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #3 (permalink)  
Antiguo 20/04/2011, 03:51
 
Fecha de Ingreso: marzo-2009
Mensajes: 509
Antigüedad: 15 años, 9 meses
Puntos: 17
Respuesta: evitar if anidados

hola Xerelo, muchas gracias, la primera opción no es lo que quiero, mi programa hará cosas distintas para cada false y otra cosa diferente si todas son ciertas.

La segunda opción, al fin y al cabo son if anidados, ¿Es esto a lo que te refieres?

Código:
public boolean funcion1{

      if(condicion){
            boolean b = función2
      }else {
            return false
       }

}

public boolean funcion2{

      if(condicion){
            boolean b = función3
      }else {
            return false
       }
}
Saludos
  #4 (permalink)  
Antiguo 20/04/2011, 04:09
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años, 7 meses
Puntos: 306
Respuesta: evitar if anidados

Creo que sí, yo la haría así

Código Javascript:
Ver original
  1. public boolean funcion1{
  2.  
  3. boolean b = false;
  4.       if(condicion){
  5.             b = funcion2
  6.  }
  7. return b;
  8. }
  9.  
  10. public boolean funcion2{
  11.  
  12. boolean b = false;
  13.       if(condicion){
  14.             b = funcion3
  15.  }
  16. return b;
  17. }

Piensa que lo de if anidados se refiere más a la forma del código, si haces un if dentro de otro y así sucesivamente, es difícil de entender de un vistazo y las llaves son engorrosas si quieres cambiar algo.

Así en tu main, sólo vas a tener una llamada a una función, en vez de un tochazo de ifs. Mucho más claro, y limpio.

Si tuvieses que indicar cual es la que ha fallado, sería distinto.

Con la misma estructura, podrías hacer que si es incorrecta devuelva su número en negativo. Si llega al final tendrás un 5, y si falla un -X.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #5 (permalink)  
Antiguo 20/04/2011, 04:17
 
Fecha de Ingreso: marzo-2009
Mensajes: 509
Antigüedad: 15 años, 9 meses
Puntos: 17
Respuesta: evitar if anidados

hola! si que tengo que indicar el fallo, creo que lo voy a hacer con estructura if-else if - else, ¿hay algo más elegante?

Gracias!
  #6 (permalink)  
Antiguo 20/04/2011, 09:13
Avatar de nup_  
Fecha de Ingreso: noviembre-2010
Mensajes: 265
Antigüedad: 14 años, 1 mes
Puntos: 32
Respuesta: evitar if anidados

Hola:

Por qué no pruebas con lo obvio:

if (funcion1() && funcion2() && funcion3() && funcion4() && funcion5())
// algo
else
// otro algo

Al final hace lo q deseas.

saludos;

Nup_


PD: Upps... no habia visto la parte en q tienes q indicar cual falló. Si es así esa forma no te va a servir.
  #7 (permalink)  
Antiguo 20/04/2011, 11:18
 
Fecha de Ingreso: noviembre-2010
Mensajes: 29
Antigüedad: 14 años
Puntos: 0
Respuesta: evitar if anidados

jaja, simon, son puros ands... XD
  #8 (permalink)  
Antiguo 20/04/2011, 14:01
 
Fecha de Ingreso: marzo-2009
Mensajes: 509
Antigüedad: 15 años, 9 meses
Puntos: 17
Respuesta: evitar if anidados

Gracias! pero claro tengo que saber cual falló! al final he optado por el if-else if- else

Etiquetas: anidados
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:25.