martes, 12 de abril de 2016

Capitulo 13: Small Basic, Subrutinas. Parte 2



Diario de un programador.- Dia 39

En un principio mencioné que un procedimiento se diferenciaba de una función ya que este no devolvía ningún valor.
Modificaré el programa anterior para mostrar cómo se vería si fuese un procedimiento.

Sub BuscaArea
  pi = Math.Pi
  radioCuadrado = Math.Power(radio,2)
  area = pi * radioCuadrado
  TextWindow.WriteLine("El area es " + area)
EndSub

TextWindow.Write("Ingresa el largo del radio ")
radio = TextWindow.ReadNumber()

BuscaArea()

En este caso, toda la operación e incluso el resultado son mostrados por la subrutina. Es por eso que se dice que no devuelve o retorna ningún resultado, ya que la operación finaliza en la subrutina.
 
Diario de un programador.- Dia 40

Hoy es el último día de Septiembre y debo reconocer que estuve algunos días sin programar, pero aquí estoy de nuevo para tomar las riendas del código. Seguiré profundizando aún más con las funciones.
Otra de las tantas cosas que se pueden hacer con las funciones, aparte de ejecutar operaciones o cálculos, es mostrar por ejemplo un menú. Así como lo hice en un capítulo anterior, donde cada vez que quería mostrar el menú ejecutaba un "salto" con la instrucción goto. Aquí se realizará esa tarea con una función. Voy a recordar cómo era el código en ese entonces.

inicio:
TextWindow.WriteLine("INVENTARIO")
TextWindow.WriteLine(" ")
TextWindow.WriteLine("1) Objetos")
TextWindow.WriteLine("2) Armas")
TextWindow.WriteLine("3) Accesorios")
TextWindow.WriteLine("4) Estado")
TextWindow.WriteLine("5) Salir")
TextWindow.WriteLine(" ")
TextWindow.Write("Ingresa una opcion ")
opcion = TextWindow.ReadNumber()

If opcion = 1 Then
  TextWindow.Clear()
  TextWindow.WriteLine("OBJETOS")
  TextWindow.WriteLine(" ")
  TextWindow.WriteLine("Pocion curativa x 10")
  TextWindow.WriteLine("Cola de fenix   x 5")
  TextWindow.WriteLine("Pocion de mana  x 3")
  TextWindow.Pause()
  TextWindow.Clear()
  Goto inicio
EndIf

If opcion = 2 Then
  TextWindow.Clear()
  TextWindow.WriteLine("ARMAS")
  TextWindow.WriteLine(" ")
  TextWindow.WriteLine("Mandoble x 1")
  TextWindow.WriteLine("Hacha    x 1")
  TextWindow.WriteLine("Daga     x 1")
  TextWindow.Pause()
  TextWindow.Clear()
  Goto inicio
EndIf
If opcion = 3 Then
  TextWindow.Clear()
  TextWindow.WriteLine("ACCESORIOS")
  TextWindow.WriteLine(" ")
  TextWindow.WriteLine("Aro de fuerza   x 2")
  TextWindow.WriteLine("Collar de magia x 1")
  TextWindow.WriteLine("Guante gengi    x 1")
  TextWindow.Pause()
  TextWindow.Clear()
  Goto inicio
EndIf

If opcion = 4 Then
  TextWindow.Clear()
  TextWindow.WriteLine("ESTADO")
  TextWindow.WriteLine(" ")
  TextWindow.WriteLine("Nivel        : 10")
  TextWindow.WriteLine("Ataque       : 15")
  TextWindow.WriteLine("Defensa      : 3")
  TextWindow.WriteLine("Inteligencia : 3")
  TextWindow.WriteLine("Agilidad     : 9")
  TextWindow.WriteLine("Destreza     : 12")
  TextWindow.WriteLine("Suerte       : 2")
  TextWindow.Pause()
  TextWindow.Clear()
  Goto inicio
EndIf

If opcion = 5 Then
  TextWindow.Clear()
  TextWindow.WriteLine("Hasta luego")
EndIf

Ok, dejaré todo lo anterior en distintas subrutinas. Veamos si funciona...
 Muy bien, aquí tengo listo el código.

Sub inventario
  TextWindow.WriteLine("INVENTARIO")
  TextWindow.WriteLine(" ")
  TextWindow.WriteLine("1) Objetos")
  TextWindow.WriteLine("2) Armas")
  TextWindow.WriteLine("3) Accesorios")
  TextWindow.WriteLine("4) Estado")
  TextWindow.WriteLine("5) Salir")
  TextWindow.WriteLine(" ")
  TextWindow.Write("Ingresa una opcion ")
  opcion = TextWindow.ReadNumber()
 
  If opcion = 1 Then
    objetos()
  ElseIf opcion = 2 Then
    armas()
  ElseIf opcion = 3 Then 
    accesorios()
  ElseIf opcion = 4 Then 
    estado()
  ElseIf opcion = 5 Then 
    salir()
  EndIf 
EndSub

Sub objetos
  TextWindow.Clear()
  TextWindow.WriteLine("OBJETOS")
  TextWindow.WriteLine(" ")
  TextWindow.WriteLine("Pocion curativa x 10")
  TextWindow.WriteLine("Cola de fenix   x 5")
  TextWindow.WriteLine("Pocion de mana  x 3")
  TextWindow.Pause()
  TextWindow.Clear()
  inventario()
Endsub

Sub armas
  TextWindow.Clear()
  TextWindow.WriteLine("ARMAS")
  TextWindow.WriteLine(" ")
  TextWindow.WriteLine("Mandoble x 1")
  TextWindow.WriteLine("Hacha    x 1")
  TextWindow.WriteLine("Daga     x 1")
  TextWindow.Pause()
  TextWindow.Clear()
  inventario()
EndSub

Sub accesorios
  TextWindow.Clear()
  TextWindow.WriteLine("ACCESORIOS")
  TextWindow.WriteLine(" ")
  TextWindow.WriteLine("Aro de fuerza   x 2")
  TextWindow.WriteLine("Collar de magia x 1")
  TextWindow.WriteLine("Guante gengi    x 1")
  TextWindow.Pause()
  TextWindow.Clear()
  inventario()
EndSub

Sub estado
  TextWindow.Clear()
  TextWindow.WriteLine("ESTADO")
  TextWindow.WriteLine(" ")
  TextWindow.WriteLine("Nivel        : 10")
  TextWindow.WriteLine("Ataque       : 15")
  TextWindow.WriteLine("Defensa      : 3")
  TextWindow.WriteLine("Inteligencia : 3")
  TextWindow.WriteLine("Agilidad     : 9")
  TextWindow.WriteLine("Destreza     : 12")
  TextWindow.WriteLine("Suerte       : 2")
  TextWindow.Pause()
  TextWindow.Clear()
  inventario()
EndSub

Sub salir
  TextWindow.Clear()
  TextWindow.WriteLine("Hasta luego")
EndSub

inventario()

La diferencia de este código con el anterior (además de usar subrutinas) es que para volver al menú principal, se llama a la subrutina "inventario()", mientras que en el código anterior se utilizaba la instrucción "goto inicio". Algo que hay que mencionar es que, a pesar de que el programa tiene muchas líneas, todas corresponden a subrutinas, que serán ignoradas al momento de iniciar el programa y solamente se ejecutarán al momento de llamarlas. Esto es lo que sucede en la última línea del programa, que es donde en realidad comienza. En la última línea se llama a la subrutina "inventario()" la cual da inicio al programa. Dicho de otra forma, si no estuviese esa línea, el programa no funciona. Para comprobar esto, es solo cosa de borrar esta línea y tratar de hacer correr el programa. Se podrá observar cómo este no funciona. 
Esto es todo por ahora (es lo único que se me ocurre al momento jajajaja) ¿y no hay ejercicios de programación?, claro que los hay, pero se están horneando y estarán listos para ser servidos en el próximo capítulo, el cual será el capítulo final de todo este manual o tutorial de programación ¿y eso es todo? ¿Ya nos podemos considerar programadores? En realidad... Sí, si ya hemos llegado a este punto y hemos pasado satisfactoriamente todos los capítulos en forma sincera y sin hacer trampas, ya nos podemos considerar programadores, pero de un nivel muy básico, ya que aún no estamos en condiciones de poder crear grandes programas como los que salen día a día y se encuentran colgados en la web, pero si somos capaces de crear pequeños programas que nos pueden facilitar un poco la vida si tenemos algo de imaginación. Como dije, poseemos un conocimiento muy básico en programación, pero ya  tenemos la base para escoger un lenguaje de programación de nuestro interés y profundizar en sus características y bibliotecas propias de ese lenguaje, con lo cual se podrían lograr cosas mucho más interesantes e interactivas que solo mostrar un resultado en una pantalla negra. A medida que se profundice en un lenguaje en específico, se obtendrán conocimientos que nos convertirán en programadores cada vez más avanzados. Hasta el próximo capítulo.

Gustavo Cerda Nilo
Septiembre 2015, última actualización Abril 2016



No hay comentarios:

Publicar un comentario

C++ El apuntador This

El apuntador This En C++, cada objeto tiene acceso a su propia dirección a través de un puntero o apuntador denominado This. Lo...