Existem casos em que códigos mais detalhados (como em declarações mais lógicas) são mais limpos que códigos mais concisos?
refactoring
nome de usuário errado
fonte
fonte
Respostas:
Para responder a isso, vamos dar um exemplo do mundo real que aconteceu comigo. Em C # uma biblioteca que eu mantenho, eu tinha o seguinte código:
Discutindo isso com colegas, o veredicto unânime foi que as expressões ternárias aninhadas, juntamente com o uso "inteligente" de
is var
resultaram em código conciso, mas difícil de ler.Então eu refatorei para:
A versão original continha apenas uma expressão composta com um implícito
return
. A nova versão agora contém uma declaração explícita de variável, umaif
declaração e duas explícitasreturns
. Ele contém mais instruções e mais linhas de código. No entanto, todos que eu consultei consideraram mais fácil ler e raciocinar, que são aspectos-chave do "código limpo".Portanto, a resposta para sua pergunta é um enfático "sim", mais detalhado pode ser mais limpo que o código conciso e, portanto, é uma refatoração válida.
fonte
!
a condição. Eu também sugeriria colocar o segundo retorno em umelse
. Mas mesmo assim, é uma grande melhoria.if (!foo.HasValue)
é um idioma no seu código, ainda mais fortemente. No entanto,if
não é realmente uma saída cedo - é um "faça isso ou aquilo dependendo".1. Falta de correlação entre LOC e a qualidade do código.
O objetivo da refatoração é melhorar a qualidade de um pedaço de código.
LOC é uma métrica muito básica que, às vezes, se correlaciona com a qualidade de um pedaço de código: por exemplo, é provável que um método com alguns milhares de LOC tenha problemas de qualidade. Deve-se notar, no entanto, que LOC não é a única métrica e, em muitos casos, carece de correlação com a qualidade. Por exemplo, um método 4 LOC não é necessariamente mais legível ou mais sustentável que um método 6 LOC.
2. Algumas técnicas de refatoração consistem na adição de LOCs.
Se você fizer uma lista de técnicas de refatoração , poderá identificar facilmente as que consistem na adição intencional de LOCs. Exemplos:
Ambas são técnicas de refatoração muito úteis, e seu efeito no LOC é completamente irrelevante quando se pensa em usá-las ou não.
Evite usar LOC.
LOC é uma métrica perigosa. É muito fácil de medir e muito difícil de interpretar corretamente.
Até você se familiarizar com as técnicas de medição da qualidade do código, considere evitar medir o LOC em primeiro lugar. Na maioria das vezes, você não obtém nada de relevante e, em alguns casos, isso o leva a diminuir a qualidade do seu código.
fonte
Se você deseja ver o resultado final de apenas minimizar a contagem de bytes ou LoC do seu código-fonte, consulte os envios para o site Stack Exchange Code Golf .
Se seu código-fonte for reduzido dessa maneira, em breve você terá uma bagunça insustentável. Mesmo que você seja a pessoa que escreveu esse código e o entenda completamente na época, qual será sua eficiência quando voltar a usá-lo daqui a seis meses? Também não há evidências de que esse código mínimo seja executado mais rapidamente.
O código deve ser escrito de tal maneira que qualquer membro da sua equipe possa analisá-lo e entender o que está fazendo imediatamente.
fonte
Sim, a refatoração pode definitivamente resultar em mais linhas de código.
O caso mais comum da IMO é quando você pega um código que não é genérico e o torna mais genérico / flexível . Gerar código facilmente faz com que as linhas de código aumentem significativamente (às vezes por um fator de dois ou mais).
Se você espera que o código recém-genérico seja usado por outras pessoas (em vez de apenas como um componente interno de software) como uma biblioteca, normalmente você acaba adicionando códigos mais unidos e marcação de documentação no código que aumentará as linhas de código novamente.
Por exemplo, aqui está um cenário muito comum que acontece para todo desenvolvedor de software:
Alguns exemplos concretos que me vêm à cabeça:
fonte