valor devuelto (resultado)

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)