1.3 Formulação de abstrações com funções de ordem superior
Vimos que as funções são, na verdade, abstrações que descrevem operações compostas em números independentes dos números particulares. Por exemplo, quando declaramos
Carregando playground de código...
não estamos falando sobre o cubo de um determinado número, mas sim sobre um método para obter o cubo de qualquer número. Claro que poderíamos continuar sem nunca declarar esta função, sempre escrevendo expressões como
3 * 3 * 3
x * x * x
y * y * y
e nunca mencionando cube explicitamente. Isso nos colocaria em séria desvantagem, obrigando-nos a trabalhar sempre no nível das operações particulares que por acaso são primitivas na linguagem (multiplicação, neste caso), e não em termos de operações de nível superior. Nossos programas seriam capazes de computar cubos, mas nossa linguagem não teria a habilidade de expressar o conceito de cubos. Uma das coisas que devemos exigir de uma linguagem de programação poderosa é a capacidade de construir abstrações atribuindo nomes a padrões comuns e, em seguida, trabalhar em termos de abstrações diretamente. As funções fornecem essa capacidade. É por isso que todas as linguagens de programação, exceto as mais primitivas, incluem mecanismos para declarar funções.
No entanto, mesmo no processamento numérico, seremos severamente limitados em nossa capacidade de criar abstrações se ficarmos restritos a funções cujos parâmetros devem ser números. Frequentemente, o mesmo padrão de programação será usado com várias funções diferentes. Para expressar esses padrões como conceitos, precisaremos construir funções que podem aceitar funções como argumentos ou funções de retorno como valores. As funções que manipulam funções são chamadas de funções de ordem superior. Esta seção mostra como as funções de ordem superior podem servir como poderosos mecanismos de abstração, aumentando enormemente o poder expressivo de nossa linguagem
📝 Encontrou algo errado nesta página?
Sua ajuda é muito importante para melhorar a qualidade da tradução!
🐛 Encontrou um erro?
Se você encontrou:
- Erro de tradução (palavra incorreta, termo técnico errado)
- Erro de ortografia ou gramática
- Link quebrado
- Código de exemplo que não funciona
- Problema de formatação
❓ Tem uma dúvida?
Se você tem:
- Dúvida sobre o conteúdo desta seção
- Pergunta sobre um conceito do SICP
- Dificuldade em entender algum exemplo
- Questão sobre a tradução de algum termo
💡 Tem uma sugestão de melhoria?
Se você quer sugerir:
- Melhoria na explicação
- Exemplo adicional
- Recurso visual (diagrama, ilustração)
- Qualquer outra ideia
🌍 Quer discutir a tradução?
Se você quer debater:
- Escolha de tradução de algum termo
- Consistência de terminologia
- Nuances do português
Obrigado por ajudar a melhorar o SICP.js PT-BR! ✨