Apúntate...


Consultas, desarrollo de programas y petición de presupuestos:

viernes, 17 de agosto de 2012

Definición de variables en Gambas.


¿como se definen las variables en Gambas? ¿variables locales o globales? Alcance de las variables.
Dependiendo de donde tenga que ser accesible la variable (osea de donde el programador vaya  a tener la necesidad de leerlas y usarlas), se definen de manera diferente:

Locales: Si solo necesitamos que una variable solo sea accesible dentro de una función, subrutina o método, se define asi:

  • DIM Identificador AS TipoDato [ = Expresión ]
Además todas las variables locales que usemos en una función, subrutina o método, se tendras que definir antes de usarlas, y antes de cualquier instruccion de la función, subrutina o metodo.
Un ejemplo de mal uso:

Uso correcto:



Globales: Podemos definir 2 tipos:
[ STATIC ] { PUBLIC | PRIVATE } Identifier AS Datatype [ = Expression ]
1) Si necesitamos que una variable sea accesible a varias subrutinas pero que estén en el mismo formulario, módulo o clase, se define:

  • PRIVATE Identificador AS TipoDato [ = Expresión ]

2)Si necesitamos que una variable sea accesible desde otros formularios, módulos o clases:

  • PUBLIC Identificador AS TipoDato [ = Expresión ]

Ejemplo:

En la siguiente captura vemos que la variable Public calle, esta mal definida.
y que la funcion Escribenombre() esta intentando escribir el valor de la variable dirección que no es una variable publica ni privada, con lo  cual da error de no estar definida.
(nota: fue definida en la subrutina Escribe() pero era local (dim) y solo se puede usar en esa subrutina)

Otro ejemplo:
Una cosa a tener encuenta es que   una variable local (dim), oculte una variable Publica o Privada.


En la subrutina  EscribeVariante(), se define una nueva variable local llamada "edad", que dentro de esta función va a ocultar el valor de la variable Private edad.





véase también Uso del Operador Punto

Cuadro resumen:




[ STATIC ] 
La misma variable será compartida con todos los objetos de esta clase.




Vamos a poner varios ejemplos:

a) Define una variable del tipo “cadena” que se llame “NombreProveedor”, y que contenga el valor inicial de “Juan Perez”. Ademas esta variable debe de ser accesible a todas las funciones de un formulario.
  • PUBLIC NombreProveedor as String=”Juan Perez”

b) Define una variable que va a contener una fecha, de nombre “FechaActual” y que sea accesible solamente en la funcion donde la vayamos a usar:
  • DIM FechaActual as Date

c) Define una variable que vaya a contener el resultado de una división (incluido los decimales), que se llame “resultado” y que sea accesible solo a las funciones del mismo módulo.

  • Private resultado as Single
Pero nos preguntamos ¿cuantos decimales tiene que almacenar la variable?, como no lo indica el enunciado también valdría:
  • Private resultado as Float 
 Uso de las variables:
Para llamar o usar el valor de una variable, y esta se llama desde el mismo módulo, formulario o clase donde fue definida, se emplea su nombre.
  • Private valor as string
Se le llama asi:
  • valor

Pero si, se quiere usar desde otro módulo, formulario o clase, hay que  añadir el nombre de donde fue definida. Me explico, supongamos que tenemos definida esta variable:
  • Public valor as string
que esta definida dentro en el formulario Fmain.
Para llamarlo desde otro formulario, se haría de la siguiente manera:
  • Fmain.valor

Si la variable no es Public, ¡¡¡ no podremos acceder a ella desde un módulo o formulario distinto desde donde se definió!!!.




Enlaces a GambaWiki


Práctica:
1. En la anterior entrada, hablamos de 2 variables (nombre y edad). Definelas en los siguientes supuestos:
a) Que tengamos solo acceso local, y con un valor de nombre igual a "Julio" y edad igual a "39"

b) Que tengamos  acceso desde otra función pero que ambas esten en el mismo formulario.

 




2. Fíjate en el siguiente esquema. Es un típico proyecto realizado en Gambas, con varios módulos, formularios y clases.


 Las flechas indican donde tienen que ser visibles, las variables, A,B,C,D y E.
Definelas...




5 comentarios:

  1. alguien me podría ayudar con este error me sale cuando intento corre el programa
    http://es.tinypic.com/r/sym4id/8

    ResponderEliminar
  2. Enmanuel:
    Dentro de una funcion o una subrutina, no puedes definir variables Public, solo la puedes definir como DIM
    Prueba en sustituir la linea que te da el error por este código poner: Dim nombre as string

    Si quieres que una variable sea Publica, la defines fuera de la funcion. Ejemplo:
    Public nombre as string= "Enmanuel"

    Public sub escribe()
    print nombre 'escribirá el valor de "Enmanuel"
    end

    Public sub longitud()
    print len(nombre) 'escribira el numero de caracteres que tiene "Enmanuel"
    end



    ResponderEliminar
  3. Muy bueno sera agregar mas informacino sobre STATIC, lo unico que mencionas es que sera compartida con toda la clase pero si no es public o private? etc no dices mas

    ResponderEliminar
    Respuestas
    1. No he usado esa forma de definir las variables.
      Se supone que las variable que definas como Static, solo tendrán acceso a ellas los objetos que sean clases hijas (que hereden) , de la principal donde estan definidas dichas variables. (o por lo menos eso tengo entendido)

      Eliminar
    2. No he usado esa forma de definir las variables.
      Se supone que las variable que definas como Static, solo tendrán acceso a ellas los objetos que sean clases hijas (que hereden) , de la principal donde estan definidas dichas variables. (o por lo menos eso tengo entendido)

      Eliminar

A falta de donativos... un poco de publicidad