En programación de computadoras , el alcance es un contexto envolvente donde se asocian valores y expresiones . El operador de resolución de alcance ayuda a identificar y especificar el contexto al que se refiere un identificador , particularmente al especificar un espacio de nombres . Los usos específicos varían en los diferentes lenguajes de programación con las nociones de alcance. En muchos idiomas, el operador de resolución de osciloscopio está escrito ::
.
En algunos lenguajes, en particular aquellos influenciados por Modula-3 (incluidos Python y Go ), los módulos son objetos , y la resolución del alcance dentro de los módulos es un caso especial de acceso habitual a miembros de objetos, por lo que el operador de método habitual .
se utiliza para la resolución del alcance. Otros lenguajes, en particular C ++ y Ruby , cuentan con resolución de alcance y acceso a métodos, que interactúan de varias formas; ver ejemplos a continuación.
C ++
clase A { público : static int i ; // alcance de A };espacio de nombres B { int c = 2 ; } // espacio de nombres Bint A :: i = 4 ; // operador de alcance se refiere al entero i declarado en la clase A int x = B :: c ; // operador de alcance se refiere al entero c declarado en el espacio de nombres B
PHP
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 puntos ” en hebreo.
El nombre "Paamayim Nekudotayim" se introdujo en el Zend Engine 0.5 desarrollado por Israel [1] utilizado en PHP 3 . Aunque ha resultado confuso para muchos desarrolladores que no hablan hebreo, todavía se usa en PHP 7, como en este mensaje de error de muestra:
$ php -r :: Error de análisis: error de sintaxis, T_PAAMAYIM_NEKUDOTAYIM inesperado
También puede ocurrir un error similar cuando no hay un operador de resolución de alcance. Por ejemplo, intentar comprobar si una constante está vacía () desencadena este error:
$ php -r 'define ("foo", "bar"); if (vacío (foo)) echo "vacío"; ' Error de análisis: error de sintaxis, inesperado ')', esperando T_PAAMAYIM_NEKUDOTAYIM
A partir de PHP 5.4, los mensajes de error relacionados con el operador de resolución de alcance todavía incluyen este nombre, pero han aclarado un poco su significado:
$ php -r :: Error de análisis: error de sintaxis, inesperado '::' (T_PAAMAYIM_NEKUDOTAYIM)
Hay otras formas menos obvias de desencadenar el error, por ejemplo, al intentar utilizar la siguiente expresión PHP no válida:
$ php -r static const '$ a = 1' Error de análisis: error de sintaxis, final inesperado del archivo, esperando :: (T_PAAMAYIM_NEKUDOTAYIM)
Rubí
En Ruby , la resolución del alcance se puede especificar mediante espacios de nombres (como clases o módulos).
módulo Versión de ejemplo = 1 . 0 class << self # Estamos accediendo al módulo singleton class def hello ( who = "world" ) "Hello # { who } " end end end # / EjemploEjemplo :: hola # => "Hola mundo" Ejemplo . hola "hacker" # => "Hola hacker"Ejemplo :: Número de versión => 1.0 Ejemplo . Versión # NoMethodError# Esto ilustra la diferencia entre el operador de mensaje (.) Y el operador de alcance en Ruby (: :) # Podemos usar tanto :: hola como. Hola, porque hola es parte del alcance de Ejemplo y porque Ejemplo # responde al mensaje Hola. # # 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 los nombres de las variables:
- "
$
" - variable global - "
@
" - variable de instancia deself
- "
@@
" - variable de clase - Sin sigilo, minúsculas o subrayado: variable o método local
- Sin sigilo, mayúsculas - constante
Referencias
- ^ "Operador de resolución de alcance" . Manual de PHP 5 . Consultado el 9 de agosto de 2007 .