Sub-rotina aninhada
Em programação, uma subrotina aninhada (ou função aninhada) é uma subrotina encapsulada noutra. O contexto da subrotina aninhada é limitado à subrotina que a encapsula. Isso significa que ela pode ser chamada somente pela subrotina que a encapsula, ou pelas subrotinas diretamente ou indiretamente aninhadas pela mesma subrotina encapsuladora. O aninhamento é teoricamente ilimitado, ainda que na prática somente alguns níveis são aceitos, o que depende da implementação.
Essa técnica é uma forma de encapsulamento, e é útil para dividir tarefas procedimentais em subtarefas que fazem sentido somente localmente. Em linguagens que aceitam a técnica, outros tipos de aninhamento também são geralmente aceitos, como o aninhamento de constantes e tipos de dado.
Havendo suporte, as subrotinas aninhadas são uma forma comum de implementar algoritmos com laços de repetição em linguagens funcionais.
Exemplos
Segue um exemplo em Pascal:
function E(x: real): real
function F(y: real): real
begin
F := x + y
end
begin
E := F(3)
end
A função F está aninhada em E (note que x é visível em F, enquanto y é invisível fora de F).
Suporte
Linguagens que suportam subrotinas aninhadas incluem:
- Linguagens baseadas em ALGOL como ALGOL 68, Simula, Pascal, Modula-2 e Ada
- Versões modernas de Lisp como Scheme e Common Lisp
- Suporte completo em linguagens de script como JavaScript e ActionScript
- Suporte parcial em linguagens de script como Ruby, Python e Perl 6
- D[1]
- Extensão do GCC para C[2]
- Fortran, a partir de Fortran-90, com suporte a somente um nível de aninhamento
Ver também
- Pilha de chamada
- Closure
- Classe aninhada
Referências
- «Functions - Nested Functions». D Programming Language 2.0 (em inglês). Digital Mars. Consultado em 9 de julho de 2008
- «Nested Functions». Using the GNU Compiler Collection (GCC) (em inglês). GNU Project. Consultado em 6 de janeiro de 2007