Escopo refere-se à vida e acessibilidade de uma variável. Quão grande é o alcance depende de onde uma variável é declarada. Por exemplo, se uma variável é declarada na parte superior de uma classe, ela será acessível a todos os métodos de classe. Se for declarada num método, em seguida, só pode ser utilizada em tal método.
O escopo de uma variável é a parte do programa que pode acessar uma variável. Quando você tenta acessar uma variável que não está no escopo, você normalmente tem um erro do compilador. Aqui estão algumas das regras de escopo:
- Variáveis globais estão no escopo do programa e podem ser utilizadas dentro de classes.
- Variáveis de classe (campos estáticos) estão no escopo em todos os lugares na classe.
- As variáveis e parâmetros locais estão no escopo apenas dentro do método que os declarou.
Exemplo:
Neste exemplo utilizamos tipos de variáveis que possuem diferentes alcances dentro do programa e de sua respectiva classe. Utilize os comentários no código abaixo para entender os diferentes tipos de escopos.
Ruby
#!/usr/bin/env ruby
# Desenvolvimento Aberto
# Escopo.rb
$variavel_global = "olá sou uma variavel global e existo em todo programa"
# Define classe
class Escopo
# Variável da classe existe em toda a classe
# não precisa de uma instancia do objeto para existir
@@variavel_estatica = 0
# Existe para toda a classe e fora dela (Métodos públicos - Variável Privada)
attr_accessor :variavel_publica
# Construtor da classe
def initialize()
@@variavel_estatica += 1
@variavel_publica = "publica existo em toda classe e sub-classes"
end
# Retorna variável estatica
def self.variavel_estatica()
return @@variavel_estatica
end
# Imprime variável global
def imprimeVariavelGlobal()
$variavel_global = "Variável global modificada na classe"
puts $variavel_global
end
#Imprime variável publica
def imprimeVariavelPublica()
puts variavel_publica
end
# Imprime variável local
# Existe somente dentro do método
def imprimeVariavelLocal()
variavel_local = "Sou uma variável local e só existo dentro deste método"
puts variavel_local
end
end
# Imprime escopos
puts "---------------- Escopos ----------------\n\n"
puts "imprime variável global:"
puts $variavel_global
puts "Imprime variável da classe: "
puts Escopo.variavel_estatica
# Cria uma instancia da classe
escopo = Escopo.new
puts "Imprime variável global dentro da classe:"
puts escopo.imprimeVariavelGlobal
puts "Imprime variável privada com métodos públicos:"
puts escopo.imprimeVariavelPublica
puts "Imprime variável local:"
puts escopo.imprimeVariavelLocal
puts "Reimprime variável da instancia pois já existe um objeto instanciado: "
puts Escopo.variavel_estatica


