<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Marylly</title>
    <description>The latest articles on DEV Community by Marylly (@marylly).</description>
    <link>https://dev.to/marylly</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F350414%2F5d482af2-6be4-4843-b244-a6e65bd9af12.jpg</url>
      <title>DEV Community: Marylly</title>
      <link>https://dev.to/marylly</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/marylly"/>
    <language>en</language>
    <item>
      <title>Engenharia de Software: O tal Code Review</title>
      <dc:creator>Marylly</dc:creator>
      <pubDate>Tue, 14 Sep 2021 23:16:17 +0000</pubDate>
      <link>https://dev.to/marylly/engenharia-de-software-o-tal-code-review-5eof</link>
      <guid>https://dev.to/marylly/engenharia-de-software-o-tal-code-review-5eof</guid>
      <description>&lt;h2&gt;
  
  
  O que é?
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Code Review&lt;/em&gt; ou Revisão de código é uma prática onde o código desenvolvido para atender determinada demanda passa pela revisão de outras pessoas desenvolvedoras antes de ser integrada a uma versão principal de um software.&lt;/p&gt;

&lt;p&gt;Idealmente não deve ser um processo mandatório, e sim um pacto do time, e o valor deve ser muito bem entendido para que existam benefícios.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;em&gt;Code Review&lt;/em&gt; x Práticas Agéis
&lt;/h2&gt;

&lt;p&gt;Do ponto de vista do desenvolvimento ágil de software, o &lt;em&gt;code review&lt;/em&gt; é um processo que impacta a velocidade do time e da entrega, e pode virar um gargalo se algumas boas práticas não são atendidas, logo uma má prática.&lt;/p&gt;

&lt;h2&gt;
  
  
  Contexto e Cenários + comuns
&lt;/h2&gt;

&lt;p&gt;Considerando muitos times de desenvolvimento de software, muitos não detém do todo o conhecimento elementar que permitam um modelo de trabalho mais ágil utilizando &lt;em&gt;trunk based&lt;/em&gt; sem um processo de &lt;em&gt;code review&lt;/em&gt; estruturado e maduro. O &lt;em&gt;trunk based&lt;/em&gt; deve ser o próximo passo após superadas essas deficiências e o processo de &lt;em&gt;code review&lt;/em&gt; eliminado.&lt;/p&gt;

&lt;h2&gt;
  
  
  Como aplicar?
&lt;/h2&gt;

&lt;p&gt;Apesar de alguns contrapontos, o processo de &lt;em&gt;code review&lt;/em&gt; pode ser bem benéfico, e pode apoiar a maturidade e evolução técnica do time em muito aspectos.&lt;/p&gt;

&lt;p&gt;Nessa prática, temos dois papéis: &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Pessoa(s) quem desenvolveu o código&lt;/li&gt;
&lt;li&gt;Pessoa(s) quem pode trazer pontos de melhoria, identificar contrapontos e sugerir formas distintas para resolver não somente o problema de implementação, como problemas relacionados a demanda do código.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Pode ser feito de duas maneiras: (1) Pessoalmente com as pessoas que a autora do código confia e se sente segura, ou sua liderança imediata. (2) Utilizando o recurso de &lt;em&gt;Pull Request&lt;/em&gt; oferecida por ferramentas de host de versionamento (GitHub, GitLab, BitBucket, etc)&lt;/p&gt;

&lt;p&gt;A expectativa do processo é responder algumas das perguntas relacionadas abaixo:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Código limpo ou &lt;a href="https://dev.to/marylly/clean-code-introducao-bfb"&gt;&lt;em&gt;Clean Code&lt;/em&gt;&lt;/a&gt;:&lt;/strong&gt; É possível as pessoas lerem o código e entender o seu propósito (comportamento/resultado)? &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Diretrizes do Projeto:&lt;/strong&gt; Perfomático, escalável, enxuto, padrões de projetos, padrões de arquitetura, &lt;em&gt;style guide&lt;/em&gt;, etc.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Funcionalidade:&lt;/strong&gt; O comportamento do código atende as expectativas da pessoa desenvolvedora e as pessoas que irão usar: clientes, etc? Efeitos colaterais no comportamento e/ou funcionalidades já existentes no software?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Complexidade:&lt;/strong&gt; As mesmas tarefas e resultados do código podem ser executadas com um código mais simples e enxuto?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Testes:&lt;/strong&gt; O código está sendo testado? Existem cenários que cubram os cenários feliz e infeliz do processo principal desenvolvido no código? Se um comportamento indesejado ou inesperado surgir, os testes sinalizaram?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Nomes:&lt;/strong&gt; Os nomes utilizados no código trazem uma conexão com os processos e problemas de negócio que o código está sendo desenvolvido para resolver? Os nomes empregados nas variáveis, classes, métodos, funções apoiam o entendimento do comportamento ou da saída de código em revisão?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7. Comentários:&lt;/strong&gt; Os que foram utilizados estão fácil de compreender, curtos e realmente úteis onde aplicados?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;8. Efeitos colaterais:&lt;/strong&gt; Impacta na comunicação e/ou comportamento de aplicações internas/externas e de parceiros? Quebra de contratos de comunicação?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;9. Documentação:&lt;/strong&gt; A documentação de apoio precisa ser atualizada? Contém o que precisa para executar alguma atividade ou tarefa relacionada ao código?&lt;/p&gt;

&lt;h2&gt;
  
  
  Benefícios
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Apoia o engajamento do time com a saúde do código;&lt;/li&gt;
&lt;li&gt;Apoia no aprendizado de linguagens, frameworks, paradigmas, etc;&lt;/li&gt;
&lt;li&gt;Acelera o engajamento de novas pessoas desenvolvedoras sobre o que é esperado do código;&lt;/li&gt;
&lt;li&gt;A medida que as boas práticas e melhorias são aplicadas, novas formas são discutidas e absorvidas, aumentando a qualidad;&lt;/li&gt;
&lt;li&gt;Fortalece a confiança da pessoa desenvolvedora e do time em &lt;em&gt;deploys&lt;/em&gt; de alta qualidade;&lt;/li&gt;
&lt;li&gt;Promove discussões sobre: (1) Tecnologias usadas e novas (2) Discussões sobre arquitetura de código (3) Discussões sobre boas práticas;&lt;/li&gt;
&lt;li&gt;Promove o compartilhamento de conhecimento e a cooperação;&lt;/li&gt;
&lt;li&gt;Apoia na identificação de refatorações e débitos técnicos que podem ser trabalhados posteriormente.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Contrapontos
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Pode gerar estresse e ansiedade para as pessoas autoras do código, principalmente para pessoas novas no time/projeto.&lt;/li&gt;
&lt;li&gt;Pode se tornar um gargalo no ciclo de desenvolvimento de software.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  RECOMENDAÇÕES
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Autora do Código
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Na apresentação ou descrição da revisão, comunique o objetivo da implementação, e se for necessário, as idéias por traz da solução desenvolvida;&lt;/li&gt;
&lt;li&gt;Se o processo for por PRs, faça-os de forma incremental com pouco conteúdo e sinalize o trabalho ainda em andamento (vulgo WIP ou &lt;em&gt;Work in Progress&lt;/em&gt;), para não desestimular as pessoas revisoras pelo volume ou pela falta de tempo para revisar adequadamente;&lt;/li&gt;
&lt;li&gt;Evite enviar para revisão pedaços de código não-funcionais ou que não agregam ao processo. Atrapalha a revisão e aumenta o tempo utilizado para entender o que o código faz;&lt;/li&gt;
&lt;li&gt;Evite códigos de coisas que ainda vão ser desenvolvidas no futuro (as vezes coisas não confirmadas). Ex. Classes vazias, métodos/funçõe vazios, as vezes só a sua assinatura, TO-DOS, etc;&lt;/li&gt;
&lt;li&gt;Não espere pelo tempo das pessoas revisoras, sinalize as envolvidas, afinal todas temos prazos para serem atendidos, e a entrega é do time, pelo alguém do time deve se organizar para fazer a revisão;&lt;/li&gt;
&lt;li&gt;Se for fazer revisão pessoalmente, agende com a pessoa e reserve um tempo para focar adequadamente no processo;&lt;/li&gt;
&lt;li&gt;Se não houver consenso ou ocorrer conflitos, busque a liderança ou outras pessoas para chegar na melhor solução possível para o contexto e momento;&lt;/li&gt;
&lt;li&gt;Em revisões privadas, compartilhe os resultados num comentário do PR ou num canal comum com o time para que todas entendam e aprendam com a informação;&lt;/li&gt;
&lt;li&gt;Evite código/artefatos desnecessários: Código comentado que não está e/ou nem será utilizado, arquivos que não precisam ser versionados ou que são temporários.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Revisora do código
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Evite criticar a pessoa ou código;&lt;/li&gt;
&lt;li&gt;Seja propositiva nos comentários, e compartilhe suas razões;&lt;/li&gt;
&lt;li&gt;Foque nas diretrizes do projeto;&lt;/li&gt;
&lt;li&gt;Evite compartilhar opiniões pessoais, faça de forma privada, somente você e a pessoa autora;&lt;/li&gt;
&lt;li&gt;Não compartilhe &lt;em&gt;feedbacks&lt;/em&gt; negativos ou construtivos, faça de forma privada, somente você e a pessoa autora;&lt;/li&gt;
&lt;li&gt;Se existir dúvida se vai ofender ou gerar conflitos, faça de forma privada ou busque apoio para transmitir a mensagem adequadamente;&lt;/li&gt;
&lt;li&gt;Nem sempre as preferências da pessoa revisora é uma regra que deve ser adotada pela pessoa autora do código, e isso deve ficar bem entendido pelas pessoas envolvidas;&lt;/li&gt;
&lt;li&gt;Sinalize quando um comentário é apenas uma sugestão, não necessariamente algo mandatório, e a pessoa autora pode tomar a decisão de fazer ou não;&lt;/li&gt;
&lt;li&gt;Busque o consenso em detrimento da imposição;&lt;/li&gt;
&lt;li&gt;Abordagens interessantes de solução foram apresentadas, reconheça, aprecie a pessoa autora do código, reforce as coisas boas e que trazem valor;&lt;/li&gt;
&lt;li&gt;Se não conhece muito bem a &lt;em&gt;codebase&lt;/em&gt;, comece pelos testes para entender o comportamento desenvolvido e os elementos do código utilizado para confrontar com a proposta inicial da demanda.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Princípios Recomendados
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Novas demandas emergentes:&lt;/strong&gt; Podem surgir necessidades de reavaliação da implementação, refatoração e até necessidade de criar novas funcionalidades. As pessoas da liderança e de negócio devem ser sinalizadas e a solução replanejada ou refatorada de acordo com o prazo, pessoas e recursos disponíveis, evitar absorver esse trabalho emergente num trabalho iniciado e identificado através de uma revisão de código;&lt;br&gt;
&lt;strong&gt;2. Ambiente seguro e inclusivo:&lt;/strong&gt; NÃO é um espaço para repressão das pessoas autoras por preconceitos por parte das pessoas revisoras, pelas características da pessoa autora do código (raça, gênero, origem, religião, inclinação política, comportamento e/ou aparência), todas as pessoas DEVEM ser respeitadas pelo o que REALMENTE são;&lt;br&gt;
&lt;strong&gt;3. Espaço de aprendizado:&lt;/strong&gt; NÃO é um espaço para as pessoas autoras serem reprimidas por falta de alguns conhecimentos, e sim, para suprir deficiências técnicas, aprender novas formas de trabalho, exporem suas idéias, fortalecerem seus conhecimentos e obter &lt;em&gt;feedback&lt;/em&gt; sobre a evolução do trabalho antes de ir para ambiente produtivo;&lt;br&gt;
&lt;strong&gt;4. Revisões rápidas:&lt;/strong&gt; O time deve ser encorajado a fazer as revisões assim que possível, o período máximo de um dia de trabalho para ser concluído.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusões
&lt;/h2&gt;

&lt;p&gt;Apesar do &lt;em&gt;Code Review&lt;/em&gt; não ser considerada uma boa prática, pode ser um espaço de muito crescimento e amadurecimento das pessoas envolvidas, e deve ser utilizado como um trampolim para a evolução para o formato &lt;em&gt;trunk based&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Se conhece outras formas para a prática do processo, compartilhe comigo nos comentários, seria muito legal continuar a conversa e evoluir sobre o tema. =]&lt;/p&gt;

&lt;p&gt;&lt;em&gt;ATENÇÃO: Esse conteúdo é a consolidação das impressões e opiniões da autora sobre o assunto, resultado de vivências e processos empíricos que trouxeram resultados para contextos específicos, não há garantia que é aderente a qualquer contexto e/ou time de desenvolvimento de software.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Referências
&lt;/h2&gt;

&lt;p&gt;Google Inc: &lt;strong&gt;The Standard of Code Review, Engineering Practices.&lt;/strong&gt; Acessado em 10 de Setembro de 2021: &lt;a href="https://google.github.io/eng-practices/review/reviewer/standard.html" rel="noopener noreferrer"&gt;https://google.github.io/eng-practices/review/reviewer/standard.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Yu, Chak Shun; Better Programming Blog: &lt;strong&gt;5 Actionable tips to deliver higher quality code reviews today.&lt;/strong&gt;&lt;br&gt;
Acessado em 14 de Setembro de 2021: &lt;a href="https://betterprogramming.pub/5-actionable-tips-to-deliver-higher-quality-code-reviews-today-de422cd538df" rel="noopener noreferrer"&gt;https://betterprogramming.pub/5-actionable-tips-to-deliver-higher-quality-code-reviews-today-de422cd538df&lt;/a&gt;&lt;/p&gt;

</description>
      <category>codereview</category>
      <category>agile</category>
      <category>bestpractice</category>
      <category>engineering</category>
    </item>
    <item>
      <title>Clean Code: Exceptions e Tratamentos de Erros</title>
      <dc:creator>Marylly</dc:creator>
      <pubDate>Thu, 02 Apr 2020 23:31:06 +0000</pubDate>
      <link>https://dev.to/marylly/exceptions-e-tratamentos-de-erros-56o7</link>
      <guid>https://dev.to/marylly/exceptions-e-tratamentos-de-erros-56o7</guid>
      <description>&lt;p&gt;Esse artigo é um de uma série que fala sobre vários tópicos relacionados a Código limpo, seguem os tópicos relacionados abaixo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://dev.to/marylly/clean-code-introducao-bfb"&gt;Código Limpo: 1. Introdução&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://dev.to/marylly/clean-code-funcoes-3n78"&gt;Código Limpo: 2. Funções&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Código Limpo: 3. &lt;em&gt;Exceptions&lt;/em&gt; e Tratamento de Erros [Você está aqui!]&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No nosso dia-a-dia, nós temos que lidar com erros, problemas e direções que algumas situações tomam na nossa vida, algumas podemos reverter, diminuir os impactos ou simplesmente aceitar o fato em sí, decisões e fluxos de fatos podem caminhar para erros e problemas. Contextualizando, imagine que você tenha um celular e você contrata um seguro, para reduzir os impactos negativos financeiros, perda de bem ou só o fato de ficar sem o aparelho celular, você não deseja que esses problemas aconteçam, mas caso sim, o seguro existe para minimizar esses impactos negativos.&lt;/p&gt;

&lt;p&gt;Assim como na vida real na situação contada acima, estamos passíveis de erros e problemas nos softwares que construímos e utilizamos, e é uma ferramenta que pode reverter ou minimizar os impactos negativos desses erros são as &lt;em&gt;Exceptions&lt;/em&gt; ou Exceções.&lt;/p&gt;

&lt;p&gt;O conceito de &lt;em&gt;Exceptions&lt;/em&gt; nasceu na linguagem LISP e é uma ferramenta que permite identificar de forma amigável e tratar erros que estão fora do fluxo normal e esperado do software.&lt;/p&gt;

&lt;p&gt;Como pessoas desenvolvedoras, é nosso dever reduzir os impactos negativos dos erros de software na vida das pessoas que utilizam o mesmo, e assim como na vida, podemos escolher lidar com (ou ignorar) o ocorrido.&lt;/p&gt;

&lt;p&gt;Muitas linguagens possuem suporte a &lt;em&gt;Exceptions&lt;/em&gt;, mas existem algumas linguagens que não possuem, C, Perl, Pascal, Golang são exemplos que não possuem suporte.&lt;/p&gt;

&lt;h3&gt;
  
  
  Principais fontes de &lt;em&gt;Exceptions&lt;/em&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Falhas de hardware;&lt;/li&gt;
&lt;li&gt;Falhas de dispositivos;&lt;/li&gt;
&lt;li&gt;Falhas de rede e comunicação;&lt;/li&gt;
&lt;li&gt;Erros de programação;&lt;/li&gt;
&lt;li&gt;Erros de sintaxe;&lt;/li&gt;
&lt;li&gt;Entrada dados com tipo incorreto.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Tratando erros
&lt;/h3&gt;

&lt;p&gt;Algumas das estruturas (statement) disponibilizadas por linguagens de programação é a &lt;em&gt;try-catch-finally&lt;/em&gt; ou a utilização de &lt;em&gt;error handler&lt;/em&gt; ou &lt;em&gt;wrappers&lt;/em&gt;. Essas estruturas permitem que para determinado fluxo de execução, seja possível recuperar-se sabendo qual erro, a identificação &lt;br&gt;
 e alguma informação específica do fluxo para resolver ou contornar o problema.&lt;/p&gt;

&lt;h3&gt;
  
  
  Exceções verificadas
&lt;/h3&gt;

&lt;p&gt;O conceito de exceções verificadas foi criada e disponibilizada na linguagem Java por &lt;a href="https://en.wikipedia.org/wiki/Jim_Waldo" rel="noopener noreferrer"&gt;Jim Waldo&lt;/a&gt;, e consiste em incluir na assinatura de todo método a lista de todas as suas exceções que pode passar para a sua chamada. Saber quais possíveis &lt;em&gt;Exceptions&lt;/em&gt; pode ser muito benéfico para leitura e entendimento do que acontece num método, mas toda vez que uma nova &lt;em&gt;Exception&lt;/em&gt; é adicionada num método ou função, é necessário:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;modificar a assinatura do método/função;&lt;/li&gt;
&lt;li&gt;modificar as chamadas adicionando um Throw para nova &lt;em&gt;Exception&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;E podem:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;gerar uma alteração em cascata de várias chamadas do método/função;&lt;/li&gt;
&lt;li&gt;acrescentar complexidade do código;&lt;/li&gt;
&lt;li&gt;quebrar o encapsulamento da implementação, porque no tratamento do &lt;em&gt;throw&lt;/em&gt; é preciso dar detalhes da implementação da &lt;em&gt;Exception&lt;/em&gt; para fazer a tratativa do erro;&lt;/li&gt;
&lt;li&gt;violar o Princípio Aberto-Fechado (&lt;em&gt;Open-Closed Principle&lt;/em&gt;) do SOLID de classes estarem abertas para extensão, mas fechadas para alteração.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Exceções &lt;em&gt;não&lt;/em&gt; verificadas
&lt;/h3&gt;

&lt;p&gt;Esse tipo de exceção não precisa ser explicitada para o seu chamador (método ou função). Possuem as vantagens em relação as Exceções verificadas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;não quebra o encapsulamento, menor dependência da implementação das &lt;em&gt;Exceptions&lt;/em&gt;;&lt;/li&gt;
&lt;li&gt;não viola o Princípio Aberto-Fechado (&lt;em&gt;Open-Closed Principle&lt;/em&gt;) do SOLID;&lt;/li&gt;
&lt;li&gt;menos código, menos bug;&lt;/li&gt;
&lt;li&gt;código limpo sem todas as tratativas de todas as &lt;em&gt;Exceptions&lt;/em&gt; possíveis.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Porém existe a desvantagem que deixa a implementação do código misteriosa, não tendo muitos detalhes das &lt;em&gt;Exceptions&lt;/em&gt; possíveis, talvez exista no código apenas as &lt;em&gt;Exceptions&lt;/em&gt; mais críticas tratadas.&lt;/p&gt;

&lt;h3&gt;
  
  
  Boas práticas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;se a &lt;em&gt;Exception&lt;/em&gt; pode ser descartada por uma correção no código, FAÇA A CORREÇÃO;&lt;/li&gt;
&lt;li&gt;tenha uma classe abstrata que padronize a estrutura e os atributos de todas as informações necessárias quando uma &lt;em&gt;Exception&lt;/em&gt; for levantada;&lt;/li&gt;
&lt;li&gt;crie tratativas para &lt;em&gt;Exceptions&lt;/em&gt; especifícas, prefira as classes de &lt;em&gt;Exceptions&lt;/em&gt; concretas;&lt;/li&gt;
&lt;li&gt;forneça contexto mínimo na sua &lt;em&gt;Exception&lt;/em&gt; para identificar a origem e a localização do erro (onde isso aconteceu mesmo no código?);&lt;/li&gt;
&lt;li&gt;contextualize suas &lt;em&gt;Exceptions&lt;/em&gt;, por exemplo, tenha a classe concreta &lt;em&gt;LoginException&lt;/em&gt; herdando a classe abstrata &lt;em&gt;Exception&lt;/em&gt; padrão e onde centraliza todos os erros tratados do contexto da funcionalidade de login;&lt;/li&gt;
&lt;li&gt;no retorno de uma função ou método que seja &lt;em&gt;Null&lt;/em&gt;, substitua por uma &lt;em&gt;Exception&lt;/em&gt;, evitando verificações desnecessárias se um retorno é = a &lt;em&gt;Null&lt;/em&gt; sem muita informações do por que tem este retorno;&lt;/li&gt;
&lt;li&gt;forneça a &lt;em&gt;Stack Trace&lt;/em&gt; somente se necessário, caso contrário disponibilize o mínimo possível de informação (Isso pode virar uma falha de segurança);&lt;/li&gt;
&lt;li&gt;tenha em mente que essas informações podem ser exibidas num erro na tela do seu cliente que pode ficar confuso ou até diminuir a confiança do mesmo;&lt;/li&gt;
&lt;li&gt;tenha em mente que essas informações podem ser exibidas para alguém mal-intencionado que pode usar para identificar falhas que podem ser exploradas no seu código;&lt;/li&gt;
&lt;li&gt;tenha em mente que isso pode ser uma informação muito útil coletada no monitoramento do seu ambiente: utilizada, consolidada e mensurada para feedback rápido de problemas no seu software durante a utilização do mesmo;&lt;/li&gt;
&lt;li&gt;por favor 🙏, testem suas &lt;em&gt;Exceptions&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Conclusão e reflexão
&lt;/h3&gt;

&lt;p&gt;Tenha em mente que a utilização de &lt;em&gt;Exceptions&lt;/em&gt; não previne erros. A ferramenta ajudará a errar melhor ou menos para que os problemas sejam mais rapidamente identificados e corrigidos, além de trazer uma qualidade na construção do seu código.&lt;/p&gt;

&lt;p&gt;Boas &lt;em&gt;Exceptions&lt;/em&gt; e até mais! =]&lt;/p&gt;

&lt;h3&gt;
  
  
  Referências
&lt;/h3&gt;

&lt;p&gt;[1] Martin, Robert. &lt;strong&gt;Código Limpo: Habilidades Práticas de Agile Software.&lt;/strong&gt; Altabooks, 2011. Rio de Janeiro.&lt;br&gt;
[2] Wikipedia. &lt;strong&gt;Tratamento de Exceções.&lt;/strong&gt; Disponível em &lt;a href="https://pt.wikipedia.org/wiki/Tratamento_de_exce%C3%A7%C3%A3o" rel="noopener noreferrer"&gt;https://pt.wikipedia.org/wiki/Tratamento_de_exce%C3%A7%C3%A3o&lt;/a&gt;, acessado em 02 de Abril de 2020 às 17:48.&lt;br&gt;
[3] Wikipedia. &lt;strong&gt;Exception Handling.&lt;/strong&gt; Disponível em &lt;a href="https://en.wikipedia.org/wiki/Exception_handling" rel="noopener noreferrer"&gt;https://en.wikipedia.org/wiki/Exception_handling&lt;/a&gt;, acessado em 02 de Abril de 2020, às 19:32.&lt;br&gt;
[4] Coding Horror. &lt;strong&gt;The First Rule of Programming: It's your fault.&lt;/strong&gt; Disponível em &lt;a href="https://blog.codinghorror.com/the-first-rule-of-programming-its-always-your-fault/" rel="noopener noreferrer"&gt;https://blog.codinghorror.com/the-first-rule-of-programming-its-always-your-fault/&lt;/a&gt;, acessado em 02 de Abril de 2020 às 20:10.&lt;br&gt;
[5] Coding Horror. &lt;strong&gt;Retrowing Exceptions.&lt;/strong&gt; Disponível em &lt;a href="https://blog.codinghorror.com/rethrowing-exceptions/" rel="noopener noreferrer"&gt;https://blog.codinghorror.com/rethrowing-exceptions/&lt;/a&gt;, acessado em 02 de Abril de 2020 às 20:19.&lt;br&gt;
[6] Coding Horror. &lt;strong&gt;What's Worse Than a Bad Error?&lt;/strong&gt; Disponível em &lt;a href="https://blog.codinghorror.com/whats-worse-than-a-bad-error-message/" rel="noopener noreferrer"&gt;https://blog.codinghorror.com/whats-worse-than-a-bad-error-message/&lt;/a&gt;, acessado em 02 de Abril de 2020 às 20:24.&lt;br&gt;
[7] Coding Horror. &lt;strong&gt;Creating Even More Exceptional Exceptions.&lt;/strong&gt; Disponível em &lt;a href="https://blog.codinghorror.com/creating-even-more-exceptional-exceptions/" rel="noopener noreferrer"&gt;https://blog.codinghorror.com/creating-even-more-exceptional-exceptions/&lt;/a&gt;, acessado em 02 de Abril de 2020 às 20:29.&lt;/p&gt;

</description>
      <category>cleancode</category>
      <category>exceptions</category>
      <category>codegirl</category>
      <category>codewomen</category>
    </item>
    <item>
      <title>Clean Code: Comece por aqui</title>
      <dc:creator>Marylly</dc:creator>
      <pubDate>Tue, 24 Mar 2020 22:26:59 +0000</pubDate>
      <link>https://dev.to/marylly/clean-code-introducao-bfb</link>
      <guid>https://dev.to/marylly/clean-code-introducao-bfb</guid>
      <description>&lt;p&gt;Esse artigo é um de uma série que fala sobre vários tópicos relacionados a Código limpo, seguem os tópicos relacionados abaixo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Código Limpo: 1. Introdução [Você está aqui!]&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://dev.to/marylly/clean-code-funcoes-3n78"&gt;Código Limpo: 2. Funções&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://dev.to/marylly/exceptions-e-tratamentos-de-erros-56o7"&gt;Código Limpo: 3. Exceptions e Tratamento de Erros&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Existem muitos critérios e aspectos que podem caracterizar um "bom código" que devem ser considerados na construção do mesmo, temos muitos conteúdos que nos orientam como fazer.&lt;br&gt;
Considerando um aspecto bem interessante seria o quanto isso pode ser constituído de critérios subjetivos e pessoais. Muitos desses critérios podem estar relacionados com a experiência e vivências de uma pessoa desenvolvedora, inclusive o Clean Code nasceu de boas e más experiências de seus idealizadores, e mesmo na literatura é possível que essas práticas mudem de acordo com a evolução do desenvolvimento de software, assim como podem ser aprimoradas. Sobre o que temos de comprovado sobre os benefícios do uso de Clean Codes são as seguintes características:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Manutenibilidade (Maintainability): Código fácil de modificar e atualizar;&lt;/li&gt;
&lt;li&gt;Debugging – Código menos sujeito a erros e mais fácil de isolar e corrigir erros;&lt;/li&gt;
&lt;li&gt;Escalável (Scalability): Código modular, reutilizável e fácil de acomodar mudanças futuras;&lt;/li&gt;
&lt;li&gt;Colaboração (Collaboration): Código permite que muitas pessoas entendam o código de outras pessoas e consiga fazer o trabalho necessário; &lt;/li&gt;
&lt;li&gt;Documentação (Documentation): Código auto-explicativo que reduza a necessidade excessiva de comentários; &lt;/li&gt;
&lt;li&gt;Eficiência (Efficiency): Código previne duplicidade e complexidade desnecessária, melhorando performance;&lt;/li&gt;
&lt;li&gt;Legibilidade (Readability): Código fácil de ler, reduz confusão e melhora a Manutenibilidade.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Outros aspectos relacionados:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;experiência maior com estruturas procedurais (paradigmas imperativos);&lt;/li&gt;
&lt;li&gt;experiência com orientação à objeto;&lt;/li&gt;
&lt;li&gt;experiência com níveis baixos ou altos de granularidade de métodos e/ou funções;&lt;/li&gt;
&lt;li&gt;influência de colegas de trabalho que dizem se um código está bom e limpo;&lt;/li&gt;
&lt;li&gt;boas e más experiências com projetos anteriores e cultura de time que tem esse domínio muito bem definido;&lt;/li&gt;
&lt;li&gt;conhecer o domínio e regras de negócio e o mercado atendido.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Todos os pontos acima colaboram com a leitura e compreensão do código dando sentido ao que está sendo interpretado (alguns casos nem tanto, rs).&lt;/p&gt;

&lt;p&gt;Não existe uma regra de quais conceitos devem ser aplicados ou não no dia-a-dia, e não existe uma receita que garanta os resultados. Podem variar de contexto para contexto, podem ser agregados gradativamente e adotados a medida que os benefícios são observados e trazem valor ao desenvolvimento.&lt;/p&gt;

&lt;p&gt;Sinta-se a vontade para ter suas próprias opiniões e critérios e criar os seus critérios de Código Limpo! =]&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Faltou alguma coisa?&lt;/em&gt;&lt;br&gt;
Se tu acha algo no artigo ficou confuso, coloca nos comentários ou me manda uma mensagem. Se conhecer mais dicas e práticas, coloca nos comentários para a galera já ler na sequência, vamos enriquecer nossa discussão sobre o assunto. =]&lt;/p&gt;

&lt;p&gt;Próximo artigo &amp;gt;&amp;gt; &lt;a href="https://dev.to/marylly/clean-code-funcoes-3n78"&gt;Funções&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Referências:
&lt;/h2&gt;

&lt;p&gt;Shafrir, Nir; DZone: &lt;strong&gt;Best Practices for Writing Clean Java Code&lt;/strong&gt;. Disponível em: &lt;a href="https://dzone.com/articles/best-practices-for-writing-clean-java-code" rel="noopener noreferrer"&gt;https://dzone.com/articles/best-practices-for-writing-clean-java-code&lt;/a&gt;. Acessado em 25 de Setembro de 2023 12:57&lt;/p&gt;

</description>
      <category>codenewbie</category>
      <category>codegirl</category>
      <category>cleancode</category>
      <category>bestpractices</category>
    </item>
    <item>
      <title>Clean Code: Funções</title>
      <dc:creator>Marylly</dc:creator>
      <pubDate>Tue, 24 Mar 2020 20:56:43 +0000</pubDate>
      <link>https://dev.to/marylly/clean-code-funcoes-3n78</link>
      <guid>https://dev.to/marylly/clean-code-funcoes-3n78</guid>
      <description>&lt;p&gt;Esse artigo é um de uma série que fala sobre vários tópicos relacionados a Código limpo, seguem os tópicos relacionados abaixo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://dev.to/marylly/clean-code-introducao-bfb"&gt;Código Limpo: 1. Introdução&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Código Limpo: 2. Funções [Você está aqui!]&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://dev.to/marylly/exceptions-e-tratamentos-de-erros-56o7"&gt;Código Limpo: 3. Exceptions e Tratamento de Erros&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Vamos falar um pouco como podemos melhorar a compreensão de nosso código no contexto de funções.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;IMPORTANTE: &lt;em&gt;Todas as sugestões e práticas aqui descritas se aplicam a funções, métodos e/ou variações, independente do paradigma escolhido ou da linguagem que está sendo utilizada e aplicando os conceitos, então quando me refiro somente por função ou método, estou falando da conceitos em ambos.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Bom, acho que antes de falarmos de como construir um código limpo e boas práticas, vamos falar do que precisamos evitar fazer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Como NÃO ter um código limpo com funções/métodos
&lt;/h2&gt;

&lt;p&gt;Código NÃO limpo nós normalmente identificamos logo na primeira leitura de um trecho de código e sentimos que não estamos entendendo o que está fazendo, o que está acontecendo. Ter certa complexidade no código e/ou os nomes não dizem muito sobre o que está acontecendo no código.&lt;br&gt;
Seguem abaixo alguns aspectos que podemos considerar quando estamos construindo ou refatorando um código existente:&lt;/p&gt;

&lt;p&gt;1.Evite nomes parecidos, podem confundir quando colocar a chamada em outro lugar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;func&lt;/span&gt; &lt;span class="nf"&gt;upTime&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="n"&gt;current&lt;/span&gt; &lt;span class="n"&gt;UpTime&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;func&lt;/span&gt; &lt;span class="nf"&gt;updTime&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="n"&gt;Update&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Já teria gerado um bug com certeza, porque ÓBVIO que eu chamaria a função incorreta.&lt;/p&gt;

&lt;p&gt;2.Evite acrônimos que confundam, podem ser mal interpretados e confundir a pessoa desenvolvedora:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;func&lt;/span&gt; &lt;span class="nf"&gt;genymdhms&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="n"&gt;Generation&lt;/span&gt; &lt;span class="nc"&gt;Timestamp &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Y&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;func&lt;/span&gt; &lt;span class="nf"&gt;modymdhms&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="n"&gt;Modification&lt;/span&gt; &lt;span class="nc"&gt;Timestamp &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Y&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Não iria deduzir nunca o que essas funções fazem, sofrido (&lt;em&gt;"Crying in Spanish"&lt;/em&gt;).&lt;/p&gt;

&lt;p&gt;3.Evite as letras "L" e "Ó" minúsculas que podem parecer "1" e "0"(zero) respectivamente, podem deixar o código confuso, como o exemplo abaixo que já enche os nossos olhos de lágrimas de sofrimento:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;    &lt;span class="nb"&gt;int&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="nf"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;O&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;O1&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt;
        &lt;span class="n"&gt;l&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;01&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;4.Evite nomes que tenham no nome apenas uma letra, lendo e interpretando o código abaixo na base do ódio:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;    &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;5.Evite usar números sequenciais em nomes ( &lt;code&gt;a1, a2, ..., aN&lt;/code&gt; ), não expressa nenhuma informação que ajude a compreender o contexto do código.&lt;/p&gt;

&lt;p&gt;6.Evite palavras distintas que podem expressar informações do mesmo contexto ou não. Leio o código abaixo e me sinto como o confuso John Travolta em Pulp Fiction:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;func&lt;/span&gt; &lt;span class="nf"&gt;getProductData&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="n"&gt;Gets&lt;/span&gt; &lt;span class="n"&gt;product&lt;/span&gt; &lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;description&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;func&lt;/span&gt; &lt;span class="nf"&gt;getProductInfo&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="n"&gt;Gets&lt;/span&gt; &lt;span class="n"&gt;product&lt;/span&gt; &lt;span class="n"&gt;specification&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;7.Evite adicionar contextos desnecessários como o nome ou as siglas da empresa em todas as classes, métodos e funções, prejudicando a pesquisa:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;func&lt;/span&gt; &lt;span class="nf"&gt;myCompanyNameGenTimestamp&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="bp"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;func&lt;/span&gt; &lt;span class="nf"&gt;myCompanyNameUpdTimestamp&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="bp"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;8.Evite linguagem informal e/ou gírias. Exemplos: &lt;code&gt;whack()&lt;/code&gt;, &lt;code&gt;eatMyShorts()&lt;/code&gt;, &lt;code&gt;abort()&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;9.Quanto mais longo é um programa, mais tempo e difícil para entender o que ele faz.&lt;/p&gt;

&lt;h2&gt;
  
  
  Como construir um código limpo com funções/métodos
&lt;/h2&gt;

&lt;p&gt;1.Crie nomes significativos 1: Acho que todo mundo se depara não com o desafio de criar uma função método com um cálculo matemático, mas sim, como nomear essa função que executa este cálculo matemático complexo.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Escolher bons nomes leva tempo, mas economiza mais." - Robert C. Martin&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Funções/Métodos devem fazer apenas uma coisa, devem fazê-la muito bem e apenas ela, devem comunicar o que fazem e como usa de forma compreensível 2 e que revelem seu propósito. Cuide de seus nomes e troque quando encontrar melhores. Exemplo de função com nomes bem definidos: Números ímpares num função:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;func&lt;/span&gt; &lt;span class="nf"&gt;oddNumber&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;number&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nb"&gt;bool&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;number&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;true&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;2.Use nomes a partir do domínio(projeto, negócio, objetivo) da solução ou do problema da aplicação&lt;/p&gt;

&lt;p&gt;3.Nomes curtos geralmente são melhores contanto que sejam objetivos e compreensíveis.&lt;/p&gt;

&lt;p&gt;4.Crie nomes que sejam pronunciáveis e pesquisáveis e de fácil escuta:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;func&lt;/span&gt; &lt;span class="nf"&gt;generationTimestamp&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="n"&gt;Generation&lt;/span&gt; &lt;span class="nc"&gt;Timestamp &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Y&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;func&lt;/span&gt; &lt;span class="nf"&gt;modificationTimestamp&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="n"&gt;Modification&lt;/span&gt; &lt;span class="nc"&gt;Timestamp &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Y&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Refatorei o código das funções com acrônimos e já vejo uma luz no fim do túnel de que posso melhorar, como a vida é bela!&lt;/p&gt;

&lt;p&gt;5.Blocos dentro de instruções &lt;code&gt;if/else&lt;/code&gt;, &lt;code&gt;while&lt;/code&gt; devem ter uma linha, porque a chamada dentro do bloco pode receber um nome mais descritivo.&lt;/p&gt;

&lt;p&gt;Existe o receio de renomear as coisas por outras pessoas do time serem contra, todos devem na verdade agradecer que os nomes mudaram para melhor.&lt;/p&gt;

&lt;h2&gt;
  
  
  Perguntas boas para se fazer durante o processo:
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Como fazer uma função/métodos transmitir seu propósito?&lt;/li&gt;
&lt;li&gt;Quais atributos das nossas funções/métodos que permitirão um leitor comum deduzir o tipo de programa ali contido?&lt;/li&gt;
&lt;li&gt;Funções devem ser pequenas: Qual o tamanho ideal? 3, 4 linhas?&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Faltou alguma coisa?
&lt;/h2&gt;

&lt;p&gt;Se tu acha algo no artigo ficou confuso, coloca nos comentários ou me manda uma mensagem. Se conhecer mais dicas e práticas, coloca nos comentários para a galera já ler na sequência, vamos enriquecer nossa discussão sobre o assunto. =]&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;em&gt;Referências usadas no artigo:&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;[&lt;a&gt;1&lt;/a&gt;] Martin, Robert, Código Limpo: Habilidades práticas do Agile Software, 2011, Alta Books, Rio de Janeiro.&lt;/p&gt;

&lt;p&gt;[&lt;a&gt;2&lt;/a&gt;] Fowler, Martin, Refactoring: Improving the Design of Existing Code, 2019, Pearson, EUA.&lt;/p&gt;

</description>
      <category>codegirl</category>
      <category>cleancode</category>
      <category>bestpractice</category>
      <category>cleanfunctioncode</category>
    </item>
  </channel>
</rss>
