Академический Документы
Профессиональный Документы
Культура Документы
Supongamos, por fijar ideas, que necesitamos encender una lámpara (conectada
a la 1ª salida de la interfaz de control) 3 veces durante medio segundo cada vez y
con intervalos de 1 segundo. Un programa que realiza este proceso puede ser:
Como observamos, se repite 3 veces un mismo conjunto de instrucciones, de
modo que podemos definir un subprograma (llamado lamp, pro ejemplo) cuya
acción sea simplemente encender y apagar la lámpara con los períodos
adecuados e invocar este subprograma 3 veces desde el programa principal:
Como observamos, este nuevo programa es más económico a la hora de
programar y resulta mucho más legible. Cuando un programa contiene muchas
instrucciones esta forma de programar se convierte en indispensable para
obtener un código eficiente y fácil de interpretar por el programador.
1. Edición de un subprograma
Una vez se tienen definidos uno o más subprogramas, cualquiera de ellos puede
ser invocado desde el programa principal.
Los procedimientos son subrutinas las cuales nunca retornan un valor de salida. En
el código de hoy, las siguientes subrutinas son procedimientos:
multiplicar
sumarVectores
mostrarVector
main
// Sin parámetros
nombreRutina();
// Con parámetros
nombreRutina(argumento1, argumento2, ..., argumentoN);
Podemos entender una subrutina como una sentencia más de forma que podemos
utilizarla incluso en bloques if-else. También podemos pasar como parámetro otra
subrutina tal y como vemos en el código de hoy:
System.out.println("> z + (x^y) = " + sumar(z, potencia(x, y)));
Funciones
sumar
potencia
sumarVectores
reiniciarVector
sumatorio
Valor y Referencia
Aquellos que vengan de otros lenguajes como C++ se preguntarán si en Java existe
lo que se conoce como pasar variables por referencia o valor . Cuando le pasamos
un argumento a una subrutina, se dice que se pasa por valor cuando se crea una
copia temporal en una variable auxiliar dentro de la subrutina. Dicha copia
podemos modificarla dentro de la subrutina, pero la variable indicada como
argumento mantendrá el valor que tenía en el momento de llamar a la subrutina.
Haciendo eso estamos indicando que la subrutina podrá recibir una cantidad
variable de argumentos. Si nos vamos al código de hoy tenemos una función con
dicho comportamiento:
static int sumatorio(int ... n) {
int resultado = 0;
for (int i: n)
resultado += i;
return (resultado);
}
La función sumatorio suma entre sí todos los números pasados por argumento. Una
forma equivalente de ver este código es la siguiente:
// Forma 1
sumatorio(3, 2, 8, 10, 22, 13);
// Forma 2
sumatorio(new int[] {3, 2, 8, 10, 22, 13});