Muito bom!
Só pra complementar, a função também poderia ser assim:
function verificarInterseccao(a1, a2, b1, b2) {
return !((b2 < a1) || (b1 > a2));
}
Ou seja, se uma das condições for verdade, retornará falso. Mas quando eu tenho algo como !(cond1 || cond2)
, eu posso trocar para (!cond1) && (!cond2)
- as condições se invertem e troco o ||
por &&
. Portanto, ficaria assim:
function verificarInterseccao(a1, a2, b1, b2) {
return b2 >= a1 && b1 <= a2;
}
Como o operador &&
é short circuit, se a primeira condição não for verdadeira, ele nem testa a segunda, mantendo o funcionamento de já parar se o primeiro caso for falso.
Por fim, existe uma explicação parecida aqui, vale a leitura.