Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Variable Global Contra Variable Por Referencia
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje 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

 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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

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

 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
última edición por Shell el Martes, 28 Octobre 2014, 10:10; editado 3 veces 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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.
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Variable Por Referencia campanillas General 8 Lunes, 02 Noviembre 2009, 14:46 Ver último mensaje
campanillas
No hay nuevos mensajes Variable Global Ocultada Por Declaración ... Shell General 9 Miercoles, 27 May 2015, 19:25 Ver último mensaje
Shell
No hay nuevos mensajes Shadowing A Global Variable Shell General 2 Domingo, 28 Octobre 2018, 09:05 Ver último mensaje
Shell
No hay nuevos mensajes Solicitar Consejo Sobre Variable Global gambafeliz General 6 Jueves, 24 Octobre 2019, 20:32 Ver último mensaje
gambafeliz
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 0 invitados
Usuarios registrados conectados: Ninguno


 
Lista de permisos
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



  

 

cron