Em algum código que estou escrevendo agora, tenho algo parecido com isto:
if (uncommon_condition) {
do_something_simple();
} else {
do();
something();
long();
and();
complicated();
}
Parte de mim pensa: "Está tudo bem do jeito que está escrito. Casos simples devem ser os primeiros e casos mais complicados devem ser os próximos." Mas outra parte diz: "Não! O else
código deve ficar abaixo do if
, porque if
é para lidar com casos incomuns e else
para todos os outros casos". Qual é correto ou preferível?
coding-style
EMBLEMA
fonte
fonte
Respostas:
Ordem pela probabilidade de serem executadas. As condições mais comuns, mais prováveis etc. devem ser as primeiras.
A "dificuldade de lidar com eles" deve ser tratada pela estrutura de código, abstração etc. no exemplo, o bloco else pode ser refatorado para chamada de método único. Você deseja que suas
if
cláusulas estejam no mesmo nível abstrato.fonte
not
. Pessoalmente, eu me concentraria em evitarnot
condições. Foi provado que eles induzem mais carga cognitiva a entender do que condições "positivas" e são prejudiciais à legibilidade / compreensão do código. Costumo usá-los apenas em declarações de guarda.doesNotAllowxxFiles = false
. Ruim o suficiente, mas, em seguida, fazer issoif(! doesNotAllowxxFiles)
Tente melhorar a legibilidade. Uma maneira é colocar o bloco de código mais longo na parte else.
é mais legível do que
fonte
Nenhuma regra fixa, como tal, ouvi falar sobre o uso, mas sigo assim
Mas se ambos tiverem a mesma função com propriedades diferentes, é melhor optar por algo incomum primeiro do que o habitual, para que você possa salvar uma instrução.
Para o código de montagem acima, o código será algo como isto:
Se a condição interna se for verdadeira, o fluxo será 1-> 2 (4 intruções)
Se a condição interna for falsa, o fluxo será 1-> 3 (3 intruções)
Portanto, é melhor colocar eventos incomuns ou que ocorrem raramente, caso sejam parte e condição normal, para que possamos salvar uma instrução toda vez ;-)
fonte
Descobri que o padrão oposto exato leva a uma leitura mais fácil do código e reduz ou elimina instruções if aninhadas. Eu me refiro a isso como um padrão de "manopla". (Na narração de histórias, uma luva seria uma série de desafios que precisam ser enfrentados com êxito antes que a tarefa final seja concluída.) Ao lidar com seus casos extremos primeiro , você permite que o corpo principal do seu código seja limpo e conciso:
fonte
Para mim, é mais sobre as condições do que sobre a complexidade do código que eles executam. Você precisa solicitar as condições para capturar primeiro condições incomuns, depois as mais comuns depois. Além disso, se o código else for realmente longo e complicado, eu provavelmente faria um sub para isso, para manter a parte condicional óbvia para o leitor.
fonte
Eu não tenho uma regra fixa, mas geralmente eu a sigo - primeiro, considere onde há um padrão de design ausente que levará isso em consideração. Caso contrário, escrevo para que a condição no if seja a mais claramente compreendida. Ou seja, evitando duplos negativos e similares.
fonte
Quanto a esses cenários, não existe uma regra geral. Mas, possivelmente, podemos seguir para escrever o código positivo ou mais provável no bloco if e deixar de fora no bloco else ou nos casos padrão.
fonte