Ligação e escopo
Ligação (Binding):
Ligação é uma associação entre um objeto (variável, tipo,módulo, função, etc) e seus atributos (nome, endereço, tipo, etc).
Em ruby a atribuição de um valor a uma variável funciona como uma declaração. O tipo da variável é determinado pelo valor que lhe foi atribuído, e pode ser modificado durante a execução do programa. A ligação ocorre portanto em tempo de execução, e a tipagem é dinâmica.´
Entidades que podem ser vinculadas são : valores primitivos, valores compostos, referências para variáveis, classes, modulos e métodos.
Escopo:
Ruby tem uma estrutura de bloco aninhada, ou seja:
— Declarações no nível mais externo têm escopo global (nível 1).
— Declarações dentro de um bloco interno são locais ao bloco; cada bloco está dentro de outro bloco, com um nível a mais.
O escopo (âmbito) de uma variável local em Ruby é um dos seguintes:
- proc{…}
- loop{…}
- def…end
- class…end
- module…end
- O programa inteiro (se não há nenhum dos itens anteriores)
Ruby implementa o escopo estático (as variáveis tem seu escopo determinado antes da execução do programa, ou seja, não é determinado durante o tempo de execução, como seria o escopo dinâmico).
Mas em Ruby todas as variáveis podem ser local, global – $, atributos de objeto (de instância) – @ (a variável é acessível somente à classe) ou atributos de classe – @@ (a variável é acessível à classe e a todas que herdarem dela). O que pode confudir na hora de determinar qual escopo a linguagem tem.
Por exemplo:
Código 1
$s = 2;
def scaled(d)
d*$s;
end
def teste()
s = 3;
scaled(3);
end
puts teste();
Código 2
$s = 2;
def scaled(d)
d*$s;
end
def teste()
$s = 3;
scaled(3);
end
puts teste();
No código 1 será impresso 6 e no código 2 será impresso 9. Nesses códigos exemplificam duas diferentes formas de acesso a uma variável, mas o escopo continua sendo estático.Não está relacionado com o TIPO de escopo, mas com o escopo em si (escopo = faixa de instruções no qual uma variável é visível). Ou seja, está relacionado com a forma de acesso a ambientes locais ou não locais.
Declarações
Uma declaração é uma frase de um programa que ao ser elaborada produz ocorrências e vínculos. Ruby suporta os principais tipos de declarações, com exceção de declarações colaterais.
definição – é uma declaração cujo único efeito é produzir associações. Como exemplo, tem-se a declaração de constantes.
Ex:
Constante = 10
declaração de tipos -uma declaração de um novo tipo cria um tipo e produz um vínculo. Como em Ruby TUDO é objeto, pode-se definir um novo tipo através de classes (TAD):
Ex:
class Foo
@foo
end
declaração de variáveis – uma declaração de variável nova cria uma variável e produz um vínculo. Como foi dito ateriormente, em Ruby, todas as variáveis podem ser local, global ou atributos de classe. Como Ruby é dinamicamente tipada, a declaração de uma variável é feita quando se associa um valor à mesma:
Ex:
foo = Foo.new
declaração sequencial – sintaxe semelhante aos comandos seqüenciais:
Ex:
@foo; @foo2 # declaracao da variavel @foo e da variavel @foo2
obs: o ‘#’ significa início de comentário
declaração recursiva – Uma declaração recursiva usa as próprias declarações que ela produz, pode ser, por exemplo, uma declaração de tipos recursivos ou definições de funções e procedimentos recursivos.
Ex:
def fib(n)
return 1 if n <= 1
return fib(n – 1) + fib(n – 2)
end
Deixe um comentário