Sub-rotina aninhada – Wikipédia, a enciclopédia livre
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[editar | editar código-fonte]
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[editar | editar código-fonte]
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[editar | editar código-fonte]
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