As cláusulas de guarda ou pré-condições (como você provavelmente pode ver) verificam se uma determinada condição é atendida e, em seguida, interrompe o fluxo do programa. Eles são ótimos para lugares onde você realmente só está interessado em um resultado de uma if
declaração. Então, ao invés de dizer:
if (something) {
// a lot of indented code
}
Você reverte a condição e quebra se essa condição revertida for atendida
if (!something) return false; // or another value to show your other code the function did not execute
// all the code from before, save a lot of tabs
return
não está nem de longe tão sujo quanto goto
. Ele permite que você passe um valor para mostrar ao restante do seu código que a função não pôde ser executada.
Você verá os melhores exemplos de onde isso pode ser aplicado em condições aninhadas:
if (something) {
do-something();
if (something-else) {
do-another-thing();
} else {
do-something-else();
}
}
vs:
if (!something) return;
do-something();
if (!something-else) return do-something-else();
do-another-thing();
Você encontrará poucas pessoas argumentando que o primeiro é mais limpo, mas é claro que é completamente subjetivo. Alguns programadores gostam de saber em que condições alguma coisa está operando por indentação, enquanto eu prefiro manter o fluxo do método linear.
Por um momento, não vou sugerir que precons mudem sua vida ou te deixem transar, mas você pode achar seu código um pouco mais fácil de ler.