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

Varios returns

Estas en el tema de Varios returns en el foro de Java en Foros del Web. Hola amigos En java no se pueden hacer varios returns verdad? Dependiendo de un if por ejemplo public boolean conectar() { if(tal cosa) return true; ...
  #1 (permalink)  
Antiguo 22/09/2006, 08:17
 
Fecha de Ingreso: noviembre-2003
Ubicación: Paraguay
Mensajes: 382
Antigüedad: 20 años, 5 meses
Puntos: 4
Mensaje Varios returns

Hola amigos

En java no se pueden hacer varios returns verdad? Dependiendo de un if por ejemplo

public boolean conectar()
{
if(tal cosa)
return true;
else
return false;
}
  #2 (permalink)  
Antiguo 22/09/2006, 09:06
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Sí se puede, no se suele recomendar por cuestión de legibilidad, pero se puede.

Con compilar y probar eso que has escrito ya tenías tu respuesta
  #3 (permalink)  
Antiguo 22/09/2006, 09:10
 
Fecha de Ingreso: noviembre-2003
Ubicación: Paraguay
Mensajes: 382
Antigüedad: 20 años, 5 meses
Puntos: 4
Compilando no funciona mi querido amigo GreenEyed.

Por eso lo pregunte
  #4 (permalink)  
Antiguo 22/09/2006, 09:30
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
No se que error de compilación te da, pero seguro que es otro por que esa restricción no existe. Era una broma de todas formas .

Si pones el mensaje de error del compilador, te podremos decir cual es la causa real, aunque en estos casos lo más probable es que haya un "camino de ejecución" en el que no aparezca ningún return, y eso si que el compilador no deja hacerlo.

S!
  #5 (permalink)  
Antiguo 22/09/2006, 09:45
 
Fecha de Ingreso: noviembre-2003
Ubicación: Paraguay
Mensajes: 382
Antigüedad: 20 años, 5 meses
Puntos: 4
Si tengo el metodo:

public boolean conectar()
{
if(lo que sea)
return true;
else
return false;

}me marca esta linea y me dice "el metodo no devuelve ningun valor"

lo que hice fue hacerlo asi aunque segun lo que me decis debería funcionar

public boolean conectar()
{
int retorno = 0;
if(lo que sea)
retorno = 1;
else
hago todo lo que tengo que hacer

return retorno
}

La idea era poder usar el metodo en un if asi:

if(conectar())
  #6 (permalink)  
Antiguo 22/09/2006, 11:23
Avatar de stock  
Fecha de Ingreso: junio-2004
Ubicación: Monterrey NL
Mensajes: 2.390
Antigüedad: 19 años, 10 meses
Puntos: 53
lo que pasa es que el compilador espera que regreses un boolean, al poner el return dentro de un if, el compilador lo ignora, por que es una condicion, osea, puede suceder o no... entonces es por eso que te marca el error...

si, ya lo habia notado, pienso que no deberia, perooooo buenooooo nuestros amigos de SUN asi lo diseñaron jejejejjeje

have funnnnnnn
  #7 (permalink)  
Antiguo 22/09/2006, 11:27
Avatar de stock  
Fecha de Ingreso: junio-2004
Ubicación: Monterrey NL
Mensajes: 2.390
Antigüedad: 19 años, 10 meses
Puntos: 53
Cita:
Iniciado por micayael Ver Mensaje
lo que hice fue hacerlo asi aunque segun lo que me decis debería funcionar

[/COLOR]public boolean conectar()
{
int retorno = 0;
if(lo que sea)
retorno = 1;
else
hago todo lo que tengo que hacer

return retorno
}

La idea era poder usar el metodo en un if asi:

if(conectar())
puedes hacer algo asi:

Código PHP:
public boolean conectar()
{
    if(
conectar())
       return 
true;

    return 
false;

basicamente es lo mismo, pues si la condicion cumple, regresa verdadero, si no regresa falso, implicitamente esta el else en esas sentencias

have funnnnnn
  #8 (permalink)  
Antiguo 22/09/2006, 11:36
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Código:
  public boolean conectar()
  {
    boolean algunSupuestoValor = ...;
    if(algunSupuestoValor)
    {
      return true;
    }
    else
    {
      return false;
    }
  }

o 

  public boolean conectar()
  {
    boolean algunSupuestoValor = ...;
    if(algunSupuestoValor) return true;
    else return false;
  }
Compilan perfectamente.
  #9 (permalink)  
Antiguo 22/09/2006, 12:26
 
Fecha de Ingreso: noviembre-2003
Ubicación: Paraguay
Mensajes: 382
Antigüedad: 20 años, 5 meses
Puntos: 4
Bueno me parece interesante tu manera de hacerlo Stock. La voy a adoptar gracias. Según lo que dices GreenEyed tambien debería funcionar en un try verdad? Esto para salir nada más ya de la duda.
  #10 (permalink)  
Antiguo 22/09/2006, 14:13
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Depende, como te he dicho TODOS los caminos de ejecución deben tener un return, asi que si tienes un try/catch y al final de cada catch no pones un return, o en su defecto lo pones despues del bloque try/catch, entonces no has cubierto todas las posibilidades y por eso da error.

Lo de que al ser una instruccion "if" ignore el return de dentro y de error no es cierto, lo que pasa es que tienes que poner otro en el camino de ejecucion si la condicion no se cumple. Sea en el else o después de cerrar el bloque if/else.

La idea básica es que pase lo que pase, tu metodo ha de acabar en un return (o lanzar una excepcion). Si pones varios return ocurren estas cosas y es por eso que lo más recomendable es utilizar una variable local y un solo return al final.

S!
  #11 (permalink)  
Antiguo 22/09/2006, 14:48
 
Fecha de Ingreso: septiembre-2006
Mensajes: 32
Antigüedad: 17 años, 7 meses
Puntos: 0
hay una opcion un poco mas clara y con menos codigo:

p.e
Código:
public boolean esMayor(int a,int b) {
    return (a>b);
}
  #12 (permalink)  
Antiguo 22/09/2006, 17:21
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Hombre, eso sirve para condiciones simples por que en cuanto la cosa se complica... la cosa se vuelve ilegible o imposible .
  #13 (permalink)  
Antiguo 25/09/2006, 06:54
 
Fecha de Ingreso: noviembre-2003
Ubicación: Paraguay
Mensajes: 382
Antigüedad: 20 años, 5 meses
Puntos: 4
Ok GreenEyed muchas gracias por tus explicaciones.

Lo explicaste muy bien.
  #14 (permalink)  
Antiguo 26/09/2006, 07:58
 
Fecha de Ingreso: septiembre-2006
Mensajes: 32
Antigüedad: 17 años, 7 meses
Puntos: 0
Cita:
Iniciado por GreenEyed Ver Mensaje
Hombre, eso sirve para condiciones simples por que en cuanto la cosa se complica... la cosa se vuelve ilegible o imposible .
eso depende de que tan ordenado este el código que tan claro sea el nombre de los metodos, no de la sintaxis que se use

saludos,
  #15 (permalink)  
Antiguo 26/09/2006, 10:47
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Si tienes una operación en la que para devolver el boolean tienes que comprobar un valor en la BDD o leer un fichero o abrir un socket y leer un valor, ya me dirás como haces para meter todo eso dentro de la clausula "return". A eso me refiero .
  #16 (permalink)  
Antiguo 26/09/2006, 13:06
 
Fecha de Ingreso: septiembre-2006
Mensajes: 32
Antigüedad: 17 años, 7 meses
Puntos: 0
"meteria todo eso" de la misma forma que tengo que meterlo en la sentencia if.

mi critica es a la estructura

Código PHP:
if(todas mis condiciones complejas) {
 return 
true;
} else {
return 
false;

se entiende de la misma forma:

Código PHP:
return (todas mis condiciones complejas); 
al tiempo que se elimina una linea de ejecucion.

saludos.
  #17 (permalink)  
Antiguo 26/09/2006, 13:57
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Ah, si te referías a eso, pues es igual, como tú dices. Yo es que la linea esa me la había tomado como un ejemplo de "hacer varios return" en un método, no como nada serio.

Si es solo para devolver true o false, entonces el return como tu dices es más corto, pero yo estaba pensando en cosas más complejas que un sólo if/else para devolver un booleano y pense que tambien te referías a eso. No nos hemos entendido .

S!
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 05:43.