fbpx
Wikipedia

Ámbito (programación)

En programación de computadoras, el ámbito (referido mediante su denominación en inglés scope) es el contexto que pertenece a un nombre dentro de un programa. El ámbito determina en qué partes del programa una entidad puede ser usada.

Esto sirve para que se pueda volver a definir una variable con un mismo nombre en diferentes partes del programa sin que haya conflictos entre ellos.

Si una variable es declarada dentro de un bloque (método/función/procedimiento), esta será válida solo dentro de ese bloque y se destruirá al terminar el bloque. Adicionalmente, la variable no podrá verse ni usarse fuera del bloque (en el exterior del bloque). La variable dentro del bloque es una variable local y solo tiene alcance dentro del bloque que se creó y sus bloques hijos, pero no en bloques hermanos ni padres, una variable definida fuera de cualquier bloque es una variable global y cualquier bloque puede acceder a ella y modificarla.

En el caso de programación orientada a objetos (POO), una variable global dentro de una clase es llamada variable de instancia, y cada objeto creado con esa clase tiene una. Adicionalmente existen variables globales que son comunes a un todos los objetos creados con una clase y son llamadas variables de clase.

Hay dos tipos de alcances, el estático que también es llamado lexicográfico, donde el alcance se determina en tiempo de compilación, mientras que el alcance dinámico de las variables se verifica en el hilo de ejecución.

Ejemplo en Java

public class A { public Integer numeroEntero = new Integer(); /* Variable Global a todos los Métodos */ public Integer metodo() { int num = 1; // Variable Local a método. Puede accederse dentro de este método en cualquier parte, pero no fuera del mismo. for (int i = 0;i<numeroEntero.intValue();i++) { // i es local al bucle for, sólo puede ser accedida dentro del mismo. num *= i; } // i = 2; Esta línea provocaría error al no haber declarado la variable i. i fue definida localmente al bucle for. return Integer.valueOf(num); } public void otroMetodo() { int num = 1; // Variable local a otroMetodo. num aquí es una variable distinta a la variable num de método System.out.println("Variable local num: " + num); } } 

Ámbito Léxico vs. ámbito dinámico

El uso de variables locales — de nombres variables con alcance limitado, que sólo existe dentro de una función específica— ayuda a evadir el riesgo de una colisión de nombres entre dos variables llamadas idénticamente. sin embargo, hay dos enfoques —muy diferentes— para contestar esta pregunta: ¿Qué significa estar dentro de una función?

En ámbito léxico (también llamado ámbito estático), si el ámbito del nombre de una variable es una cierta función, entonces su ámbito es el texto del programa de la función de definición: dentro de ese texto, el nombre de la variable existe, y está enlazada al valor de la variable, pero fuera del texto, el nombre de la variable no existe. Por el contrario, en ámbito dinámico, si el ámbito del nombre de una variable es cierta función, Entonces su ámbito es el periodo de tiempo durante el cual la función se ejecuta : mientras la función esté corriendo, el nombre de la variable existe, y está enlazado a su variable, pero después del retorno de la función, el nombre de la variable ya no existe.

Esto significa que si la función f invoca una función g definida de forma separada, entonces, bajo ámbito léxico, la función g no tiene acceso a las variables locales de f (asumiendo que el texto de g no se encuentra dentro del texto de f), mientras que bajo ámbito dinámico, la función g tendrá acceso a las variables locales de f (ya que g es invocado durante la invocación de f ).

Considere, por ejemplo el programa dado

$ x=1 $ function g () { echo $x ; x=2 ; } $ function f () { local x=3 ; g ; } $ f # retorna 1, o 3?.... RTA: retorna 3 $ echo $x # retorna 1, o 2?..... RTA: retorna 1 

La primera línea X=1, crea una variable global x y la inicia en 1.

La segunda línea, function g () { echo $x ; x=2 ; } define una función g que imprime el valor actual de x, y entonces sobreescribe su valor en 2.

La tercera línea, function f () { local x=3 ; g ; } define una función f que crea una variable local x (escondiendo la variable global llamada idénticamente), la inicia en 3 y entonces llama a g.

La cuarta línea llama a la función f.

La quinta línea imprime el valor actual de x.

La pregunta es, que valores retornan las instrucciones de la cuarta y la quinta línea?. Ello depende de las reglas de ámbito. Si el lenguaje de dicho programa es uno que emplea el ámbito léxico, entonces g imprime y modifica la variable global x (porque g está definida fuera de f), Entonces el programa imprime 1 y luego 2. Por el contrario, si este lenguaje usa ámbito dinámico, entonces g imprime y modifica la variable local de f llamada x (porque g es llamada desde f), entonces el programa imprime 3 y luego 1 ( En el programa dado, implementado sobre Bash esto ocurre, pues dicho lenguaje emplea ámbito dinámico).

Ámbito léxico

Con ámbito léxico, un nombre siempre refiere a su entorno léxico local. Esta es una propiedad del programa y se realiza independientemente de la llamada a la pila durante el tiempo de ejecución a través de la implementación del lenguaje.

Debido a que esta correspondencia solo requiere un análisis del programa texto estático, este tipo de ámbito es también llamado ámbito estático.

Ámbito dinámico

Con ámbito dinámico, un identificador global se refiere al identificador asociado con el entorno más reciente, y es poco común en los lenguajes modernos. en términos técnicos, esto significa que cada identificador tiene una pila global de enlazamientos. Introduciendo una variable local de nombre x empuja un enlace a la pila global del identificador x, la cual es expulsada cuando el flujo de control deja el ámbito. Evaluando x en cualquier contexto siempre se produce con el enlace del tope de la pila. Nótese que esto no puede ser realizado en el momento de la compilación porque la pila de enlazamientos solo existe durante el tiempo de ejecución, lo cual hace que este tipo de ámbito se llame ámbito dinámico.

Véase también

Enlaces externos

  •   Datos: Q1034415

Ámbito, programación, este, artículo, sección, necesita, referencias, aparezcan, publicación, acreditada, este, aviso, puesto, octubre, 2017, programación, computadoras, ámbito, referido, mediante, denominación, inglés, scope, contexto, pertenece, nombre, dent. Este articulo o seccion necesita referencias que aparezcan en una publicacion acreditada Este aviso fue puesto el 5 de octubre de 2017 En programacion de computadoras el ambito referido mediante su denominacion en ingles scope es el contexto que pertenece a un nombre dentro de un programa El ambito determina en que partes del programa una entidad puede ser usada Esto sirve para que se pueda volver a definir una variable con un mismo nombre en diferentes partes del programa sin que haya conflictos entre ellos Si una variable es declarada dentro de un bloque metodo funcion procedimiento esta sera valida solo dentro de ese bloque y se destruira al terminar el bloque Adicionalmente la variable no podra verse ni usarse fuera del bloque en el exterior del bloque La variable dentro del bloque es una variable local y solo tiene alcance dentro del bloque que se creo y sus bloques hijos pero no en bloques hermanos ni padres una variable definida fuera de cualquier bloque es una variable global y cualquier bloque puede acceder a ella y modificarla En el caso de programacion orientada a objetos POO una variable global dentro de una clase es llamada variable de instancia y cada objeto creado con esa clase tiene una Adicionalmente existen variables globales que son comunes a un todos los objetos creados con una clase y son llamadas variables de clase Hay dos tipos de alcances el estatico que tambien es llamado lexicografico donde el alcance se determina en tiempo de compilacion mientras que el alcance dinamico de las variables se verifica en el hilo de ejecucion Indice 1 Ejemplo en Java 2 Ambito Lexico vs ambito dinamico 3 Ambito lexico 4 Ambito dinamico 5 Vease tambien 6 Enlaces externosEjemplo en Java Editarpublic class A public Integer numeroEntero new Integer Variable Global a todos los Metodos public Integer metodo int num 1 Variable Local a metodo Puede accederse dentro de este metodo en cualquier parte pero no fuera del mismo for int i 0 i lt numeroEntero intValue i i es local al bucle for solo puede ser accedida dentro del mismo num i i 2 Esta linea provocaria error al no haber declarado la variable i i fue definida localmente al bucle for return Integer valueOf num public void otroMetodo int num 1 Variable local a otroMetodo num aqui es una variable distinta a la variable num de metodo System out println Variable local num num Ambito Lexico vs ambito dinamico EditarEl uso de variables locales de nombres variables con alcance limitado que solo existe dentro de una funcion especifica ayuda a evadir el riesgo de una colision de nombres entre dos variables llamadas identicamente sin embargo hay dos enfoques muy diferentes para contestar esta pregunta Que significa estar dentro de una funcion En ambito lexico tambien llamado ambito estatico si el ambito del nombre de una variable es una cierta funcion entonces su ambito es el texto del programa de la funcion de definicion dentro de ese texto el nombre de la variable existe y esta enlazada al valor de la variable pero fuera del texto el nombre de la variable no existe Por el contrario en ambito dinamico si el ambito del nombre de una variable es cierta funcion Entonces su ambito es el periodo de tiempo durante el cual la funcion se ejecuta mientras la funcion este corriendo el nombre de la variable existe y esta enlazado a su variable pero despues del retorno de la funcion el nombre de la variable ya no existe Esto significa que si la funcion f invoca una funcion g definida de forma separada entonces bajo ambito lexico la funcion g no tiene acceso a las variables locales de f asumiendo que el texto de g no se encuentra dentro del texto de f mientras que bajo ambito dinamico la funcion g tendra acceso a las variables locales de f ya que g es invocado durante la invocacion de f Considere por ejemplo el programa dado x 1 function g echo x x 2 function f local x 3 g f retorna 1 o 3 RTA retorna 3 echo x retorna 1 o 2 RTA retorna 1La primera linea X 1 crea una variable global x y la inicia en 1 La segunda linea function g echo x x 2 define una funcion g que imprime el valor actual de x y entonces sobreescribe su valor en 2 La tercera linea function f local x 3 g define una funcion f que crea una variable local x escondiendo la variable global llamada identicamente la inicia en 3 y entonces llama a g La cuarta linea llama a la funcion f La quinta linea imprime el valor actual de x La pregunta es que valores retornan las instrucciones de la cuarta y la quinta linea Ello depende de las reglas de ambito Si el lenguaje de dicho programa es uno que emplea el ambito lexico entonces g imprime y modifica la variable global x porque g esta definida fuera de f Entonces el programa imprime 1 y luego 2 Por el contrario si este lenguaje usa ambito dinamico entonces g imprime y modifica la variable local de f llamada x porque g es llamada desde f entonces el programa imprime 3 y luego 1 En el programa dado implementado sobre Bash esto ocurre pues dicho lenguaje emplea ambito dinamico Ambito lexico EditarCon ambito lexico un nombre siempre refiere a su entorno lexico local Esta es una propiedad del programa y se realiza independientemente de la llamada a la pila durante el tiempo de ejecucion a traves de la implementacion del lenguaje Debido a que esta correspondencia solo requiere un analisis del programa texto estatico este tipo de ambito es tambien llamado ambito estatico Ambito dinamico EditarCon ambito dinamico un identificador global se refiere al identificador asociado con el entorno mas reciente y es poco comun en los lenguajes modernos en terminos tecnicos esto significa que cada identificador tiene una pila global de enlazamientos Introduciendo una variable local de nombre x empuja un enlace a la pila global del identificador x la cual es expulsada cuando el flujo de control deja el ambito Evaluando x en cualquier contexto siempre se produce con el enlace del tope de la pila Notese que esto no puede ser realizado en el momento de la compilacion porque la pila de enlazamientos solo existe durante el tiempo de ejecucion lo cual hace que este tipo de ambito se llame ambito dinamico Vease tambien EditarVariable Variable local Variable global Variable estatica Variable externa Variable de instancia Variable de clase Variable de entornoEnlaces externos EditarControl de subprogramas y control de datos Variables y ambito Flash CS3 enlace roto disponible en Internet Archive vease el historial la primera version y la ultima Ambito java Datos Q1034415 Obtenido de https es wikipedia org w index php title Ambito programacion amp oldid 139475766, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos