Sub-rotina aninhada
Em programação, uma subrotina aninhada (ou função aninhada) é uma subrotina encapsulada noutra. O escopo da subrotina aninhada é limitado a 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.
Índice |
[editar] 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).
[editar] 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
[editar] Ver também
Referências
- ↑ Functions - Nested Functions (em inglês). D Programming Language 2.0. Digital Mars. Página visitada em 9 de julho de 2008.
- ↑ Nested Functions (em inglês). Using the GNU Compiler Collection (GCC). GNU Project. Página visitada em 6 de janeiro de 2007.