Funciones en Java
En programación, muchas veces necesitamos realizar una misma tarea varias veces.
Por ejemplo, podemos necesitar calcular el precio con descuento, mostrar un mensaje o calcular el área de un círculo.
En lugar de escribir el mismo código una y otra vez, podemos agrupar varias instrucciones dentro de una función y después utilizarla cada vez que la necesitemos.
En Java, las funciones se conocen habitualmente como métodos.
IMPORTANTE: En Java utilizaremos principalmente el término método. Cuando hablamos de "funciones" en Java, normalmente nos estamos refiriendo a métodos.
1. ¿Qué es una función?
Una función es un bloque de código que realiza una tarea concreta.
Por ejemplo, podemos crear una función que muestre un saludo:
public static void saludar() {
System.out.println("Hola");
}
Esta función se llama saludar y la acción que realiza es System.out.println("Hola");.
Cuando queramos ejecutarla, podemos escribir:
saludar();
Por ejemplo:
public class EjemploFunciones {
// Arriba del todo colocamos el típico main()
// Aquí es donde "usamos" las funciones, llamándolas por su nombre
public static void main(String[] args) {
saludar();
}
// Abajo definimos las funciones, en este caso saludar()
public static void saludar() {
System.out.println("Hola");
}
}
El resultado mostrado por consola será:
Hola
En resumen, una función puede:
- Definirse:
public static void funcion() {
// código que realiza la función
}
- Llamarse/invocarse:
funcion();
2. ¿Por qué utilizar funciones?
Imaginemos que queremos mostrar el mensaje:
Bienvenido a Java
cinco veces.
Podríamos escribir:
System.out.println("Bienvenido a Java");
System.out.println("Bienvenido a Java");
System.out.println("Bienvenido a Java");
System.out.println("Bienvenido a Java");
System.out.println("Bienvenido a Java");
Pero estamos repitiendo código.
Podemos crear una función:
public static void bienvenida() {
System.out.println("Bienvenido a Java");
}
Y utilizarla tantas veces como queramos:
bienvenida();
bienvenida();
bienvenida();
bienvenida();
bienvenida();
Esto hace que nuestro código sea:
- Más fácil de leer.
- Más fácil de modificar.
- Más fácil de reutilizar.
- Más organizado.
- Más sencillo de mantener.
3. Estructura de una función
Una función básica en Java tiene esta estructura:
public static void nombreFuncion() {
// Código de la función
}
Por ejemplo:
public static void saludar() {
System.out.println("Hola");
}
Vamos a analizar sus partes.
public
Indica quién puede utilizar el método.
De momento utilizaremos public en nuestros ejemplos.
static
Indica que el método pertenece a la clase y podemos utilizarlo sin crear un objeto.
En nuestros primeros programas utilizaremos static para poder llamar a nuestros métodos directamente desde main.
Más adelante veremos más en profundidad su significado.
void
Indica que la función no devuelve ningún valor, simplemente muestra mensaje por consola.
Más adelante veremos funciones que devuelven valores.
saludar
Es el nombre que hemos elegido para nuestra función.
()
Los paréntesis indican los parámetros que recibe la función.
En este caso no recibe ninguno.
{ }
Las llaves contienen el código que se ejecutará cuando llamemos a la función.
4. Llamar a una función
Crear una función no significa que se vaya a ejecutar automáticamente.
Por ejemplo:
public static void saludar() {
System.out.println("Hola");
}
Aquí hemos creado la función, pero todavía no la hemos ejecutado.
Para ejecutarla debemos llamarla:
saludar();
Un programa completo sería:
public class Main {
public static void main(String[] args) {
saludar();
}
public static void saludar() {
System.out.println("Hola");
}
}
Cuando Java llega a:
saludar();
busca el método llamado saludar y ejecuta las instrucciones que contiene.
5. Una función puede tener varias instrucciones
Una función no tiene por qué contener una sola línea.
Podemos incluir tantas instrucciones como necesitemos:
public static void presentacion() {
System.out.println("Hola");
System.out.println("Soy María");
System.out.println("Estoy aprendiendo Java");
}
Cuando llamemos:
presentacion();
se ejecutarán todas las instrucciones:
Hola
Soy María
Estoy aprendiendo Java
Las instrucciones se ejecutan en orden, desde la primera hasta la última.
6. Funciones con parámetros
Hasta ahora hemos creado funciones que no necesitan información.
Pero muchas veces queremos que una función trabaje con unos datos concretos.
Por ejemplo, queremos crear una función que salude a una persona en concreto.
Podemos pasarle el nombre como parámetro:
public static void saludar(String nombre) {
System.out.println("Hola " + nombre);
}
Ahora podemos utilizarla de esta forma:
saludar("Ana");
saludar("Juan");
saludar("María");
El resultado será:
Hola Ana
Hola Juan
Hola María
7. ¿Qué es un parámetro?
Un parámetro es un dato que recibe una función para poder trabajar con él.
En:
public static void saludar(String nombre) {
System.out.println("Hola " + nombre);
}
tenemos:
String nombre
Este es el parámetro.
Estamos diciendo que la función saludar necesita recibir un texto y que vamos a guardar ese texto en una variable llamada nombre.
Cuando llamamos:
saludar("Eric");
el valor:
"Eric"
se guarda en:
nombre
Por lo tanto, dentro de la función:
System.out.println("Hola " + nombre);
sería equivalente a:
System.out.println("Hola " + "Eric");
y obtenemos:
Hola Eric
8. Parámetros de diferentes tipos
Los parámetros pueden ser de cualquier tipo de dato.
Por ejemplo, podemos crear una función que reciba una edad:
public static void mostrarEdad(int edad) {
System.out.println("Tienes " + edad + " años");
}
Podemos llamarla:
mostrarEdad(25);
Resultado:
Tienes 25 años
También podemos utilizar double:
public static void mostrarPrecio(double precio) {
System.out.println("El precio es " + precio + " €");
}
Y llamarla:
mostrarPrecio(19.99);
Resultado:
El precio es 19.99 €
También podemos utilizar boolean:
public static void comprobarEdad(boolean mayorDeEdad) {
System.out.println(mayorDeEdad);
}
9. Varios parámetros
Una función puede recibir más de un parámetro.
Por ejemplo:
public static void presentarPersona(String nombre, int edad) {
System.out.println("Nombre: " + nombre);
System.out.println("Edad: " + edad);
}
Podemos llamarla:
presentarPersona("Ángela", 25);
Resultado:
Nombre: Ángela
Edad: 25
Los parámetros se escriben separados por comas:
String nombre, int edad
El orden es importante.
Si tenemos:
public static void presentarPersona(String nombre, int edad)
debemos llamar al método proporcionando primero un String y después un int:
presentarPersona("Ángela", 25);
No sería correcto:
presentarPersona(25, "Ángela");
porque hemos cambiado el orden de los tipos.
10. Parámetro y argumento
Aunque muchas veces utilizamos estas palabras como si fueran lo mismo, podemos diferenciarlas.
Cuando definimos la función:
public static void saludar(String nombre) {
System.out.println("Hola " + nombre);
}
nombre es un parámetro.
Cuando llamamos:
saludar("Ángela");
"Ángela" es un argumento.
Podemos resumirlo así:
PARÁMETRO → aparece al definir la función
ARGUMENTO → valor que enviamos al llamar a la función
Por ejemplo:
public static void sumar(int a, int b) {
// a y b son parámetros
}
Y:
sumar(5, 3);
5 y 3 son los argumentos.
11. Funciones que devuelven un valor
Hasta ahora hemos utilizado void.
Por ejemplo:
public static void saludar() {
System.out.println("Hola");
}
void significa que la función no devuelve ningún valor.
Pero muchas veces queremos que una función realice un cálculo y nos devuelva el resultado.
Por ejemplo:
public static int sumar(int a, int b) {
return a + b;
}
Esta función recibe dos números y devuelve su suma.
Podemos utilizarla así:
int resultado = sumar(5, 3);
System.out.println(resultado);
Resultado:
8
12. La palabra return
La palabra return sirve para devolver un valor desde una función.
Por ejemplo:
public static int sumar(int a, int b) {
return a + b;
}
Cuando hacemos:
sumar(5, 3);
la función calcula:
5 + 3
y devuelve:
8
Podemos guardar ese valor en una variable:
int resultado = sumar(5, 3);
Ahora:
resultado = 8
13. El tipo de retorno
Cuando una función devuelve un valor, debemos indicar qué tipo de dato devuelve.
Por ejemplo:
public static int sumar(int a, int b)
El int indica que la función devuelve un número entero.
Si queremos devolver un double:
public static double calcularPrecio(double precio, double descuento) {
return precio - (precio * descuento / 100);
}
Podemos utilizarla:
double resultado = calcularPrecio(100, 20);
System.out.println(resultado);
Resultado:
80.0
14. Funciones que devuelven String
También podemos devolver textos.
Por ejemplo:
public static String obtenerSaludo(String nombre) {
return "Hola " + nombre;
}
Podemos utilizarla:
String mensaje = obtenerSaludo("Ana");
System.out.println(mensaje);
Resultado:
Hola Ana
También podemos hacerlo directamente:
System.out.println(obtenerSaludo("Ana"));
15. Funciones que devuelven boolean
Una función también puede devolver true o false.
Por ejemplo, podemos crear una función para comprobar si una persona es mayor de edad:
public static boolean esMayorDeEdad(int edad) {
return edad >= 18;
}
Podemos utilizarla:
boolean resultado = esMayorDeEdad(25);
System.out.println(resultado);
Resultado:
true
16. return termina la función
Cuando Java encuentra un return, la función termina.
Por ejemplo:
public static int ejemplo() {
return 10;
// Si hay código más abajo del return nunca se ejecutaría
}
Una vez ejecutado:
return 10;
la función termina y devuelve 10.
Por eso no podemos poner instrucciones después de un return que sean inalcanzables.
17. Diferencia entre void y return
Podemos comparar:
Función void
public static void mostrarSuma(int a, int b) {
System.out.println(a + b);
}
Esta función muestra el resultado, pero no lo devuelve.
Podemos utilizarla:
mostrarSuma(5, 3);
Función con return
public static int calcularSuma(int a, int b) {
return a + b;
}
Esta función devuelve el resultado.
Podemos guardar el resultado:
int resultado = calcularSuma(5, 3);
Esta segunda opción suele ser más flexible porque podemos decidir qué hacer posteriormente con el resultado.
Por ejemplo:
int resultado = calcularSuma(5, 3);
System.out.println(resultado);
18. Utilizar variables como argumentos
No tenemos que pasar siempre valores directamente.
También podemos utilizar variables.
Por ejemplo:
int numero1 = 10;
int numero2 = 20;
int resultado = sumar(numero1, numero2);
System.out.println(resultado);
La función:
public static int sumar(int a, int b) {
return a + b;
}
recibirá los valores de las variables.
Es decir:
a = 10
b = 20
y devolverá:
30
19. Las variables dentro de una función
Las variables creadas dentro de una función son variables locales.
Por ejemplo:
public static void calcular() {
int numero = 10;
System.out.println(numero);
}
La variable numero solamente existe dentro de la función calcular.
No podemos hacer:
public static void calcular() {
int numero = 10;
}
public static void otraFuncion() {
System.out.println(numero);
}
Esto produciría un error porque numero pertenece al ámbito de calcular.
Esto está relacionado con el scope o alcance de las variables, que ya vimos al trabajar con variables.
20. Una función puede llamar a otra función
Una función puede utilizar otra función.
Por ejemplo:
public static int sumar(int a, int b) {
return a + b;
}
public static void mostrarResultado() {
int resultado = sumar(5, 3);
System.out.println(resultado);
}
Después podemos hacer:
mostrarResultado();
Resultado:
8
Esto nos permite dividir un programa grande en pequeñas tareas.
21. Buenas prácticas al crear funciones
Cuando creemos funciones, es recomendable que cada una tenga una tarea clara.
Por ejemplo, es mejor:
calcularSuma()
que crear una función enorme que haga:
- Calcular una suma
- Mostrar un menú
- Pedir datos
- Calcular un descuento
- Mostrar un mensaje
- Guardar información
Una función debería intentar resolver una tarea concreta.
También es recomendable utilizar nombres descriptivos:
calcularPrecio()
esMayorDeEdad()
mostrarMenu()
obtenerNombre()
En lugar de nombres poco descriptivos:
hacerCosas()
funcion1()
x()
22. Resumen
Una función o método es un bloque de código que realiza una tarea concreta.
La estructura básica es:
public static void nombreFuncion() {
// Código
}
Una función puede recibir parámetros:
public static void saludar(String nombre) {
System.out.println("Hola " + nombre);
}
Y podemos llamarla:
saludar("Ana");
Una función también puede devolver un valor:
public static int sumar(int a, int b) {
return a + b;
}
Y utilizarla:
int resultado = sumar(5, 3);
Los conceptos principales que debemos recordar son:
FUNCIÓN / MÉTODO
↓
Bloque de código que realiza una tarea
PARÁMETRO
↓
Dato que recibe la función
ARGUMENTO
↓
Valor que enviamos a la función
RETURN
↓
Valor que devuelve la función
VOID
↓
La función no devuelve ningún valor