1.1.4 Funções Compostas
Identificamos em JavaScript alguns dos elementos que devem aparecer em qualquer linguagem de programação poderosa:
- Números e operações aritméticas são dados primitivos e funções primitivas.
- O aninhamento de combinações fornece um meio de combinar operações.
- Declarações de constantes que associam nomes a valores fornecem um meio limitado de abstração.
Agora aprenderemos sobre as declarações de funções, uma técnica de abstração muito mais poderosa pela qual uma operação composta pode receber um nome e, em seguida, ser chamada de unidade.
Começamos examinando como expressar a ideia de "multiplicação ao quadrado" (squaring). Podemos dizer: "Para o quadrado perfeito de algo, retorna ele vezes ele mesmo". Isso é expresso em nossa linguagem como
Podemos entender isso da seguinte forma:
function square( x ) { return x * x; }
// ^ ^ ^ ^ ^ ^ ^
// Para o quadrado de algo, retorna ele vezes ele mesmo.
// perfeito
Temos aqui uma função composta, que recebeu o nome square. A função representa a operação de multiplicação de algo por si mesmo. A coisa a ser multiplicada recebe um nome local, x, que desempenha o mesmo papel que um pronome na linguagem natural. A avaliação da declaração cria esta função composta e a associa ao nome square.1
A forma mais simples de declaração de uma função é
function nome(parâmetros) { return expressão; }
O nome é um símbolo a ser associado à definição da função no ambiente.2 Os parâmetros são os nomes usados no corpo da função para se referir aos argumentos correspondentes da função. Os parâmetros são agrupados entre parênteses e separados por vírgulas, pois estarão em uma aplicação da função que está sendo declarada. Na forma mais simples, o corpo de uma declaração de função é uma única instrução de retorno3, que consiste na palavra-chave return seguida pela expressão de retorno que produzirá o valor da aplicação da função, quando os parâmetros são substituídos pelos argumentos reais para os quais a função é aplicada. Como as declarações constantes e as declarações de expressão, as declarações de retorno terminam com um caractere de ponto e vírgula.
Tendo declarado square, agora podemos usá-lo em uma expressão de aplicação de função, que transformamos em uma instrução usando um caractere de ponto e vírgula:
441
As aplicações de função são – depois das combinações de operadores – o segundo tipo de combinação de expressões em expressões maiores que encontramos. A forma geral de uma aplicação de função é
expressão-função-expressão(expressões-argumento)
onde a expressão de função da aplicação especifica a função a ser aplicada às expressões-argumento separadas por vírgula. Para avaliar a aplicação de uma função, o interpretador segue um procedimento bastante semelhante ao procedimento para combinações de operadores descrito na seção 1.1.3.
- Para avaliar uma aplicação de função, faça o seguinte:
- Avalie as subexpressões da aplicação, a saber, a expressão de função e as expressões de argumento.
- Aplique a função que é o valor da expressão de função aos valores das expressões de argumento.