¿Qué es alcance en lenguaje?
Alcance c
En programación informática, el ámbito de un nombre vinculado -una asociación de un nombre a una entidad, como una variable- es la parte de un programa donde el nombre vinculado es válido, es decir, donde el nombre puede utilizarse para referirse a la entidad. En otras partes del programa, el nombre puede referirse a una entidad diferente (puede tener un enlace diferente), o a nada en absoluto (puede estar sin enlace). El ámbito ayuda a evitar las colisiones de nombres; permite que el mismo nombre se refiera a diferentes objetos, siempre que los nombres tengan ámbitos distintos. El ámbito de un nombre vinculado también se conoce como la visibilidad de una entidad, sobre todo en la literatura más antigua o más técnica; esto es desde la perspectiva de la entidad referenciada, no del nombre que hace la referencia.
El término «ámbito» también se utiliza para referirse al conjunto de todas las vinculaciones de nombres que son válidas dentro de una parte de un programa o en un punto determinado de un programa, lo que se conoce más correctamente como contexto o entorno[a].
En sentido estricto[b] y en la práctica para la mayoría de los lenguajes de programación, «parte de un programa» se refiere a una porción de código fuente (área de texto), y se conoce como ámbito léxico. En algunos lenguajes, sin embargo, «parte de un programa» se refiere a una porción de tiempo de ejecución (período de tiempo durante la ejecución), y se conoce como ámbito dinámico. Ambos términos son un poco engañosos, ya que hacen un mal uso de los términos técnicos, tal y como se explica en la definición, pero la distinción en sí es exacta y precisa, y estos son los términos respectivos estándar. El ámbito léxico es el objetivo principal de este artículo, y el ámbito dinámico se entiende por contraste con el ámbito léxico.
Lenguaje de programación Pascal
El ámbito potencial de un nombre declarado en un bloque (sentencia compuesta) comienza en el punto de declaración y termina al final del bloque. El ámbito real es el mismo que el ámbito potencial, a menos que se declare un nombre idéntico en un bloque anidado, en cuyo caso el ámbito potencial del nombre en el bloque anidado se excluye del ámbito real del nombre en el bloque adjunto.
El ámbito potencial de un nombre declarado en un manejador de excepciones comienza en el punto de la declaración y termina al final del manejador de excepciones, y no está en el ámbito de otro manejador de excepciones o en el bloque adjunto.
El ámbito potencial de un nombre declarado en la sentencia init de un bucle for, en la condición de un bucle for, en la declaración_de_rango de un bucle range-for, en la sentencia init de una sentencia if o switch (desde C++17), en la condición de una sentencia if, switch o bucle while comienza en el punto de declaración y termina al final de la sentencia controlada.
El ámbito potencial de un nombre declarado en un espacio de nombres comienza en el punto de declaración e incluye el resto del espacio de nombres y todas las definiciones del espacio de nombres con un nombre idéntico que le siguen, además, para cualquier directiva de uso que introduzca este nombre o todo su espacio de nombres en otro ámbito, el resto de ese ámbito.
Ámbito léxico frente a ámbito dinámico
Darquennes, Jeroen, Salmons, Joe y Vandenbussche, Wim. «1. Language contact research: scope, trends, and possible future directions». Volumen 1, editado por Jeroen Darquennes, Joseph C. Salmons y Wim Vandenbussche, Berlín, Boston: De Gruyter Mouton, 2019, pp. 1-12. https://doi.org/10.1515/9783110435351-001
Darquennes, J., Salmons, J. y Vandenbussche, W. (2019). 1. La investigación sobre el contacto lingüístico: alcance, tendencias y posibles direcciones futuras. En J. Darquennes, J. Salmons & W. Vandenbussche (Ed.), Volumen 1 (pp. 1-12). Berlín, Boston: De Gruyter Mouton. https://doi.org/10.1515/9783110435351-001
Darquennes, J., Salmons, J. y Vandenbussche, W. 2019. 1. La investigación sobre el contacto lingüístico: alcance, tendencias y posibles direcciones futuras. En: Darquennes, J., Salmons, J. y Vandenbussche, W. ed. Volumen 1. Berlín, Boston: De Gruyter Mouton, pp. 1-12. https://doi.org/10.1515/9783110435351-001
Darquennes, Jeroen, Salmons, Joe y Vandenbussche, Wim. «1. Language contact research: scope, trends, and possible future directions» En el volumen 1 editado por Jeroen Darquennes, Joseph C. Salmons y Wim Vandenbussche, 1-12. Berlín, Boston: De Gruyter Mouton, 2019. https://doi.org/10.1515/9783110435351-001
Función de alcance de Javascript
El alcance y la vinculación son temas que deben ser considerados en la mayoría de los dominios de problemas. Independientemente de si los modelos se almacenan textualmente (mediante un DSL) o en algún otro formato (binario). Básicamente abarcan las cuestiones:
El alcance define no sólo la vinculación entre recursos, sino, de forma más general, qué objetos se consideran visibles para cualquier referencia concreta en un recurso. El scoping puede definir la visibilidad intra-recurso (enlaces que apuntan a otros objetos del mismo recurso) así como la visibilidad inter-recurso (enlaces que apuntan a objetos en otros recursos). Diferentes instancias de una misma referencia pueden enlazar con objetos de diferentes recursos.
El DSL presentado en esta página puede utilizarse para especificar de forma concisa la semántica de los enlaces para una gramática Xtext determinada. Para más información sobre cuándo, por qué y cómo aplicar el lenguaje de alcance y sus construcciones, consulta la Guía del usuario de referencias cruzadas.
Xtext tiene el concepto de proveedores de ámbito, que se llaman para determinar qué objetos son visibles para cualquier referencia cruzada particular en un modelo. El proveedor de ámbito calcula así el ámbito. Una vez que el proveedor de ámbito ha calculado el ámbito para la referencia cruzada, el motor de vinculación pregunta a ese ámbito si contiene un objeto accesible con el nombre utilizado para la referencia cruzada. En caso afirmativo, la referencia cruzada se vincula a ese objeto; en caso contrario, el vínculo no se resuelve y se genera un diagnóstico de error («No se pudo resolver la referencia…»).