Si un componente EGL declara una variable o una constante, el identificador utilizado en la
declaración está
en ámbito (disponible) a lo largo de todo el componente:
- Si la declaración está en una función, el identificador está en el ámbito local de la función. Si la función Function01 declara la variable Var01, por ejemplo, cualquier código de Function01
puede hacer referencia a Var01. El identificador está disponible incluso en el código de función
que precede a la declaración.
La variable puede pasarse como un argumento a otra función, pero
el identificador original no está disponible en esa función. El nombre del parámetro está
disponible en la función de recepción porque el nombre del parámetro se declaró allí.
- Si la declaración está en un componente generable, como por ejemplo un programa, pero fuera de
cualquier función, el identificador está en ámbito global de programa, lo que significa que
cualquier función invocada por ese componente puede hacer referencia al identificador.
Por ejemplo, si un programa declara Var01 e invoca Function01 que a su vez invoca Function02, Var01
está disponible a lo largo de ambas funciones.
Los identificadores de un texto o un formulario de
impresión son globales para el componente generable que hace referencia al formulario. Esos
identificadores están disponibles incluso en las funciones que preceden a la función que presenta
el formulario.
- Si la declaración está en una biblioteca pero fuera de cualquier función, el identificador está
en ámbito de unidad de ejecución, lo que significa global para todo el código de la unidad
de ejecución.
- Los nombres de un dataTable y sus componentes pueden estar en ámbito global de programa, de
unidad de ejecución o incluso aún mayor dependiendo del valor de las propiedades dataTable y del
entorno en el que reside dataTable.
Los identificadores idénticos no pueden estar en el mismo ámbito. Sin embargo, la mayoría de
identificadores hacen referencia a un área de memoria que está lógicamente dentro de un contenedor
como por ejemplo un registro y, en esos casos, el código califica un identificador con el nombre
del contenedor encerrador. Si la variable de función myString está en un registro llamado
myRecord01, por ejemplo, el código hace referencia a la variable como un campo del registro:
myRecord01.myString
Si el mismo identificador está en dos ámbitos, cualquier referencia al identificador es una
referencia al ámbito más local, pero puede utilizar calificadores para alterar temporalmente ese
comportamiento:
- Considere el caso de un programa que declara la variable Var01 e invoca una función que a su
vez declara una variable del mismo nombre. Una referencia no calificada a Var01 en la función
implica el acceso a la variable declarada localmente.
Para acceder a un identificador que sea
global de programa, incluso cuando un identificador local tenga precedencia, califique el
identificador con la palabra clave
this, como en el ejemplo siguiente:
this.Var01
En contadas ocasiones, la palabra clave this también
se utiliza para alterar temporalmente un comportamiento de un bloque de valor establecido en una
sentencia de asignación.
Para conocer más detalles, consulte la sección Establecer bloques de valor.
- Considere el caso siguiente:
- Un programa tiene una declaración de utilización para acceder a una biblioteca
- El programa y la biblioteca declaran ambos una variable llamada Var01.
Si una función del programa incluye una referencia no calificada a Var01, la función accede
a la variable del programa.
Para acceder a un identificador en ámbito de unidad de ejecución,
incluso cuando otro identificador impida ese acceso, califique el identificador con el nombre de
componente, como en el ejemplo siguiente (donde myLib es el nombre de una biblioteca):
myLib.Var01
Si la
biblioteca o el dataTable están en un paquete distinto y no ha hecho referencia al componente en una
sentencia de importación, el nombre del componente deberá ir precedido por el nombre del paquete,
como en el ejemplo siguiente (donde myPkg es el nombre del paquete):
myPkg.myLib.Var01
El nombre del paquete siempre califica un nombre de componente y no puede ir inmediatamente
precedido por una variable o un identificador de constante.
Finalmente, un identificador
local puede ser igual que un nombre de biblioteca o dataTable si el identificador local está en un
paquete distinto de aquel en el que reside el dataTable o la biblioteca. Para hacer referencia al
nombre de biblioteca o dataTable, incluya el nombre del paquete.