Aqui está um exemplo muito simplificado . Esta não é necessariamente uma pergunta específica do idioma, e peço que você ignore as muitas outras maneiras pelas quais a função pode ser escrita e as alterações que podem ser feitas nela. . A cor é de um tipo único
string CanLeaveWithoutUmbrella()
{
if(sky.Color.Equals(Color.Blue))
{
return "Yes you can";
}
else
{
return "No you can't";
}
}
Muitas pessoas que eu conheci, ReSharper, e esse cara (cujo comentário me lembrou que eu estava procurando isso por um tempo) recomendariam refatorar o código para remover o else
bloco deixando isso:
(Não me lembro do que a maioria disse, eu poderia não ter perguntado isso de outra forma)
string CanLeaveWithoutUmbrella()
{
if(sky.Color.Equals(Color.Blue))
{
return "Yes you can";
}
return "No you can't";
}
Pergunta: Existe um aumento na complexidade introduzido por não incluir o else
bloco?
Estou com a impressão de que a else
intenção mais diretamente indica, afirmando o fato de que o código nos dois blocos está diretamente relacionado.
Além disso, acho que posso evitar erros sutis na lógica, especialmente após modificações no código posteriormente.
Pegue esta variação do meu exemplo simplificado (ignorando o fato do or
operador, pois este é um exemplo propositadamente simplificado):
bool CanLeaveWithoutUmbrella()
{
if(sky.Color != Color.Blue)
{
return false;
}
return true;
}
Agora, alguém pode adicionar um novo if
bloco com base em uma condição após o primeiro exemplo, sem imediatamente reconhecer corretamente que a primeira condição está colocando uma restrição em sua própria condição.
Se um else
bloco estivesse presente, quem adicionasse a nova condição seria forçado a mover o conteúdo do else
bloco (e se, de alguma forma, passar por cima dele, a heurística mostrará que o código é inacessível, o que não ocorre no caso de um if
restringir o outro) .
É claro que existem outras maneiras pelas quais o exemplo específico deve ser definido de qualquer maneira, todos os que impedem essa situação, mas é apenas um exemplo.
O comprimento do exemplo que eu dei pode distorcer o aspecto visual disso; portanto, suponha que o espaço ocupado entre parênteses seja relativamente insignificante para o restante do método.
Esqueci de mencionar um caso em que concordo com a omissão de um bloco else e é quando o uso é usado if
para aplicar uma restrição que deve ser logicamente satisfeita para todo o código a seguir, como uma verificação nula (ou qualquer outra proteção) .
else
cláusula (a meu gosto, será ainda mais legível ao deixar de fora os colchetes desnecessários. Mas acho que o exemplo não é bem escolhido, porque no caso acima eu escreveria return sky.Color == Color.Blue
(sem if / else) Um exemplo com um tipo de retorno diferente do que bool provavelmente tornaria isso mais claro.