LINUX.ORG.RU

История изменений

Исправление firkax, (текущая версия) :

Вот только вместо int r; на практике будет такое:

Ну и что? Дописать в этот список int r; не проблема.

Очевидно делающая присваивание внутри условия? Это для кого очевидно, для инопланетян?

Очевидно для любого опытного Си-программиста. Эта конструкция очень удобна со всех сторон, неудобства возникают только у тех кому Си чужеродный язык и они пытаются делать из него Паскаль или ещё что-то (если что, я не против Паскаля, но если пишем на Си - давайте пользоваться всей его гибкостью, а не кроссязыковым подмножеством).

Конструкция, кстати, по смыслу такая: «если функция что-то вернула то пробросить это значение дальше», сама переменная r тут нужна только ради сишного синтаксиса и внимание привлекать вообще не должна.

А кто тебе сказал, что компактность увеличивает надежность кода?

Тебе надо прочитать в 3-5 раз меньше строк (и при этом эти строки ещё и почти не длиннее выходят), ты не бегаешь глазами по коду и меньше напрягается, видишь целиком весь алгоритм а не только его кусок, остаётся больше внимания на собственно анализ хода его выполнения. Это определённо способствует большему его качеству на выходе.

Суть примерно такая же как когда данные стараются локализовать чтобы процовый кеш не замусоривать и не создавать тормоза. Только тут не только тормоза, а ещё и повышенный шанс ошибиться появляется (например, 0.001% вместо 0.0001% на строку). Зрительный мусор (лишние не несущие смысла строки, лишние буквы в именах переменных когда и без них контекст достаточный чтобы всё понять итд) крайне вреден.

А теперь добавь туда assert, чтобы проверить результат вызова try_fast_foo().

Вот когда там понадобится assert - и подумаю над этим. Зависит ктстаи от длины условия. Если там assert(r>10); то засуну его в ту же строчку добавив {}.

А следом добавь гарантию, что r не может быть использован далее в теле функции.

Чего? Он как раз и сделан таким простым чтобы его можно было использовать дальше в аналогичных местах.

Исходная версия firkax, :

Вот только вместо int r; на практике будет такое:

Ну и что? Дописать в этот список int r; не проблема.

Очевидно делающая присваивание внутри условия? Это для кого очевидно, для инопланетян?

Очевидно для любого опытного Си-программиста. Эта конструкция очень удобна со всех сторон, неудобства возникают только у тех кому Си чужеродный язык и они пытаются делать из него Паскаль или ещё что-то (если что, я не против Паскаля, но если пишем на Си - давайте пользоваться всей его гибкостью, а не кроссязыковым подмножеством).

А кто тебе сказал, что компактность увеличивает надежность кода?

Тебе надо прочитать в 3-5 раз меньше строк (и при этом эти строки ещё и почти не длиннее выходят), ты не бегаешь глазами по коду и меньше напрягается, видишь целиком весь алгоритм а не только его кусок, остаётся больше внимания на собственно анализ хода его выполнения. Это определённо способствует большему его качеству на выходе.

Суть примерно такая же как когда данные стараются локализовать чтобы процовый кеш не замусоривать и не создавать тормоза. Только тут не только тормоза, а ещё и повышенный шанс ошибиться появляется (например, 0.001% вместо 0.0001% на строку). Зрительный мусор (лишние не несущие смысла строки, лишние буквы в именах переменных когда и без них контекст достаточный чтобы всё понять итд) крайне вреден.

А теперь добавь туда assert, чтобы проверить результат вызова try_fast_foo().

Вот когда там понадобится assert - и подумаю над этим. Зависит ктстаи от длины условия. Если там assert(r>10); то засуну его в ту же строчку добавив {}.

А следом добавь гарантию, что r не может быть использован далее в теле функции.

Чего? Он как раз и сделан таким простым чтобы его можно было использовать дальше в аналогичных местах.