Os atalhos de idioma geralmente podem ser usados para tornar o código mais conciso.
Por exemplo, operadores coalescentes ternários e nulos podem reduzir a quantidade de código, mas sem dúvida em detrimento da legibilidade:
Em c #:
Person newGuy = new Person();
if (boss == null) {
newGuy.Boss = GetDefaultBoss();
} else {
newGuy.Boss = boss;
}
é funcionalmente equivalente a:
Person newGuy = new Person();
newGuy.Boss = boss ?? GetDefaultBoss();
mas obviamente muito mais detalhado.
Onde você desenha a linha quando se trata de concisão versus legibilidade?
code-quality
readability
Damovisa
fonte
fonte
Respostas:
Ambos.
Seu primeiro exemplo é certamente mais detalhado e sem dúvida mais explícito ... mas também exige que eu digitalize cinco linhas em vez de uma. Pior ainda, enfatiza seu objetivo - atribuir um valor a
newGuy.Boss
.Seu segundo exemplo pode me custar um segundo se eu não estiver familiarizado com o operador coalescente nulo, mas não há dúvida quanto à sua finalidade e, se estiver percorrendo uma rotina maior procurando a fonte de um valor, será muito mais fácil escolher esse aqui.
Agora, contraste isso:
...com:
O último exemplo é novamente muito mais curto, mas agora obscurece seu objetivo, fazendo com que as tarefas acionadas pelo mesmo teste pareçam distintas. Aqui, sinto que a verbosidade do primeiro é justificada.
fonte
boss
três vezes, em comparação com apenas uma vez no exemplo detalhado. Essa é apenas outra razão pela qual o código mais curto, apenas por ser mais curto, é uma má idéia. Eu acho que a concisão deve ser a segunda do objetivo principal, seja legibilidade / manutenção (para código complexo) ou desempenho (para seções críticas de loops internos, etc.). Em outras palavras, não otimizar puramente para concisão - a menos que você planeja enviar seu código através de uma conexão 1bps;)Embora ambos sejam bons objetivos, sempre ficarei do lado do Legibilidade quando forçado a escolher um.
Eu argumentaria que seu exemplo melhora a legibilidade e a brevidade. Considere, no entanto:
em oposição a
O último é conciso, mas é difícil de ler. O primeiro é detalhado, mas o fluxo da lógica é claro.
Por fim, a brevidade não serve muito a um propósito, além da capacidade de se encaixar mais na tela. A legibilidade facilita a depuração e, portanto, geralmente deve ser preferida.
fonte
?? whatever.something
.Eu diria que, regra geral, nunca sacrifica a legibilidade por causa da concisão, mas nunca julga a legibilidade com base na falta de conhecimento de outros programadores sobre esse assunto.
Concisão e legibilidade não são opostos. Como esta resposta, às vezes menor é mais legível.
fonte
??
significa, se eu usá-lo e depois aprenderem, nós dois nos beneficiamos. E não é difícil digitar "?? operator" no msdn.comEu diria que prefiro legibilidade, embora isso às vezes signifique usar código conciso. (Ou seja, ternário para condicionais relativamente simples dentro de um bloco condicional maior.)
Basicamente, se for desnecessariamente difícil de entender, não faça isso.
fonte
A legibilidade vem em primeiro lugar quando entra em conflito com a concisão, porque o código é modificado com mais frequência do que é inicialmente escrito. Por outro lado:
O ruído sintático e o código padrão geralmente obscurecem as intenções e, portanto, prejudicam a legibilidade. Às vezes, o código mais conciso também é mais legível. Por exemplo, pense em funções lambda ou delegadas / funções de primeira classe versus classes de método único que implementam uma interface de método único.
A legibilidade deve ser avaliada com base na facilidade de leitura do código para um programador razoavelmente experiente que conhece a linguagem e seus recursos exclusivos / avançados bastante bem, não para um macaco de código pouco competente que conhece apenas o menor denominador comum.
fonte
Um aspecto que acho que não foi mencionado ainda: quais são seus objetivos?
Se tudo o que importa é a segurança no emprego, procure concisão e compacidade em relação a todo o resto. Pule também o comentário do seu código.
Se você deseja entregar seu código facilmente a outra pessoa enquanto trabalha em um novo projeto interessante, procure legibilidade, clareza e muitos comentários sólidos.
Nota: o acima não é sobre você pessoalmente, @Damovisa; é para quem escolhe entre as duas posições.
fonte
Há uma coisa que a versão detalhada tem como vantagem.
Ele tem mais linhas e a maioria dos depuradores é orientada a linhas ! É muito difícil definir um ponto de interrupção no meio de uma expressão, mas geralmente é trivialmente simples configurá-lo dentro de uma instrução de bloco.
Em outras palavras, qual você gostaria de ver em seu editor se quiser que seu depurador entre em ação
boss == null
?(Disse que eu gosto do operador ?? -)
fonte
A legibilidade deve vir primeiro, a longo prazo, a maioria das pessoas gasta mais tempo modificando ou estendendo o código existente - a legibilidade é uma grande parte da capacidade de manutenção.
Dito isto, concisão é algo que pode contribuir para a legibilidade. Por exemplo, em sua pergunta, o segundo trecho é mais legível e conciso.
fonte