С моей точке зрения, всё зависит от пишущего/читающего.
Если кто-то воспринимает if-else как неделимую конструкцию, то понятно, что он будет писать
C++ (Qt)
if (expr) {
ret = true_ret;
} else {
ret = false_ret;
}
return ret;
И ему всегда приходится анализировать всю конструкцию.
С другой стороны, в этом случае конструкция if-else упрощается - остаётся 1 вариант из 2х
Но вот то, что при этом код упрощается - не факт.
У того же Маркконнелла в главе про множественные return-ы напрямую советуется синтаксис
C++ (Qt)
if (expr)
return true_ret;
return false_ret;
Т.е. выйти из функции как можно быстрее.
Тут мы ещё и бонус получаем - использованные в функции ресурсы освобождаются наиболее быстро, или вообще не захватываются (RAII).
Возвратить напрямую результат вычисления предиката тоже вполне здравая мысль: зачем городить какие-то промежуточные переменные и конструкции, если всё, что нужно это значение выражения?
То же и с тернарным оператором.
Короче в итоге, ежели предполагаешь, что читатели будут с плохим знанием синтаксиса конкретного языка - то нужно употреблять конструкции к которым оные читатели привыкли.
Ну а ежели таки предполагается, что читатели будут нормально знакомы с языком, то вполне допустимо использовать его возможности - это ускоряет восприятие кода.