Olá pessoal na última terça-feira realizamos a primeira mesa redonda na Lambda3 Rio de Janeiro \o/. O assunto foi o capítulo 2 do livro Clean Code. Muitos, senão todos, do nosso time já leram esse livro a um bom tempo, então tínhamos um objetivo de relembrar e discutir o assunto que estudamos, para não ficar chato Colocamos um time-box de uma hora para não nos estendermos demais.
O que segue abaixo foram anotações que fizemos durante a sessão, com alguns tópicos. Nosso objetivo aqui não é explicá-los e sim registrá-los, se você quiser entender melhor cada um dos tópicos é só chegar aqui na Lambda3 que a gente fala sobre eles 🙂
O tempo foi suficiente para discutirmos 5 tópicos do capítulo 2 – Meaningful names
- Intention revealing names
- Avoid disinformation
- Make meaningful distinctions
- Use Pronounceable names
- Use Searchable Names
Intention revealing names
- Intention revealing names é dependente do domínio e do contexto em que a interface em questão esta sendo usada. O programador tem que conhecer o domínio, caso contrário a interface dificilmente será reveladora.
- Bons nomes dependem bastante das experiências de cada um, sendo assim um nome que é razoável para um desenvolvedor pode parecer o nome ideal para outro, e vice-versa.
- O preciosismo com nomes deve ser evitado.
- Alguns casos como no C# foi escolhido mudar uma interface para o público alvo entender melhor. Como exemplos temos o Linq com os métodos Reduce/Fold
- Há diferenças em IRN(Intention revealing names) em linguagens estaticamente tipadas e em linguagens dinâmicas. Chegamos ao questionamento se a recomendação em linguagens dinâmicas é usar o tipo como parte do nome.
Desinformation
- Programar em idiomas estrangeiros requer cuidado extra para nomeá-los. Buscar o nome significativo para ter certeza se o nome corresponde ao que você esta querendo dizer.
- Bad smells: descrever imperativamente no nome método exatamente como faz. Você deve descrever o que ele faz.
- Membro novo no time tende a criar nomes descontextualizados.
Make meaningful distinctions
- Palavras genéricas não servem para distinguir conceitos. DadosAdicionais
- Plural são distinções significativas? eg: ObterUsuario() x ObterUsuarios()
Use Pronounceable names
- A linguagem de domínio utilizada pelo Product Owner as vezes não representa a linguagem ubíqua. No caso de um nome ruim, você pode sugerir um nome melhor.
- Buscar conhecimento de outras pessoas é interessante mas deve tomar cuidado pois uma mesma coisa pode ter nomes diferentes em contextos diferentes.
É isso pessoal, esse é apenas um relato da nossa discussão. Esperamos em breve conseguir tornar a discussão pública, aguarde novidades 🙂
Participaram desta discussão:
- Bernardo Rosmaninho
- Higor Cesar Ramos
- Rodrigo Vidal
Abraço.
Rodrigo Vidal