Programación en Java/Funciones

De Wikilibros, la colección de libros de texto de contenido libre.
← Sentencia continue Funciones Parámetros de una Función →


Queremos depositar todo nuestro dinero ganado como programadores. Hay dos bancos que compiten por nuestros dividendos. El primero, lo llamamos "Banco A", nos ofrecen un interés con una tasa mensual del 1 % mas una bonificación final del 5%. El segundo, el "Banco B", nos ofrece una tasa del 1,5 %.

Como buenos programadores realizamos un algoritmo para obtener el mayor beneficio. El programa calculará el monto obtenido en un período de 12 meses con un cálculo de interés compuesto. Para darnos una mejor idea de lo que tenemos que hacer realizamos el algoritmo principal.

 monto = 1200
 meses = 12;
 for ( int n = 1; n <= meses; n++){
         monto = monto + monto * interés / 100;
      }

Al monto inicial le sumamos las sucesivas capitalizaciones que ganamos mes a mes, hasta llegar a un período de 12 meses.

Con este algoritmo probado, realizamos el programa:

public class ShowMeTheMoney{
    public static void main(String args[]){
       int meses = 12;
       float interesBanco1 = 1f;
       float bonificBanco1 = 5f;
       float interesBanco2 = 1.5f;
       double monto = 10000;
       double montoBanco1 = monto;
       double montoBanco2 = monto;
       for ( int n = 1; n <= meses; n++){
          montoBanco1 += montoBanco1 * interesBanco1 / 100;
       }
       montoBanco1 += montoBanco1 * bonificBanco1 /100;
       for ( int n = 1; n <= meses; n++){
          montoBanco2 += montoBanco2 * interesBanco2 / 100;
       }
       System.out.println("Importe final del banco1 : " + montoBanco1);
       System.out.println("Importe final del banco2 : " + montoBanco2);
    }
 }

Si observamos el código, notaremos que repetimos el mismo algoritmo por cada banco. Esto ocurrirá cada vez que tengamos que realizar un cálculo de intereses. Si la elección se extendiera a, por ejemplo, cinco bancos, tendríamos que copiar el algoritmo para cada uno de ellos. Para no tener que repetir una y otra vez lo mismo, podemos recurrir a una técnica muy utilizada en programación: dividir el código en funciones.

Una función es un conjunto de instrucciones que ejecutan una rutina y devuelven un resultado. El resultado puede depender de parámetros de entrada.

Un función se construye de la siguiente manera:

 tipo_resultado nombre_función (tipo_parámetro nombre_parámetro, ... ) {
   sentencia1;
   sentencia2;
   ...
   sentenciaN;
}

Se debe definir el tipo de dato del resultado y el nombre que identifica a la función. Ademas, opcionalmente se pueden definir parámetros de entrada con el tipo de dato y su nombre.

Una función permite que reutilicemos un algoritmo. En el caso de nuestro problema bancario, podemos reutilizar el cálculo de interés aplicándolo a cada banco. Veamos como se construye esta función:

 double interesCompuesto(double monto, float tasa, int períodos){
    for(int n = 1; n <= períodos; n++ ){
       monto += monto * tasa / 100;
    }
    return monto;
 }

Necesitamos definir ciertos datos de entrada para ejecutar el algoritmo. Vamos a necesitar el monto inicial, la tasa de interés y el período. A su vez definimos el tipo de datos del resultado. La función nos devuelve el monto final, entonces el tipo de dato es double. Para identificar a la función le hemos puesto el nombre de interesCompuesto.

Para utilizar la función en el programa la llamamos por su nombre. Como esta nos devuelve un resultado, tendremos que almacenarlo en una variable que tenga un tipo de dato compatible con el resultado.

double montoBanco2 = interesCompuesto(10000 , interesBanco2, meses);

Debemos pasar los parámetros como se han definido, en el mismo orden y con el mismo tipo de dato.

Conociendo como se arma y se invoca una función, estamos listos para utilizarla en nuestro programa.

public class ShowMeTheMoney2{
  static double interesCompuesto(double monto, float tasa, int períodos){
     for(int n = 1; n <= períodos; n++ ){
        monto += monto * tasa / 100;
     }
     return monto;
  }
  public static void main(String args[]){
     int meses = 12;
     float interesBanco1 = 1f;
     float bonificBanco1 = 5f;
     float interesBanco2 = 1.5f;
     double monto = 10000;
     double montoBanco1 = monto;
     double montoBanco2 = monto;
     montoBanco1 = interesCompuesto( montoBanco1, interesBanco1, meses );
     montoBanco1 += montoBanco1 * bonificBanco1 /100;
     montoBanco2 = interesCompuesto( montoBanco2, interesBanco2, meses );
     System.out.println("Importe final del banco1 : " + montoBanco1);
     System.out.println("Importe final del banco2 : " + montoBanco2);
  }
}