Pregunta

Si tengo algo así como un bucle o un conjunto de sentencias if / else, y quiero devolver un valor desde el nido (ver más abajo), es la mejor manera de hacer esto para asignar el valor a un campo o propiedad y devolver eso?

Ver abajo:

bool b;

public bool ifelse(int i)
{
if(i == 5)
{
b = true;
}

else
{
b = false;
}
return b;
}
¿Fue útil?

Solución

Sí, ese es un buen estilo.

La alternativa (que sería mala ) sería hacer esto:


public bool ifelse(int i) 
{ 
    if(i == 5) 
    { 
        return true; 
    }
    else 
    { 
        return false; 
    }
}

La razón por la cual los puntos de retorno múltiples se consideran un mal estilo es que, especialmente para métodos más grandes, puede ser difícil hacer un seguimiento del flujo del programa dentro de un método porque podría salir en cualquier punto. Esto puede ser una pesadilla para depurar. Sin embargo, si tiene una variable de retorno que asigna, puede ver esa variable y saber exactamente cuándo se devolverá (desde un solo lugar).

Este no es siempre el caso, ya que con cada punto estilístico en la programación hay aspectos buenos y malos.

Otros consejos

¿qué pasa con

return i == 5;

Hay varias vistas sobre esto. Creo que la mayoría de las personas (incluyéndome a mí) tienden a preferir regresar tan pronto como tenga una respuesta y no haya más trabajo por hacer. Algunas personas argumentarán que solo debe regresar en la última declaración de un método. Sin embargo, en realidad puede hacer las cosas más complicadas en algunas situaciones.

Siguiendo lo que he sugerido, su ejemplo sería más corto y simple:

public bool ifelse(int i)
{
if(i == 5)
{
return true
}
return false
}

Si b solo se usa para calcular el valor de retorno de su método, entonces debe convertirlo en una variable local (definida dentro del método).

public bool ifelse(int i)
{
  bool b;
  /*
  Some code to calculate b
  */
  return b;
}

Como otros han sugerido, si su método es simple, evitaría usar una variable temporal por completo y devolvería el resultado tan pronto como se conozca. Una regla general sería usar el método que haga que el código sea más fácil de leer.

Diría que, en general, solo debe regresar de un método en dos lugares: cerca del principio (como en condiciones de guardia) y cerca del final; Si el método tiene alguna extensión, debe usar una variable temporal como mencionó, de lo contrario, las personas que leen el código pueden tener más dificultades para seguirlo.

Como se señaló, tener más de una declaración de devolución tiene el inconveniente de encontrarlas se vuelve difícil. OTOH en algunos casos, la lógica adicional necesaria para escapar a esa declaración de retorno es peor que el problema que está resolviendo el estilo.

El principal problema que conozco sobre las devoluciones múltiples es que puede olvidarse rápidamente de realizar un proceso de limpieza o similar en un nuevo punto de devolución. En mi humilde opinión, esto es tanto un problema con el formulario de retorno único porque la ruta de escape tiene que recordar incluir ese código y ningún otro código. Una solución a esto, disponible en algunos lenguajes como c #, es el bloque finalmente o está más ordenado en declaración de alcance como se demuestra aquí . (OK, ahora sacaré mi caja de jabón)

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