La declaración de
un método indica el tipo del resultado que devuelve el método.
Si el método no
devuelve nada, se dice "void".
En Java los
métodos sólo pueden devolver un único valor.
Si necesitara
devolver varios valores, hay múltiples opciones:
·
use
como retorno un tipo estructurado; es decir, una clase con varios campos para
los diferentes valores del resultado.
El método crea un objeto resultado con los datos pertinentes.
Es la solución más elegante; pero pudiera ser costosa en ejecución.
·
pase
como argumento un tipo estructurado; es decir una clase con varios campos para
los diferentes valores del resultado.
El método carga los resultados en al objeto pasado.
Es menos elegante; pero más eficaz en ejecución al evitar la creación de nuevos
objetos.
·
use
los campos de la clase a la que pertenece el método.
El método carga en ellas los resultados.
Aunque depende mucho de cada caso, puede dar lugar a programas ininteligibles,
debido a que se modifican campos inesperados. Es (muy) poco recomendable.
A esta forma de programar se la conoce como “por efecto colateral” (side
effect programming).
a x2 + b x + c = 0 |
public
class EcuacionGrado2 { private double a, b, c; public EcuacionGrado2(double a, double b,
double c) { this.a = a; this.b = b; this.c = c; } // resultado estructurado public Solucion raices() { double discriminante = b * b - 4 * a * c; if (discriminante >= 0.0) { double x1 = (-b +
Math.sqrt(discriminante)) / (2 * a); double x2 = (-b -
Math.sqrt(discriminante)) / (2 * a); return new Solucion(true, x1, x2); } else { double real = (-b +
Math.sqrt(-discriminante)) / (2 * a); double imag = (-b - Math.sqrt(-discriminante)) /
(2 * a); return new Solucion(false, real, imag); } } // modificación del argumento de llamada public void raices(Solucion solucion) { double discriminante = b * b - 4 * a * c; if (discriminante >= 0.0) { double x1 = (-b +
Math.sqrt(discriminante)) / (2 * a); double x2 = (-b -
Math.sqrt(discriminante)) / (2 * a); solucion.real = true; solucion.valor1 = x1; solucion.valor2 = x2; } else { double real = (-b +
Math.sqrt(-discriminante)) / (2 * a); double imag = (-b -
Math.sqrt(-discriminante)) / (2 * a); solucion.real = false; solucion.valor1 = real; solucion.valor2 = imag; } } public class Solucion { boolean real; double valor1; double valor2; public Solucion(boolean real, double
valor1, double valor2) { this.real = real; this.valor1 = valor1; this.valor2 = valor2; } } } |
Temas relacionados
115. Método [method] (concepto)