Diario de un
programador.- Dia 37
Funciones, procedimientos
y subrutinas
Después de haber masticado, tragado y digerido el
capítulo anterior sobre arreglos, creo que me queda una última cuestión que
aprender y que es común en muchos (o todos) lenguajes de programación, Me
refiero a las funciones. Una función en programación se puede definir como lo
siguiente que rescaté desde wikipedia "Una
función es un conjunto de líneas de código que realizan una tarea específica y
puede retornar un valor. Las funciones pueden tomar parámetros que modifiquen
su funcionamiento. Las funciones son utilizadas para descomponer grandes
problemas en tareas simples y para implementar operaciones que son comúnmente
utilizadas durante un programa y de esta manera reducir la cantidad de código.
Cuando una función es invocada se le pasa el control a la misma, una vez que
esta finalizó con su tarea el control es devuelto al punto desde el cual la
función fue llamada".
La gracia de las funciones, es que se pueden utilizar una
y otra vez sin necesidad de volver a escribir todo el código, dicho de otra
manera, una función es como un mini programa que funciona dentro del código, ya
que recibe un valor (varios o incluso ninguno), los evalúa y devuelve un
resultado. ¿A qué se refiere con devolver un resultado? Bueno, se refiere a que
el resultado devuelto, lo puedo utilizar para realizar otra tarea. Los
procedimientos en cambio, también se comportan como mini programas dentro del
código, pero no devuelve un resultado. Lo que quiere decir es que el resultado
mostrado, no lo puedo utilizar para evaluar otra tarea dentro del programa.
Normalmente, un procedimiento muestra un resultado de tipo texto, ya sea un
mensaje o algo similar.
Aun no me queda muy claro esto de las funciones y
procedimientos, creo que lo mejor será buscar más información y probar unos
cuantos ejemplos para agarrarle el truco. Bueno, así lo he hecho hasta ahora y
me ha ido medianamente bien. Como todo, es solo cosa de practicar y practicar
hasta que salga natural.
Leyendo varios artículos por la web, llegué a la
conclusión de que las funciones las llevo escribiendo desde el inicio del curso
y no me había dado cuenta. Por ejemplo la instrucción TextWindow.Write() es una función, que recibe como parámetro
(parámetro es lo que se escribe entre paréntesis) texto, números u otra
variable. Si pudiera ver cómo está programada esa función (creo que es función,
podría ser procedimiento o algo más complicado) estoy seguro que se verían
todas esas líneas de código que la conforman, las cuales permiten por ejemplo
el poder mostrar texto en pantalla. No sería gracia y por supuesto nada
provechoso ni eficiente el tener que escribir muchas líneas de código solamente
para mostrar texto en pantalla. Es entonces que todo ese código es
"guardado o almacenado" en un "mini programa" para luego
utilizarlo cuantas veces se requiera, tan solo indicando el nombre de ese "mini programa"
En Small Basic, existen
las subrutinas, las cuales serían el equivalente a los procedimientos, o
sea que una subrutina no devuelve ningún valor. ¿Pero qué pasa si deseo
recuperar un resultado de esa subrutina? Bueno, en Small Basic se permite
ingresar directamente a las variables de las
subrutinas y recuperar el
resultado de alguna operación.
Para crear una subrutina, se debe anteponer la palabra
clave Sub y luego el nombre que
llevará esa subrutina, posteriormente se agregan todas las instrucciones y para "cerrar" la subrutina, se
utiliza la palabra clave EndSub.
Ej:
Sub nombreSubRutina
instrucciones...
EndSub
Para
utilizar la subrutina y permitir que se ejecute todo su código, se debe
escribir su nombre seguido de una apertura y cierre de paréntesis (). Los
paréntesis indican que esa instrucción se trata de una subrutina.
Ej:
nombreSubRutina()
A
continuación pondré un ejemplo de uso de una sub rutina, la cual calcula el
área de un círculo. Recordar que para calcular el área de un círculo se puede
utilizar la fórmula:
area = radio2
* pi
Sub BuscaArea
pi = Math.Pi
radioCuadrado =
Math.Power(radio,2)
area = pi * radioCuadrado
EndSub
TextWindow.Write("Ingresa el largo del radio ")
radio = TextWindow.ReadNumber()
BuscaArea()
TextWindow.WriteLine("El area es " + area)
Diario de un programador.-
Dia 38
Las primeras 5 líneas corresponden a la
subrutina.
En la primera línea, la palabra
"Sub", indica que se inicia una subrutina y seguidamente se encuentra
la palabra "BuscaArea", que corresponde al nombre, etiqueta o
identificador de la subrutina. Lo que sigue a continuación es el código que
conforma a esta subrutina. Este código lo que hace es calcular el área de un
circulo.
La segunda línea (pi = Math.Pi) lo que
hace es guardar el valor de pi (3,14...) en una variable que llamé pi.
La tercera línea, lo que hace es guardar
en la variable "radioCuadrado" el resultado de la variable
"radio" elevado a 2. En otras palabras, el número ingresado por el
usuario elevado a 2, será almacenado en esta variable.
En la cuarta línea se encuentra la
variable "area", que almacena el resultado de multiplicar la variable
"pi" por la variable "radioCuadrado"
Por último, la palabra clave
"EndSub" indica el término de la subrutina.
Las siguientes dos
líneas...
TextWindow.Write("Ingresa el largo del radio ")
radio = TextWindow.ReadNumber()
No es nada nuevo, aquí solamente se muestra un mensaje
solicitando que se ingrese el largo del radio y luego ese número será guardado
en la variable "radio"
En las siguientes dos
líneas es en donde se ejecuta o se llama a la sub rutina.
BuscaArea()
TextWindow.WriteLine("El
area es " + area)
La palabra "BuscaArea()" lo que hace es ejecutar la
sub rutina cargándola en memoria, para luego realizar los cálculos con los
datos ingresados por el usuario.
Esta sub rutina, se comporta como una función, ya que su
valor de retorno, si es que se pude llamar así, es el resultado que almacena la
variable "area" y que es ocupada en la última línea de este
programa.
Esto es todo por ahora. En la parte 2 se darán más ejemplos. Hasta la próxima.
Gustavo J. Cerda Nilo
Septiembre 2015, última modificación Abril 2016
No hay comentarios:
Publicar un comentario