En programación informática , el ámbito es un contexto envolvente donde se asocian valores y expresiones . El operador de resolución de ámbito ayuda a identificar y especificar el contexto al que hace referencia un identificador , en particular especificando un espacio de nombres o una clase . Los usos específicos varían en los distintos lenguajes de programación con las nociones de ámbito. En muchos lenguajes, el operador de resolución de ámbito se escribe ::
.
En algunos lenguajes, en particular aquellos influenciados por Modula-3 (incluidos Python y Go ), los módulos son objetos y la resolución de alcance dentro de los módulos es un caso especial del acceso habitual a miembros de objetos, por lo que .
se utiliza el operador de método habitual para la resolución de alcance. Otros lenguajes, en particular C++ y Ruby , presentan tanto la resolución de alcance como el acceso a métodos, que interactúan de diversas maneras; consulte los ejemplos a continuación.
clase A { public : static int i ; // el alcance de i es A }; espacio de nombres B { int c = 2 ; } // espacio de nombres B int A :: i = 4 ; // el operador de alcance se refiere al entero i declarado en la clase A int x = B :: c ; // el operador de alcance se refiere al entero c declarado en el espacio de nombres B
En PHP , el operador de resolución de alcance también se llama Paamayim Nekudotayim ( hebreo : פעמיים נקודותיים , pronunciado [paʔaˈmajim nekudoˈtajim] , la segunda palabra es una corrupción coloquial de נקודתיים, pronunciada [nekudaˈtajim] ), que significa “dos dos puntos ” en hebreo.
El nombre "Paamayim Nekudotayim" fue introducido en el motor Zend 0.5 desarrollado por Israel [1] y utilizado en PHP 3. Inicialmente, el mensaje de error simplemente utilizaba el nombre del token interno para , lo que causaba confusión para quienes no hablaban hebreo. Esto se aclaró en PHP 5.4 como se muestra a continuación.::
T_PAAMAYIM_NEKUDOTAYIM
$ php -r :: Error de análisis: error de sintaxis, '::' inesperado (T_PAAMAYIM_NEKUDOTAYIM)
A partir de PHP 8, el nombre hebreo se ha eliminado del mensaje de error.
$ php -r ::Error de análisis: error de sintaxis, token inesperado "::", se esperaba el final del archivo en el código de la línea de comandos en la línea 1
En Ruby , la resolución del alcance se puede especificar utilizando la palabra clave del módulo.
Módulo Ejemplo Versión = 1 . 0 clase << self # Estamos accediendo a la clase singleton del módulo def hello ( who = "world" ) "Hola #{ who } " end end end #/Ejemplo Ejemplo :: hola # => "Hola mundo" Ejemplo ::. hola "hacker" # => "Hola hacker" Ejemplo :: Versión n.° => 1.0 Ejemplo . Versión n .° NoMethodError # Esto ilustra la diferencia entre el operador de mensaje (.) y el operador de alcance en Ruby (::) # Podemos usar tanto ::hello como .hello, porque hello es parte del alcance de Example y porque Example # responde al mensaje hello. # # No podemos hacer lo mismo con ::Version y .Version, porque Version está dentro del alcance de Example, pero # Example no puede responder al mensaje Version, ya que no hay un método para responder.
El alcance también se ve afectado por los sigilos que preceden a los nombres de las variables:
$
" - variable global@
" - variable de instancia deself
@@
" - variable de clase