Nome: ? | Matrícula: ?

Programação funcional

Exercícios

Considere a seguinte função, que imprime os primeiros n números primos:

function(str, info) { return simplesEval(str, info); }

Essa função tem várias responsabilidades:

Do jeito que está, a função não é muito extensível. E se quiséssemos retornar os números primos em vez de imprimi-los? E se quiséssemos obter os números primos menores que 100? Qualquer dessas mudanças exigiria a implementação de uma nova função.

Ainda bem que Javascript é uma linguagem funcional! Vamos aproveitar os recursos da linguagem para decompor essa função em funções menores, cada uma com uma única responsabilidade, para facilitar o reuso das funções?

Isolando a checagem de números primos

Vamos decompor a função original em duas partes: a função ehPrimo(numero) determina se um número é primo ou não, e imprimePrimeiros(n, pred) imprime os primeiros n números naturais que satisfazem à função pred. Com isso, podemos reescrever imprimePrimeirosPrimos(n) combinando as duas funções.

function(str, info) { return simplesEval(str, info); }

Isolando a forma de retorno

A função atual imprime o resultado no console. E se quiséssemos mostrar em caixas de alerta? E se quiséssemos retornar um array? Vamos reescrever a função para dar essa possibilidade.

function(str, info) { return simplesEval(str, info); }

Transforme a função primeirosPred em um generator.

Nesse caso, você não precisará mais passar a função func, uma vez que primeirosPred retornará diretamente o valor através da instrução yield.

function(str, info) { return simplesEval(str, info); }