Java

Métodos y funciones

13/11/2019

Un método o función es un conjunto de instrucciones que se encuentran fuera del Main. Como habrás notado, en cada uno de los ejemplos mostrados, hay una línea de código que dice public static void main(). El main es la función principal de un algoritmo, y es la primera que será ejecutada al ejecutar el programa. El resto de funciones de un algoritmo, ya sean 1, 2 o 1000, solo serán ejecutadas si son llamadas desde el Main.

1       public class Prueba{
2           public static void main(String[] args){
3
4           }
5           public void imprimirEnPantalla(){
6            
7           }
8       }

La declaración de una función se realiza de la siguiente manera: se indica el modificador de acceso, seguido del tipo que devolverá, el nombre de identificación de la función, un par de parentesis y entre ellos los parametros que recibirá (en caso de necesitarlos). Quizás muchas cosas te sonaron un poco extrañas. Veremos todo esto en detalle en este mismo artículo.

¿Hablamos de metodos, o de funciones?

Al hablar de metodos o de funciones estamos hablando de lo mismo. La diferencia se encuentra en el tipo de programación utilizada. Las funciones son aquellas que existen en la programación estructurada (todo lo visto hasta el momento), mientras que los métodos son funciones pertenecientes a una clase, es decir, en programación orientada a objetos. Por ejemplo, el método equals() visto anteriormente pertenece a la clase String.

Como hacer la llamada a una funcion

Como ya comenté, una función debe ser llamada desde un ejecutable (main), y a su vez, esta función puede llamar a otras, y estas otras a otras, y así sucesivamente. Veamos un ejemplo simple el cual iremos desarrollando a lo largo de esta lección y agregandole cada vez mas cosas conforme vayamos entendiendo cada detalle:

1       public class Prueba{
2           public static void main(String[] args){
3               sumarNumeros();
4           }
5           public void sumarNumeros(){
6               int x = 20, y = 30;
7               int resultado = x + y;
8               System.out.println("El resultado es: " + resultado);
9           }
10      }

Repaso rápido: se imprime un texto al cual le concatenamos la variable resultado, la cual es igual a la suma de las dos variables 'x' e 'y'.

¿Que estamos haciendo? Estamos llamando desde el main a la función sumarNumeros. Por ser una función, se deben colocar el par de parénteris seguido del ; de siempre. Ahora bien, ¿Como podríamos declarar las variables en el main y que la función que invoquemos las reconosca?

Pasaje de parámetros

Un parámetro es un dato que una función requiere para poder operar. Este dato se deberá indicar entre los paréntesis al momento de llamar a la funcion. A su vez, al momento de crear dicha funcién, se deberá indicar entre los parénteris el tipo de dato a recibir junto con el nombre del mismo.

1       public class Prueba{
2           public static void main(String[] args){
3               int x = 20, y = 30;
4               sumarNumeros(x, y);
5           }
6           public void sumarNumeros(int x, int y){
7               int resultado = x + y;
8               System.out.println("El resultado es: " + resultado);
9           }
10      }

Fíjate una cosa, en este caso la función sumarNumeros recibe como parámetros dos valores enteros que no necesariamente deben llamarse igual que las variables que le pasamos. Ejemplo:

1       public class Prueba{
2           public static void main(String[] args){
3               int valor1 = 20, valor2 = 30;
4               sumarNumeros(valor1, valor2);
5           }
6           public void sumarNumeros(int x, int y){
7               int resultado = x + y;
8               System.out.println("El resultado es: " + resultado);
9           }
10      }

Como podrás ver, cambiamos el nombre de las variables en su declaración, se las pasamos a la función por parámetro, y la función las re-nombra para identificarlas dentro de sí misma. De esta forma, x toma el valor de valor1 e y toma el valor de valor2.

Devolver un dato

Las funciones pueden, o no, devolver un tipo de dato (variable, arreglo, objeto, etc) el cual debe indicarse entre el modificador de acceso y el nombre de la función. Si te fíjas, la función sumarNumeros especifica void, lo que significa que la función no devuelve nada. Pero bien podríamos indicar que la función devuelve un tipo de dato. En este ejemplo será un entero:

1       public class Prueba{
2           public static void main(String[] args){
3               int valor1 = 20, valor2 = 30;
4               int resultado = sumarNumeros(valor1, valor2);
6               System.out.println("El resultado es: " + resultado);
7           }
8           public int sumarNumeros(int x, int y){
9               int suma = x + y;
10              return suma;
11          }
12      }

Desarrollemos un poco esto que parece tan complicado. Indicamos que la funcion ahora devuelve un dato de tipo entero. En el main creamos una variable llamada "resultado", a la cual se le asigna el valor devuelto por la función sumarNumeros. Para devolver un dato desde una función, se coloca al final del conjunto de instrucciones la palabra "return" seguido de la variable o valor que devolverá. Luego imprimimos en pantalla dicho valor.

De la misma forma podríaamos crear una función que devuelva un valor booleano, es decir, true o false.

Entonces, desarrollemos esto un poquito más agregando algún condicional. ¿Que te parece?

1       public class Prueba{
2           public static void main(String[] args){
3               int valor1 = 20, valor2 = 30;
4               int resultado = sumarNumeros(valor1, valor2);
5               if(esMayorA(resultado)){
6                   System.out.println("El resultado de la suma es: " + resultado);
7               }
8           }
9           public int sumarNumeros(int x, int y){
10              int suma = x + y;
11              return suma;
12          }
13          public boolean esMayorA(int resultado){
14              if(resultado > 30){
15                  return true;
16              }
17              else{
18                  return false;
19              }
20          }
21      }

¿Se complico un poco? Verás que es fácil. Todo sigue como antes, pero se ha agregado un método esMayorA que devuelve un valor booleano si la variable que le pasemos por parametro es mayor a 30. La llamada a esta funcion la hacemos dentro de una estructura condicional if. Si el método agregado devuelve un true, se imprimirá el resultado concatenado a un texto. En caso contrario, simplemente no se hará nada, y el programa finalizará.

Aprovechando que en la lección anterior se habló sobre arreglos, haremos un algoritmo similar al anterior. Si comprendiste todo lo anterior de esta lección y las anteriores, serás capaz de entender el siguiente ejemplo:

1       public class Prueba{
2           public static void main(String[] args){
3               int arreglo[] = new int[10];
4               rellenarArreglo(arreglo[]);
5               imprimirArreglo(arreglo[]);
6           }
7           public int[] rellenarArreglo(int[] array){
8               int variable = 1;
9               for(int i = 0; i < array.length; i++){
10                  array[i] = variable;
11                  variable++;
12              }
13          }
14          public void imprimirArreglo(int[] array){
15              for(int i = 0; i < array.length; i++){
16                  system.out.println("El valor del arreglo en posicion " + i + " es: " + arreglo[i]);
17              }
18          }
19      }

Este es el ejemplo mas sencillo que existe para explicar el uso de funciones utilizando arreglos.

Con respecto a los modificadores de acceso, por el momento solo sabemos que se usa el tipo public. En las lecciones sobre

Utilizando funciones se pueden crear algoritmos extremadamente complejos. Además, es un requisito saber como manejar correctamente las funciones para pasar a programar sistemas con orientación a objetos, lo cual es el objetivo de estas lecciones.

Esto fue todo de esta lección sobre funciones.

Volver arriba

Python

  • Proximamente...

HTML

  • Proximamente...