Как лучше писать алгоритмы: понятно или оптимально.
Пример, задача - переверните массив целых чисел. Понятный подход: создать новый массив, пробежать исходный массив с конца, заполняя новый. Оптимальный подход: пробежать массив до середины, меняя крайние элементы местами (0<->N-1;1<->N-2...), а еще там можно обмен сделать не через переменную, а вычитанием/сложением.
P.S. Когда оптимизация нужна, выбор, очевиден. Вопрос про общий случай, когда пишется программа, которая не ждет на входе террабайты данных.
Когда говорят "оптимально" я спрашиваю "по какому критерию". Потому что беготня по массиву до середины оптимальна по памяти, но не факт что компилятор осилит правильно подстроить чтение и запись под ширину кэш-линий.
А уж про то, что обмен через xor или сложение-вычитание лучше - легенда тянется со времен машин, где не было инструкции xchg и этот фокус позволял обменять местами два регистра, не задействуя третий.
"Понятность" кода - это просто еще один критерий оптимальности, а уж когда какой выбирать - зависит от корпоративного стандарта написания кода.
понятнее всегда лучше, тк это позволяет в дальнейшем развивать код, у которого ВСЕГДА короткий жизненный цикл, тоесть вы его будете не один раз переделывать и переписывать, и в рамках этого понятность предпочтительней чем сиюминутная "эффективность" которая в длительной перспективы никогда не эффективна.
Нехорошо это. Оба способа обращения массива тривиальны. Это примерно как сказать: вот буква О, пишется тривиально, а вот буква Ж - это же высший пилотаж! Какую букву выбрать для написания "Войны и мира" и других оптимальных шедевров?
Не торопитесь с шедеврами, разберитесь сперва с буквами.
Одиночка Айс, боже ж мой, ты же не тормозишь при письме, выбирая какую букву поставить! Или всё-таки тормозишь? Пожалуй, так и надо было написать в ответе.
подобные низкоуровневые задачи обычно решаются методами/функциями языка. если таковые отсутствуют (что бывает крайне редко), то лучше сделать их оптимальными, за понятность путь отвечает комментарий (docBlock)