Funciones en Java
EJEMPLO { MultiplicarNumeros } Supongamos que se quiere escribir un programa que solicite dos números enteros por teclado al usuario y, después, calcule la multiplicación de dichos números, mostrando por pantalla el resultado. Por ejemplo, en pantalla se podría ver:
Para ello, en Java se puede escribir el siguiente código:
import java.util.Scanner;
public class MultiplicarNumeros
{
public static void main(String[] args)
{
int n1, n2, producto;
Scanner teclado = new Scanner(System.in);
System.out.print("Introduzca el primer número: ");
n1 = teclado.nextInt();
System.out.print("Introduzca el segundo número: ");
n2 = teclado.nextInt();
producto = n1 * n2;
System.out.printf("La multiplicación es: %d", producto);
}
}
No obstante, si se quisiera considerar la realización de la multiplicación como una función, teniendo en cuenta que en Java las funciones se implementan como métodos, la solución podría ser:
import java.util.Scanner;
public class MultiplicarNumeros2
{
public static void main(String[] args)
{
int n1, n2, producto;
Scanner teclado = new Scanner(System.in);
System.out.print("Introduzca el primer número: ");
n1 = teclado.nextInt();
System.out.print("Introduzca el segundo número: ");
n2 = teclado.nextInt();
producto = multiplicar(n1, n2);
System.out.printf("La multiplicación es: %d", producto);
}
private static int multiplicar(int x, int y)
{
return x * y;
}
}
Véase que, se ha llamado al método multiplicar, pasándole los parámetros actuales n1 y n2:
producto = multiplicar(n1, n2);
Al hacer la llamada a multiplicar, los parámetros formales x e y reciben los valores (datos) de n1 y n2 –fíjese que son del mismo tipo (int, int)– haciéndose una copia de dichos datos. Por lo que, aunque este no sea el caso, si los valores de x e y fuesen modificados dentro de multiplicar, los valores de n1 y n2 no se verían afectados.
private static int multiplicar(int x, int y)
{
return x * y;
}
Respecto al método multiplicar, fíjese que se ha declarado:
- Privado (private): por lo que no podrá ser llamado desde fuera de la clase que lo contiene, es decir, desde fuera de la clase MultiplicarNumero2.
- Estático (static): ya que, al igual que main, se trata de un método de clase asociado a la clase MultiplicarNumero2 y, en consecuencia, puede ser invocado aunque no exista ningún objeto de dicha clase.
- De tipo integer (int): debido a que, devuelve el resultado de multiplicar x * y, que es un número entero. Para indicar esto, se ha utilizado la palabra reservada return.