Это полностью зависит от языка. Многие языки будут закорачивать оценки, так что, если bar
истинно, два других не будут оцениваться, и любой полуприличный компилятор оптимизирует их до того же уровня в этом случае. Из четырех упомянутых вами языков (C ++, Ruby, PHP и Javascript) все они выполняют оценку короткого замыкания.
И, несмотря на то, что толпа «избегать многократного возвращения» скажет вам, это не правило, которому вы должны следовать как овца. Он предназначен для того, чтобы избежать ситуаций, когда трудно увидеть, где происходят возвраты (или разрывы цикла). Ваше первое решение не страдает от этой проблемы больше, чем ваше второе.
Слепое следование догме без понимания причин, стоящих за ней, должно быть наказуемо мучительными пытками.