Introdução Nós usamos linguagens de programação diariamente, e as vezes pode parecer que o computador está fazendo uma mágica: você escreve um arquivo de texto e o computador magicamente executa as operações que esse arquivo descreve.
Quando eu era criança, existia um desenho animado chamado “De onde vem?”. A cada episódio algo era explicado, como por exemplo, “De onde vem o vidro?”. Era uma explicação simples e de fácil entendimento, porém bem satisfatória.
Introdução Segundo o site oficial do Elasticsearch, ele é uma engine RESTFul distribuída de busca. Esse monte de palavras basicamente querem dizer que ele é um banco de dados que funciona de forma distribuída por natureza (pode usar várias máquinas em paralelo de forma super fácil) e que expõe uma API RESTFul para que o usuário interaja com o banco, seja escrevendo ou buscando dados, entre outras coisas.
O Elasticsearch é uma ferramenta incrível quando o assunto é trabalhar com uma quantidade massiva de dados e fazer buscas em textos longos (diga adeus aos select like %texto% lentos).
A parte 1 do artigo se encontra aqui. Entendendo A Função Reduce - Parte 1
Eu dei uma relida no artigo sobre reduce que tinha publicado anteriormente, e percebi algumas coisas que eu gostaria de adicionar, vamos lá. Se você não leu o artigo anterior, eu recomendo ler.
Tipos de retorno no reduce O reduce recebe uma lista do tipo X (onde X pode ser um objeto, um número, qualquer coisa) e geralmente te retorna um único valor do tipo X, vamos dizer que isso é do tipo [X] -> X.
TL;DR Classes deveriam ser pequenas, deveriam fazer somente uma coisa e deveriam ter somente um motivo para mudar
Classes deveriam ser pequenas Existe um milhão de motivos para odiar classes grandes: o código fica com aspecto de bagunçado, existem literalmente dezenas de métodos que podem fuçar em todos os atributos da classe, o que aumenta a chance de algum erro passar despercebido, e também é uma porcaria se “mover” na classe, você pula pra um método privado da classe, e vai pra 1000 linhas abaixo de onde você estava.
Falar que testes são importantes para a mantenabilidade do código é chover no molhado, mas é sempre bom ter em mente que nem todo teste trás tanto benefício assim. Testes que quebram o tempo todo, são difíceis de estender, e complicados de entender, são mais prejudiciais do que benéficos para a sua codebase, e o autor explica o porquê nesse trecho.
“Ter testes ‘sujos’ é o equivalente ou até mesmo pior do que não ter testes.
Introdução A primeira impressão que tive sobre o capítulo sobre formatação é que ele só teria obviedades, afinal, formatar código não tem muito segredo, mas eu vi algumas provocações interessantes que gostaria de compartilhar.
Por exemplo, se eu perguntasse que código funcionando é a coisa mais importante no trabalho de um Programador, a grande maioria das pessoas diria que sim. E o uncle bob no começo do capítulo lança uma provocação e diz que isso não é verdade.
Esse artigo é a continuação do tema “funções”, por favor leia a parte 1 primeiro.
Um nível de abstração por função Para garantir que a nossa função faz somente uma coisa, nós precisamos ter certeza que os pedaços de código dentro da função estão no mesmo nível de abstração. O que eu quero dizer com isso é que se uma parte da sua função está cuidando de coisas bem abstratas, não faz muito sentido misturar isso com detalhes de implementação logo abaixo.
Parafraseando o próprio uncle bob, funções são a primeira linha de organização de qualquer programa. Ou seja, na maioria das linguagens, uma função (ou método) é a “menor” forma de organizar seu código.
Você pode ter classes, interfaces e tudo mais, mas dentro disso tudo estarão funções mantendo sua codebase organizada. Ou bagunçada, depende de como você as usa. Eu diria que essa é uma das partes mais importantes dessa série de artigos justamente por isso.
Bons nomes são demasiadamente importantes no desenvolvimento de software e este artigo visa cobrir as melhores dicas do livro Clean Code sobre a escolha de bons nomes
A função reduce é bastante incompreendida por muitos programadores. Tendo isso em vista hoje vamos mexer um pouco com essa função e implementarmos a nossa própria versão para clarificar mais o que essa função faz debaixo dos panos