Operador de resolução de escopo - Scope resolution operator

Na programação de computadores , o escopo é um contexto abrangente onde valores e expressões são associados. O operador de resolução de escopo ajuda a identificar e especificar o contexto ao qual um identificador se refere, especialmente especificando um namespace . Os usos específicos variam em diferentes linguagens de programação com as noções de escopo. Em muitos idiomas, o operador de resolução de escopo é escrito :: .

Em algumas linguagens, notavelmente aquelas influenciadas por Modula-3 (incluindo Python e Go ), módulos são objetos , e a resolução de escopo dentro dos módulos é um caso especial de acesso de membro de objeto comum, então o operador de método usual . é usado para resolução de escopo. Outras linguagens, notadamente C ++ e Ruby , apresentam resolução de escopo e acesso a métodos, que interagem de várias maneiras; veja os exemplos abaixo.

C ++

class A {
public:
    static int i; // scope of A
};

namespace B {
    int c = 2;
}  // namespace B

int A::i = 4;  // scope operator refers to the integer i declared in the class A
int x = B::c;  // scope operator refers to the integer c declared in the namespace B

PHP

Em PHP , o operador de resolução de alcance também é chamado Paamayim Nekudotayim ( Hebrew : פעמיים נקודותיים , pronunciado  [paʔamajim nekudotajim] , a segunda palavra de uma corrupção coloquial נקודתיים, pronunciado  [nekudatajim] ), o que significa “duplo con ” em Hebrew.

O nome "Paamayim Nekudotayim" foi introduzido no Zend Engine 0.5 desenvolvido em Israel e usado no PHP 3 . Embora tenha sido confuso para muitos desenvolvedores que não falam hebraico, ele ainda está sendo usado no PHP 7, como neste exemplo de mensagem de erro:

$ php -r ::
Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM

Um erro semelhante também pode ocorrer onde nenhum operador de resolução de escopo está presente. Por exemplo, tentar verificar se uma constante é empty () aciona este erro:

$ php -r 'define("foo", "bar"); if (empty(foo)) echo "empty";'
Parse error: syntax error, unexpected ')', expecting T_PAAMAYIM_NEKUDOTAYIM

A partir do PHP 5.4, as mensagens de erro relacionadas ao operador de resolução de escopo ainda incluem esse nome, mas esclarecem um pouco seu significado:

$ php -r ::
Parse error:  syntax error, unexpected '::' (T_PAAMAYIM_NEKUDOTAYIM)

Existem outras maneiras menos óbvias de acionar o erro, por exemplo, tentando usar a seguinte expressão PHP inválida:

$ php -r static const '$a=1'
Parse error:  syntax error, unexpected end of file, expecting :: (T_PAAMAYIM_NEKUDOTAYIM)

Rubi

Em Ruby , a resolução de escopo pode ser especificada usando namespaces (como classes ou módulos).

module Example
  Version = 1.0

  class << self # We are accessing the module's singleton class
    def hello(who = "world")
      "Hello #{who}"
    end
  end
end #/Example

Example::hello # => "Hello world"
Example.hello "hacker" # => "Hello hacker"

Example::Version # => 1.0
Example.Version # NoMethodError

# This illustrates the difference between the message (.) operator and the scope operator in Ruby (::)
# We can use both ::hello and .hello, because hello is a part of Example's scope and because Example
# responds to the message hello.
#
# We can't do the same with ::Version and .Version, because Version is within the scope of Example, but
# Example can't respond to the message Version, since there is no method to respond with.

O escopo também é afetado por sigilos que precedem nomes de variáveis:

Referências

links externos