Código Limpo é uma Responsabilidade — Blocos
Fala galera, beleza? Bom hoje eu estou aqui para dar continuidade a essa magnifica série (aooooooooooooooooo). Se você não leu o último post da série, saiba que o Killgrave mandou você ler ele aqui!
Recentemente fiz algumas provas e uma delas envolvia um ‘Pythoniano’ que me fez lembrar de algo que costumo fazer nos meus códigos e que é uma prática de clean code, e por isso hoje falaremos de (rufem os tambores)…. ta… você já entendeu… ta no titulo hahaha!
Bolacha VS Biscoito da programação!
Se tem uma discussão que é a famosa Bolacha vs Biscoito da programação, essa discussão é como iniciamos um if ou qualquer outro bloco. Como a discussão literal entre bolacha e biscoito, ambos os jeitos são corretos, porem, eu vou dar a MINHA opinião sobre o assunto.
Eu prefiro o famoso if (cond) { é tão magico que até cabe numa linha hahaha. Eu não gosto de iniciar o bloco na linha de baixo, acho que tira um pouco da beleza do código, você lê uma condição e ai na outra linha, PUFF, só um { perdido na zoeira. Mas na sinceridade se você puder não usar o { não use! Falaremos disso logo mais!
Return, Single Operation If e Ternários
Algo que bati muita cabeça no teclado foi o fato do uso de if/else quando dentro deles existia um return. Em algumas IDE’s até é alertado pra ti que existe algum cara no seu código que possivelmente precisaria de um return.
Pois bem, o fato é que nem sempre precisamos declarar um else por que no fim das contas se o return do if de cima não “sair” o próximo sai!
Isso nos leva a um segundo ponto interessante! Single Operation If, ou seja um if que tem apenas uma função a ser executada! Para quem faltou das primeiras aulas de qualquer linguagem na faculdade ou simplesmente é um iniciante em linguagens que exitem os {} quando o if tem apenas UMA função não é necessário abrir as chaves, isso dado a lógica que as chaves representam um BLOCO de código, e se o seu if tem que executar apenas uma função, você pode passar ela direto! (ooooh shit fucking obviously). O que nos leva a:
Não satisfeito com isso, ainda exite casos particulares que podemos usar de um recurso chamado “If Ternário”. Operadores ternários servem para atribuições a partir de uma condição, exemplo, variável x vai receber valor de y se y existir senão vai receber o valor de 0. Ou no nosso caso, retorne “existe um bool” caso bool seja true ou retorne “não existe bool” se o bool for false.
Blocos de Código
Se você notar, até agora falamos basicamente de if/else, o motivo disso é que blocos de código normalmente são gerados por eles! Futuramente vamos falar sobre “Código Elegante e os 3 níveis de endentação”, mesmo que ache isso meio marmelada e talz… Porem algo que esta confirmado é que muitos blocos de código atrapalham a leitura do mesmo! Vamos a um exemplo prático que apliquei em uma prova recentemente!
Perceba que temos uma função e logo em seguida temos a abertura de um bloco. Esse bloco confere se o node realmente existe para que possamos realizar as funções logo abaixo! Porem pense assim, se não existir node eu posso matar a função ali, não preciso finalizar a execução. No javascript como em outras linguagens temos o poderoso (zoado, mas poderoso), return;
O return sem argumento vai devolver um null, mas o importante é que ele vai parar a execução, logo, não precisaríamos do bloco, e poderíamos fazer uma verificação simples pra ver se o código iria prosseguir ou não. Seguindo isso e as regras de Single Operation If teríamos algo assim:
Exemplo
Ok Guilherme, você tem bons argumentos, você tem exemplos, mas o negócio é o seguinte, quero IBAGENS! Exemplos praticos! Que realmente vou usar na minha vida
Ok querido leitor! Seu pedido é uma ordem! Vamos complicar as coisas, que tal angular? Vamos construir um controller simples de login. Teremos um $scope.user que terá email/password, teremos no scope um evento de submit também. Esse que vai verificar sem ambos estão preenchidos, e se o e-mail realmente é um e-mail valido! Usando um pouco de John Papa, e imaginado que estamos usando pelo menos alguns task runners o código “base” ficaria assim :
Pra ser sincero, não sei nem se isso vai funcionar uahuahauhauh Porem vamos fazer um Shazan nisso ai, e deixar ele legivel usando o que aprendemos até então:
Conclusão
A conclusão é simples : Blocos de Código em excesso, como callbacks, atrapalham na leitura do código. As vezes apenas praticas simples durante sua programação podem garantir um código mais elegante e sucinto.
E é isso ae garotada linda do meu coração, se o Domingão é do Faustão, a segundona é nossa! (forcei a barra mesmo e se reclamar forço mais!). Criticas, sugestões, dicas ou meu endereço pra me mandar bacon/chocolate ou a Scarlett Johansson, vocês podem me achar no Twitter, Linkedin e GitHub
Abraços!