stringtranslate.com

Operador de resolución de alcance

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 especificando un espacio de nombres o una clase . Los usos específicos varían según los diferentes lenguajes de programación con las nociones de alcance. En muchos idiomas, el operador de resolución de alcance se escribe ::.

En algunos lenguajes, especialmente 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 de 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 resolución de alcance como acceso a métodos, que interactúan de varias maneras; vea los ejemplos a continuación.

C++

clase A { público : estático 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 número entero que declaré en la clase A int x = B :: c ; // el operador de alcance se refiere al número 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 dobles ” en hebreo.

El nombre "Paamayim Nekudotayim" se introdujo en el Zend Engine 0.5 desarrollado en 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 ningún operador de resolución de alcance presente. Por ejemplo, intentar comprobar si una constante está vacía() desencadena este error:

$ php  -r 'define("foo", "barra"); 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 provocar el error, por ejemplo, intentando 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 utilizando la palabra clave module.

módulo Ejemplo Versión = 1 . 0     class << self # Estamos accediendo al singleton del módulo class def hello ( who = "world" ) "Hello #{ who } " end end end #/Ejemplo           Ejemplo :: hola # => "Hola mundo" Ejemplo . hola "hacker" # => "Hola hacker"   Ejemplo :: 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 ::hello y .hello, 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 Ejemplo, pero # Ejemplo no puede responder al mensaje Versión, ya que no hay ningún método para responder.

El alcance también se ve afectado por los sigilos que preceden los nombres de las variables:

Referencias

  1. ^ "Operador de resolución de alcance". Manual PHP 5 . Consultado el 9 de agosto de 2007 .

enlaces externos