ABSTRAÇÃO, entendendo de forma simples como reduzir a carga cognitiva de uma função.
Certa vez lendo o livro Clean Code do Uncle Bob me deparei com uma frase do tipo: "Um bom programador é aquele que programa para outro programador entender e não somente o computador" que me fez refletir sobre ser um programador e ser um bom programador.
Acho que todos aqui deve estar cansado sobre o tema de Clean Code mas se não fosse tão importante não seria repetido varias vezes, não é mesmo?
O que é abstração?
Em suma é deixar o seu código menos complexo escondendo os detalhes de implementação, que podem ser feito por classes ou até mesmo funções.Bad: Veja como a função parseBetterJSAlternative tem várias responsabilidades ferindo o Single responsibility principle, lembrando que uma função ideal segundo Uncle Bob deve ter no máximo 8 linhas.
function parseBetterJSAlternative(code) {
const REGEXES = [
// ...
];
const statements = code.split(" ");
const tokens = [];
REGEXES.forEach(REGEX => {
statements.forEach(statement => {
// ...
});
});
const ast = [];
tokens.forEach(token => {
// lex...
});
ast.forEach(node => {
// parse...
});
}
Good: Agora veja como a carga cognitiva foi reduzida e os detalhes de implementação foram escondidos fazendo as devidas abstrações para funções. Quando você tem mais de um nível de abstração, sua função geralmente está fazendo muito. A divisão de funções leva à reutilização e testes mais fáceis.
function parseBetterJSAlternative(code) {
const tokens = tokenize(code);
const syntaxTree = parse(tokens);
syntaxTree.forEach(node => {
// parse...
});
}
function tokenize(code) {
const REGEXES = [
// ...
];
const statements = code.split(" ");
const tokens = [];
REGEXES.forEach(REGEX => {
statements.forEach(statement => {
tokens.push(/* ... */);
});
});
return tokens;
}
function parse(tokens) {
const syntaxTree = [];
tokens.forEach(token => {
syntaxTree.push(/* ... */);
});
return syntaxTree;
}