Previous | Tabela de conteúdos | Nexterior |
Anterior Ruby Variables | Classes de Número de Ruby e Conversões |
Agora que cobrimos o básico das variáveis em Ruby a próxima tarefa é explicar o escopo das variáveis Ruby.
>
>
>
O que é o escopo da variável?
O escopo define onde em um programa uma variável é acessível. Ruby tem quatro tipos de escopo de variável, local, global, instância e classe. Além disso, o Ruby tem um tipo constante. Cada tipo de variável é declarado usando um caractere especial no início do nome da variável, conforme descrito na tabela seguinte.
Nome começa com | Escopo variável |
---|---|
$ |
Uma variável global |
@ |
Uma variável de instância |
ou _ |
Uma variável local |
|
> Uma constante |
@@ |
Uma variável de classe |
Em adição, Ruby tem duas pseudo-variáveis que não podem ser atribuídas valores. Estas são nulas que são atribuídas a variáveis não inicializadas e auto que se referem ao objeto atualmente em execução. No resto deste capítulo vamos olhar para cada um destes escopos de variáveis por sua vez.
Detecting the Scope of a Ruby Variable
Obviamente, você pode dizer o escopo de uma variável olhando para o nome. Algumas vezes, no entanto, você precisa descobrir o escopo programmaticamente. Uma técnica útil para descobrir o escopo de uma variável é usar o método definido? definido? retornará o escopo da variável referenciada, ou nulo se a variável não estiver definida no contexto atual:
x = 10=> 10defined? x=> "local-variable"$x = 10=> 10defined? $x=> "global-variable"
Ruby Local Variables
Local variables are local to the code build in which they are declared. Por exemplo, uma variável local declarada em um método ou dentro de um loop não pode ser acessada fora desse loop ou método. Os nomes das variáveis locais devem começar com um sublinhado ou com uma letra minúscula. Por exemplo:
loopcounter = 10_LoopCounter = 20
Ruby Global Variables
A variáveis globais em Ruby são acessíveis de qualquer lugar no programa Ruby, independentemente de onde são declaradas. Os nomes das variáveis globais são prefixados com um sinal de dólar ($). Por exemplo:
$welcome = "Welcome to Ruby Essentials"
O uso de variáveis globais é fortemente desencorajado. O problema com variáveis globais é que, não apenas elas são visíveis em qualquer parte do código de um programa, elas também podem ser alteradas de qualquer lugar na aplicação. Isto pode dificultar o seguimento de bugs.
É útil saber, no entanto, que um número de variáveis globais pré-definidas estão disponíveis para você como desenvolvedor Ruby para obter informações sobre o ambiente Ruby. Um breve resumo de cada uma destas variáveis está contido na tabela seguinte.
Nome Variável | Valor Variável |
---|---|
|
A localização do último erro |
$_ |
A última string lida por gets |
$. |
O último número de linha lido pelo intérprete |
$& |
A última linha correspondida por regexp |
$~ |
A última linha correspondida por regexp como uma matriz de subexpressões |
$ n |
A n-ésima subexpressão na última partida (mesma que $~ ) |
$= |
A caixabandeira de insensibilidade |
$/ |
O separador de registos de entrada |
$\ |
O registo de saída separador |
|
O nome do ficheiro de script rubi actualmente em execução |
$* |
O argumentos de linha de comando usados para invocar o script |
$$ |
O ID do processo do interpretador Ruby |
$? |
O estado de saída do último processo filho executado |
Por exemplo, podemos executar o método get para obter a entrada do teclado, e depois referenciar a variável $_ para recuperar o valor entrado:
irb(main):005:0> getshello=> "hello\n"irb(main):006:0> $_=> "hello\n"
Alternativamente podemos encontrar o ID do processo do interpretador Ruby:
irb(main):007:0> $$=> 17403
Ruby Class Variables
Uma variável de classe é uma variável que é compartilhada entre todas as instâncias de uma classe. Isto significa que existe apenas um valor de variável para todos os objetos instanciados a partir desta classe. Isto significa que se uma instância objeto muda o valor da variável, esse novo valor mudará essencialmente para todas as outras instâncias objeto.
Uma outra forma de pensar variáveis de classe é como variáveis globais dentro do contexto de uma única classe.
Variáveis de classe são declaradas por prefixo o nome da variável com dois @ caracteres (@@). Variáveis de classe devem ser inicializadas no momento da criação. Por exemplo:
@@total = 0
Ruby Instance Variables
As variáveis de instância são similares às variáveis de Classe, exceto que seus valores são locais para instâncias específicas de um objeto. Por exemplo, se uma classe contém uma variável de instância chamada @total, se uma instância do objeto muda o valor atual de @total a mudança é local apenas para o objeto que fez a mudança. Outros objetos da mesma classe têm suas próprias cópias locais da variável que são independentes das alterações feitas em qualquer outro objeto.
Variáveis de instância são declaradas em Ruby prefixando o nome da variável com um único sinal @:
@total = 10
Escopo da Constante de Ruby
A constantes de Ruby são valores que, uma vez atribuídos a um valor, não devem ser alterados. Eu digo que deveria porque o Ruby difere da maioria das linguagens de programação na medida em que permite que um valor constante seja alterado após ter sido declarado, embora o intérprete proteste ligeiramente com uma mensagem de aviso.
Constantes declaradas dentro de uma classe ou módulo estão disponíveis em qualquer lugar dentro do contexto dessa classe ou módulo. As constantes declaradas fora de uma classe ou módulo têm um escopo global.
Anterior | Tabela de Conteúdos | Próximo |
Variáveis de Rubi compreensíveis | Classes de Número de Rubi e Conversões |