Variable Global Contra Variable Por Referencia


Objetivo: Variable Global Contra Variable Por Referencia
Hola!.

En un ejemplo que hice se me plantea la duda de poder tener una variable global o tenerla como local y pasarla por referencia.
El ejemplo es la creación de una figura de un rombo o diamante.

rombo

Se crea mediante dos bucles, primero el triangulo superior y luego el inferior. El código de ambos bucles se repite.
Así que creé otro procedimiento que era llamado desde los dos bucles. Podría haber repetido el código
dentro de los bucles. Eso es otra duda, ya que este código solo es usado por el ejemplo del rombo, no es un código
que se pueda aprovechar para hacer otra cosa. Pero haciendo el procedimiento es un ahorro para no repetir código.

Vayamos con el código:

Public Sub Main()

Rombo()

End

Public Sub Rombo()

Dim x As Integer
Dim altura As Integer
Dim long_estrellas As Integer

Print "¿ Qué altura tiene el rombo ?"
Input altura

For x = 1 To altura Step 2
Dibuja_linea(x, altura, ByRef long_estrellas)
Next
For x = altura - 3 To 1 Step -2
Dibuja_linea(x, altura, ByRef long_estrellas)
Next

End

Public Sub Dibuja_linea(x As Integer, altura As Integer, ByRef long_estrellas As Integer)

Dim long_espacios As Integer

long_estrellas = x
long_espacios = ((altura - long_estrellas) \ 2)
Print (String$(long_espacios, " ") & String$(long_estrellas, "*") & String$(long_espacios, " "))

End


Aunque los nombres de las variables puedan repetirse son locales. La variable que podría haber sido global es long_estrellas.
long_espacios no necesita ser global, ya que se calcula dentro de Dibuja. ( Por poner un nombre)

Hay veces que según el numero introducido no se forma correctamente el diamante. Es problema de la división entera.
Si no se cumplen ciertas características, el rombo no se crea bien. Pero es solo un ejemplo.

¿ Qué os parece lo de pasar por referencia la variable y no tenerla como global ?. Si, se repite más código, eso es verdad.

Saludos


diamante.tar.gz
Descripción:  
Descargar
Nombre del archivo: diamante.tar.gz
Tamaño: 4.56 KB
Descargado: 27 veces
diamante.tar.gz
Descripción:  
Descargar
Nombre del archivo: diamante.tar.gz
Tamaño: 4.56 KB
Descargado: 27 veces
diamante.tar.gz
Descripción:  
Descargar
Nombre del archivo: diamante.tar.gz
Tamaño: 4.56 KB
Descargado: 27 veces

Objetivo: Re: Variable Global Contra Variable Por Referencia
Oh, oh, esa variable long_estrellas y x, no me convencen..

Pues no, no hace falta..

Public Sub Main()

Rombo()

End

Public Sub Rombo()

Dim x As Integer
Dim altura As Integer

Print "¿ Qué altura tiene el rombo ?"
Input altura

For x = 1 To altura Step 2
Dibuja_linea(x, altura)
Next
For x = altura - 3 To 1 Step -2
Dibuja_linea(x, altura)
Next

End

Public Sub Dibuja_linea(x As Integer, altura As Integer)

Dim long_espacios As Integer
Dim long_estrellas As Integer

long_estrellas = x
long_espacios = ((altura - long_estrellas) \ 2)
Print (String$(long_espacios, " ") & String$(long_estrellas, "*") & String$(long_espacios, " "))

End


Bueno queda la pregunta que os parece la idea de en vez de tener una variable global, usar una local y pasarla por referencia.

Saludos

última edición por Shell el Martes, 28 Octobre 2014, 10:10; editado 3 veces

diamante.tar.gz
Descripción:  
Descargar
Nombre del archivo: diamante.tar.gz
Tamaño: 4.56 KB
Descargado: 32 veces
diamante.tar.gz
Descripción:  
Descargar
Nombre del archivo: diamante.tar.gz
Tamaño: 4.56 KB
Descargado: 32 veces
diamante.tar.gz
Descripción:  
Descargar
Nombre del archivo: diamante.tar.gz
Tamaño: 4.56 KB
Descargado: 32 veces

Objetivo: Re: Variable Global Contra Variable Por Referencia
Shell:

Citar:
en vez de tener una variable global, usar una local y pasarla por referencia.

Si mejor usarla por referencia.
El problema que tiene el uso de variable globales es que hacemos que nuestro código dependa de esa variable, y si lo queremos reusar en otro programa, nos forzará a definir esa variable global. Lo mejor es tener parámetros en las funciones/subrutinas, donde sabemos lo que tenemos dar a la función y lo que nos va a devolver. Creo que eso se llama "caja-negra", el usuario de la función no tiene que saber que hace la funcion internamente, solo lo que tiene que darle y lo que le devuelve... en el caso de que haya variables globales, eso no se cumple.


Página 1 de 1


  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.4235s (PHP: -76% SQL: 176%)
Consultas SQL: 48 - Debug off - GZIP Activado