SóProvas


ID
1663114
Banca
FGV
Órgão
TCM-SP
Ano
2015
Provas
Disciplina
Programação
Assuntos

Em Javascript, considere o trecho de código a seguir: 

function base(x)

{

      return function produto(y)

      {

           return x * y;

       }

}

var f = base(2);

var g = base(-1);

Após as duas atribuições, supondo que os valores de f e g não mudem, a avaliação da expressão

                             f(2) + g(-1)

produzirá o valor: 


Alternativas
Comentários
  • Eu fiz essa prova, fui aprovado, e até hoje não sei como resolver isso =o

  • Essa questão ilustra o uso de funções de ordem superior, ou seja, funções que retornam outras funções. A linha "var f = base(2);" cria uma variável que remete à função "base" com o valor de x igual a 2. A linha "var g = base(-1);" cria uma variável que faz referência à função "base" com o valor de x igual a -1. Como se trata de uma função de ordem superior, as variáveis f e g fazem referência, na verdade, à função de retorno, que tem y como argumento. Assim, ao chamar  f(2), o retorno é x * y = 2 (o valor de x foi atribuído na linha "f = base(2)") * 2 (o valor de y foi atribuído na linha "f(2)") = 4. Por sua vez, ao chamar g(-1), temos: x * y = -1 * -1 = 1. Por fim, f(2) + g(-1) = 5.

    Referência para Javascript: https://developer.mozilla.org/pt-BR/docs/Glossary/First-class_Function

    GABARITO: A

  • O pulo do gato dessa questão é perceber que a função base retorna outra função!! Então, quando ele fala que:

    var f = base(2);

    var g = base(-1);

    Precisamos saber quais serão os valores das variáveis f e g (mas já sabemos que serão do tipo função!!!).

    Ora, substituindo 2 na entrada da função base, veremos que o retorno será uma função que recebe y e retorna 2*y. Portanto:

    • f(n) = 2*n

    Por sua vez, substituindo -1 na entrada da função base, veremos que o retorno será uma função que recebe y e retorna -1*y. Portanto:

    • g(n) = -n

    Agora, é só calcular o que ele pede:   f(2) + g(-1) = 2*2 -(-1) = 4+1 = 5