¿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:
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.
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
- Private resultado as Float
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
- 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
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...
alguien me podría ayudar con este error me sale cuando intento corre el programa
ResponderEliminarhttp://es.tinypic.com/r/sym4id/8
Enmanuel:
ResponderEliminarDentro 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
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
ResponderEliminarNo he usado esa forma de definir las variables.
EliminarSe 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)
No he usado esa forma de definir las variables.
EliminarSe 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)