Programação Funcional: O que é o conceito Closure? (JavaScript/TypeScript)
Sempre que escrevemos código, escrevemos funções. Uma função é um bloco de código reutilizável que pode ser chamado em qualquer lugar.
Quando chamamos uma função, podemos fornecer entradas para ela como argumentos, ela executa o código e retorna a saída.
O que é o conceito Closure?
O conceito de fechamento é a declaração da função dentro de outra função. Este conceito dá à função interna a capacidade de acessar os estados da função externa (como variáveis e argumentos).
Vamos ver um exemplo de código
const outerFunction = () => {
const state = 10;
const printState = () => {
console.log(state);
};
printState();
};
outerFunction(); // print : 10
Declarar uma função dentro de outra nos permite escrever algum código e declarar o que esse código faz ao nomear a função. A vantagem é que nosso código se torna mais declarativo. Agora sabemos o que nosso código faz lendo o nome da função em vez de ler o próprio código.
Código sem fechamento
vamos ver um código sem fechamento
const getFileSeparatorByOs = (os: 'linux' | 'windows', enableOsCheking = true) => {
if (enableOsCheking) {
if (os === 'linux') {
return '/';
}
if (os === 'windows') {
return '\\'
}
} else {
return '/'
}
};
const linuxSeparator = getFileSeparatorByOs('linux');
console.log(linuxSeparator);
const windowsSeparator = getFileSeparatorByOs('windows');
console.log(windowsSeparator);
const defaultSeparator = getFileSeparatorByOs('windows', false);
console.log(defaultSeparator);
Este código não é realmente complicado de entender, mas podemos torná-lo mais declarativo (fácil de ler).
Código com fechamento
vamos ver um código sem fechamento
const getFileSeparatorByOs = (os: 'linux' | 'windows', enableOsCheking = true) => {
const getLinuxSeparator = () => '/';
const getWindowsSeparator = () => '\\';
const getDefaultSeparator = () => '/';
if (enableOsCheking) {
if (os === 'linux') {
return getLinuxSeparator();
}
if (os === 'windows') {
return getWindowsSeparator();
}
} else {
return getDefaultSeparator();
}
};
const linuxSeparator = getFileSeparatorByOs('linux');
console.log(linuxSeparator);
const windowsSeparator = getFileSeparatorByOs('windows');
console.log(windowsSeparator);
const defaultSeparator = getFileSeparatorByOs('windows', false);
console.log(defaultSeparator);
Conclusão
O conceito de fechamento está declarando uma função dentro de outra para dar acesso aos estados da função externa.
Se você é fascinado por programação funcional, aqui está meu artigo sobre a função curryfication https://link.medium.com/JAoSkvB3Byb
Se este artigo foi útil para você, dê um like. E, se você gosta de conceitos de programação que permitem codificar de forma limpa, assine agora, para não perder nada.





































![O que é uma lista vinculada, afinal? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)