• No se han encontrado resultados

Estructura de una función

Existen dos tipos de subprogramas, las funciones y los procedimientos, los cuales pasaron a llamarse métodos con la programación orientada a objetos, la cual veremos más adelante, mientras tanto procederemos a estudiar en qué consiste cada una de ellas.

Procedimientos

Representa una porción de código agrupada con un nombre que describa lo que hace. Las sentencias contenidas en dicho procedimiento pueden ser ejecutadas cuantas veces se quiera, adicionalmente un procedimiento puede de forma opcional recibir parámetros de entrada, con el fin de que en base a los valores de dichos parámetros el procedimiento ejecute alguna acción.

Una característica importante del procedimiento es que el proceso que se ejecuta dentro nunca retorna un resultado, por ejemplo, si necesitas hacer un comportamiento al que le entregas dos valores para que

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

los sume, entonces el procedimiento deberá hacer el proceso de sumar ambos, pero no tendrá la facultad para devolverte el resultado, a cambio le puedes pedir que lo muestre por pantalla, que lo imprima u algún otro tipo de salida, pero nunca esperes respuesta. Otro buen ejemplo será un procedimiento que se llame correr, el que supongamos incrementa la variable cansancio en 1 y estado físico en 2, como puedes ver el procedimiento descrito se ha ocupado de cambiar valores a variables, pero no ha retornado un resultado.

Los procedimientos pueden recibir de forma opcional parámetros, los parámetros como lo mencionamos antes tienen la función de determinar como se ejecutará dicho procedimiento. Aclaremos esto un poco más, supongamos que un procedimiento llamado saludar al ejecutarlo imprime por pantalla la cadena “hola amigo”, este procedimiento será utilizado por el programa principal cada vez que necesite imprimir dicho mensaje, evitando así codificarlo varias veces, sin embargo el mensaje jamás variará por lo que aseguramos que el procedimiento saludar siempre imprimirá el mismo mensaje sin excepción. Si deseamos que éste tenga un comportamiento variable y que imprima “hola Anakin”, “hola Obi Wan” o algún otro nombre, entonces debemos determinar qué es lo que variará y qué no, de esta forma podemos determinar de forma muy fácil que el parámetro de entrada corresponde a un nombre (la parte variable) y que “hola” es parte del procedimiento. El proceso que se llevará a cabo es la unión (concatenación) de “hola” con

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

el valor de la variable que represente el nombre, de esta forma si deseas mostrar “hola Sebastián, tienes 29 años”, bastará con agregar un segundo parámetro de entrada que contenga la edad. De esta forma un procedimiento tendrá todos los parámetros que desees, debes considerar que si decides entregar nombre y edad, entonces ya nunca más podrás entregar al procedimiento sólo la edad ya que los parámetros de entrada que definas en un procedimiento se convierten en una

obligación para su ejecución, sin embargo puedes según

los valores tomar acciones, por ejemplo si la edad es cero omitir la parte que dice “tengo xx años”. (Más adelante en el capitulo de POO veremos como una técnica llamada sobrecarga nos facilita esto aún más).

Dado entonces que los procedimientos no retornan un valor, todos ellos utilizan la palabra reservada void para indicarlo, donde void significa la no existencia de un tipo de datos.

A la derecha de la palabra reservada void indicaremos el nombre del procedimiento, el cual debe ser un nombre que describa lo que hace y cuyo proceso intelectual para inventarlo es nuestro, por ejemplo “saludar”

La tercera parte corresponde a los parámetros de entrada de nuestro programa, partiremos analizando un ejemplo que no recibe parámetros y que imprime el mensaje de “hola” como lo vimos antes.

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

void saludar() {

//tu código aquí }

Como muestra el código anterior el procedimiento saludar se acompaña de paréntesis vacíos, lo que significa que

no recibe parámetro alguno. Las llaves representan el

inicio y término del cuerpo de nuestro procedimiento, en él debemos agregar toda la lógica referente a nuestro proceso saludar, el cual lucirá así:

void saludar() {

System.out.println(“Hola”); }

Para recibir parámetros debemos especificar para cada uno de ellos su tipo y nombre de la variable que contiene el valor de entrada. Agreguemos al código realizado la posibilidad de mostrar un nombre distinto cada vez.

void saludar(String nombre) {

System.out.println(“Hola ” + nombre); }

Como puedes ver este método imprimirá el mensaje de “hola “ y lo concatenará con el valor de la variable nombre. La obtención del valor de dicha variable no es una responsabilidad del procedimiento saludar, recuerda que este es un sub programita cuya responsabilidad es

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

sólo generar el mensaje, por ende este comportamiento deberá ser utilizado por el programa principal, quien recurrirá a el cada vez que necesite generar un saludo, sin embargo el procedimiento como requisito para generar su objetivo requerirá que se le entregue algún nombre. Supongamos ahora que queremos mostrar también la edad, en ese caso debemos agregar un nuevo parámetro con su respectivo tipo, veamos como utilizar un segundo parámetro de entrada para nuestro procedimiento.

void saludar(String nombre, int edad) {

System.out.println(“Hola ” + nombre + “, tengo “ + edad + “ años”);

}

A partir del segundo parámetro en adelante debemos utilizar una coma para separarlos, de esta forma podrás agregar cuantos parámetros consideres necesario como requisito para ejecutar tu procedimiento.

Por otra parte el cuerpo de nuestro procedimiento llevará todas las líneas de código que desees, sin embargo debes tener muy presente de que los inicios y cierres de bloque definen el ámbito (la frontera) de nuestra función, esto significa que todas las variables que allí se declaren estarán disponibles sólo dentro de la función esta regla también es valida para los parámetros que recibe.

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

void saludar(String nombre, int edad) {

int codigo = 66;

System.out.println(“Hola ” + nombre + “, tengo “ + edad + “ años y mi código de trabajador es:” + codigo); }

void despedir() {

System.out.println(“chao, recuerden que mi nombre es ” + nombre + “ y tengo “ + edad + “ años y mi código de trabajador es:” + codigo);

}

El procedimiento saludar tiene 3 variables declaradas en su ámbito, dos de ellas son nombre y edad, cuyas valores vienen asignados desde otro lugar del código y son recibidos como una entrada. La variable código en cambio es declarada como una nueva variable e inicializada dentro del método, pero las tres tienen el mismo ámbito pudiendo usarse cualquiera de ellas dentro de los límites del procedimiento. Si miramos el procedimiento despedir en cambio aseguraremos que existen 3 errores, los cuales corresponden a la utilización de las variables nombres, edad y código, ya que ninguna de las tres existe en este ámbito. Si desean usarse hay que recibirlas como parámetro o declararlas dentro del método, ambas alternativas son correctas, pero la diferencia la determinará si deseas que los valores sean asignados dentro del método (el caso de código en el

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

método saludar) o como parámetros cuyo uso representa un valor que viene desde fuera del procedimiento.

Dado que como lo mencionamos antes una variable declarada dentro de un procedimiento define el ámbito en el que la variable vive, veamos el siguiente código:

void saludar() { int var1 = 66; } void despedir() { int var1 = 66; }

En el código anterior la variable var1 ha sido declarada en ambos procedimientos, esto no provocará un error ya que ambas variables viven en un ámbito diferente y el cambio en el valor de alguna de ellas no afectará el valor de la otra, ya que si bien comparten un mismo identificador son variables totalmente distintas.

Función

Una función es muy similar a un procedimiento, con la salvedad de que la función debe retornar algún valor, o dicho de otra forma el proceso dentro de la función debe generar algún resultado en algún tipo de datos conocido

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES

para retornarlo a quien llame al procedimiento. Un ejemplo será el comportamiento sumar, el cual recibirá dos parámetros y cuyo resultado de la suma no será una impresión por pantalla, el resultado generado será devuelto a quien llame a la función como un valor representado por alguno de los tipos de datos que tenga el lenguaje, la función utiliza la palabra reservada return para realizar el retorno del resultado del proceso, por ello

return siempre debe estar presente y su ejecución

significa también el final de la función, ya que una vez se retorna el resultado significa que la función ha finalizado. int suma(int a, int b)

{

int c = a + b; return c; }

El código anterior es un ejemplo de la función suma, en este caso y al igual que en el procedimiento, la función recibe dos parámetros de tipo entero, la diferencia está dada en que void ha sido remplazada por int, el cual define el tipo de dato que la función va a retornar, en este caso se ha utilizado int dado que la suma de a y b representarán un entero. Así una función podrá retornar

cualquier tipo de datos conocido por el lenguaje. Luego

de la operatoria encontraras la sentencia return c, la cual contiene el resultado de la operatoria a+b y cuyo resultado concuerda con el tipo que explicitamos que la función retornaría.

UNIVERSIDAD TECNOLÓGICA DE CHILE INACAP - ÁREA INFORMÁTICA Y TELECOMUNICACIONES