Responda conforme a questão:
Cite cinco elementos que estão na linguagem python e javascript e que são considerados como elementos de programação funcional. (10 escores)
Cite cinco elementos que estão na linguagem python e javascript e que são considerados como elementos de programação funcional. (10 escores)
Passo 1
O enunciado pede para citar cinco elementos que existem tanto em Python quanto em JavaScript e que são típicos de programação funcional. O conteúdo aqui é o paradigma funcional, que enfatiza funções como “cidadãos de primeira classe”, imutabilidade e composição pura. Precisamos identificar cinco características ou mecanismos presentes nas duas linguagens que refletam esse estilo.
Passo 2
Funções como cidadãos de primeira classe
Em programação funcional, “funções de primeira classe” significa que você pode atribuir uma função a uma variável, passar essa variável como argumento e até retorná-la de outra função.
Em programação funcional, “funções de primeira classe” significa que você pode atribuir uma função a uma variável, passar essa variável como argumento e até retorná-la de outra função.
- Em Python:
def soma(x, y):
return x + y
f = soma # atribuição
print(f(2, 3)) # usa soma via variável f
- Em JavaScript:
function soma(x, y) {
return x + y;
}
const f = soma;
console.log(f(2, 3)); // idem
Passo 3
Funções de ordem superior
São funções que recebem outras funções como parâmetro ou que retornam funções como resultado. Isso possibilita compor comportamentos e criar pipelines.
São funções que recebem outras funções como parâmetro ou que retornam funções como resultado. Isso possibilita compor comportamentos e criar pipelines.
- Python tem
map
,filter
,reduce
(do módulofunctools
), mas você também pode criar as suas. - JavaScript tem métodos nativos de array
.map()
,.filter()
,.reduce()
e você pode escrever funções que recebam callbacks.
Passo 4
Funções anônimas
Programação funcional usa muito funções sem nome (lambda) para operações pontuais ou passá-las rapidamente como callback.
Programação funcional usa muito funções sem nome (lambda) para operações pontuais ou passá-las rapidamente como callback.
- Em Python:
quadrado = lambda x: x * x
print(quadrado(5))
- Em JavaScript:
const quadrado = x => x * x;
console.log(quadrado(5));
Passo 5
Closures
Uma closure ocorre quando uma função “lembra” do escopo em que foi criada, mesmo depois desse escopo ter sido executado. Isso permite criar funções com estado encapsulado.
Uma closure ocorre quando uma função “lembra” do escopo em que foi criada, mesmo depois desse escopo ter sido executado. Isso permite criar funções com estado encapsulado.
- Python:
def \(make_contador\)():
total \(=0\)
def conta():
nonlocal total
total \(+=1\)
return total
return conta
c = \(make_contador\)()
print(c(), c(), c()) # \(123\)
- JavaScript:
function makeContador() {
let total \(=0\);
return function() {
total \(+=1\);
return total;
}
}
const c = makeContador();
console.log(c(), c(), c()); // \(123\)
Passo 6
Recursão
Em vez de usar laços imperativos, funções que chamam a si mesmas para resolver subproblemas são outro pilar do estilo funcional. Tanto Python quanto JavaScript suportam recursão (embora em JS você ainda tenha que cuidar do limite de recursão se não usar otimizações de cauda).
Em vez de usar laços imperativos, funções que chamam a si mesmas para resolver subproblemas são outro pilar do estilo funcional. Tanto Python quanto JavaScript suportam recursão (embora em JS você ainda tenha que cuidar do limite de recursão se não usar otimizações de cauda).
def fatorial(n):
return 1 if n <\(=1\) else n * fatorial(n-1)
const fatorial = n =>
n <\(=1\) ? 1 : n * fatorial(n - 1);
Resposta
- Funções como cidadãos de primeira classe
- Funções de ordem superior
- Funções anônimas (lambda em Python e arrow functions em JS)
- Closures
- Recursão