O que seria considerado mais sustentável?
if (a == b) c = true; else c = false;
ou
c = (a == b);
Tentei procurar no código completo, mas não consigo encontrar uma resposta.
Eu acho que o primeiro é mais legível (você pode literalmente ler em voz alta), o que também acho que o torna mais sustentável. O segundo certamente faz mais sentido e reduz o código, mas não tenho certeza de que seja tão sustentável para desenvolvedores de C # (eu esperaria ver esse idioma mais em, por exemplo, Python).
.net
code-quality
readability
maintainability
clean-code
Bret Walker
fonte
fonte
else c = false
para o primeiro ou fazer a atribuição um||=
no segundo.c = a==b ? true : false;
Respostas:
A segunda opção é melhor.
Há uma razão definida para desconfiar de atalhos de programação inteligentes que prejudicam a capacidade de manutenção, ocultando a intenção do código. Então, eu não culpo você por fazer a pergunta.
No entanto, não considero
c = (a == b);
um exemplo de truque inteligente. É uma representação direta de um conceito simples. O mais direto possível.Uma adequada, "sustentável" a formatação de seu primeiro exemplo (sem as chaves desaparecidas e construção de uma linha, que eu fazem considerar um atalho inteligente) renderia este código:
Na minha experiência, escrever lógica booleana simples de maneira tão detalhada e propensa a erros é um sinal de código "duvidoso". Isso me faria pensar como a lógica mais complexa está sendo manipulada nessa base de código.
fonte
Primeiro, perceba que seus dois formulários não são equivalentes.
c
será definido como true sea
for igual ab
, e se não, seu valor permanecerá o que já é.c
será definido como true sea
for igual ab
, e se não for, será definido como false.Se você quiser o equivalente ao segundo formulário, no estilo do primeiro formulário, precisará escrevê-lo assim:
Agora está claro qual dos dois é mais legível, mais atualizável e com menor probabilidade de apresentar erros se algo for alterado. Fique com o segundo formulário.
fonte
Eu discordo que seu primeiro formulário é mais legível - certamente não é C # idiomático ter duas instruções em uma única linha e não é recomendável ter uma
if
declaração sem usar chaves.Em segundo lugar, não vejo como a segunda forma é menos sustentável - não há nada a manter. É uma simples declaração da relação entre
a
eb
e não poderia ser expressa mais simplesmente.Outro motivo para preferir o segundo formulário é que você pode declarar
c
e atribuí-lo em uma única declaração, ou seja,A modificação de variáveis pode facilmente levar a erros, então eu evitaria isso. O uso de uma
if
instrução requer que a variável seja declarada antes da condicional e depois modificada.fonte
Another reason to prefer the second form is that you can declare c and assign it in a single statement
""mais sustentável" pode ser muito subjetivo.
Normalmente, prefiro legibilidade e intenção ao invés de redução de código. Eu acho que você salva 8 caracteres digitados usando o formulário reduzido.
Tomar o idioma e a cultura ao redor do idioma é uma característica da 'legibilidade' na minha opinião.
Há momentos em que o desempenho pode ser a causa da redução do código para otimizar o código de bytes resultante, mas isso deve ser feito com cuidado após alguns perfis.
fonte
O segundo. Tem menos repetição (seco) e é mais fácil de entender o que está acontecendo, que
c
detém a valor de haver ou nãoa
e serb
são iguais.IMHO, melhor ainda seria
Assim como eu escreveria
1 + 2 + 3
ao invés de((1 + 2) + 3)
5 + 3 * 7
ao invés de(5 + (3 * 7))
O código óbvio e trivialmente desnecessário não é uma virtude. Está confuso.
fonte
Para baixo eleitores, por favor, elabore o que está errado com a minha resposta revisada.
Sim,
c = (a == b);
pode ser difícil de ler (pior ainda, o StyleCop reclama dos parênteses desnecessários), mas ainda gosto da simplicidade dea == b
. Portanto, aqui é o que eu gosto de usar quando ambosa
eb
são os mesmos:E então você pode fazer: em
this.c = this.NoPeriod
vez de:fonte
return this.MyWaveLength = this.HerWaveLength;
oureturn this.MyWaveLength == this.HerWaveLength;
não?c = (a == b);
não é propenso a erros. A primeira forma na pergunta original é muito mais suscetível a erros , como demonstrado pelo próprio OP tendo que editar sua pergunta para corrigir bugs!