Здравствуйте, Кодт, Вы писали:
К>Проблемы в том, что в С/С++ с давних (наверное, с фортрановских) времён принято точки расставлять по строкам.
Еще надо добавить "Майкрософтом".
Почему-то для С++ многое довольно не удобно. Но это ведь не значит, что сам подход плох?
Лично мне проще читать код более компактный. Ну, зачем мне искать логику по странице если ее можно собрать водном месте?
Почему-то те кто программируют на императивных языках (особенно на С-подобных) частенько плюют на понятность кода в угоду, скажем, отладке (или еще чему-то). Но ведь более понятный и краткий код сам по себе снижает необходимость в отладке.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Почему-то для С++ многое довольно не удобно. Но это ведь не значит, что сам подход плох?
— Понимаешь, сынок, есть такое слово "Родина"
VD>Лично мне проще читать код более компактный. Ну, зачем мне искать логику по странице если ее можно собрать водном месте?
VD>Почему-то те кто программируют на императивных языках (особенно на С-подобных) частенько плюют на понятность кода в угоду, скажем, отладке (или еще чему-то). Но ведь более понятный и краткий код сам по себе снижает необходимость в отладке.
Чисто для флейма могу предположить, что мега-конъюнкция или мега-дизъюнкция не повышает читаемость.
Потому что в ней одновременно закодированы две вещи
— булево выражение (в том числе, обладает коммутативностью)
— последовательность выражений (некоммутативность)
И с разбегу сказать, важна ли здесь последовательность (обеспечивающая предусловие, или хотя бы оптимизирующая вычисление сложных выражений — когда менее вероятные предикаты ставятся в начале) — это вопрос.
Здравствуйте, Кодт, Вы писали:
К>Чисто для флейма могу предположить, что мега-конъюнкция или мега-дизъюнкция не повышает читаемость. К>Потому что в ней одновременно закодированы две вещи К>- булево выражение (в том числе, обладает коммутативностью) К>- последовательность выражений (некоммутативность) К>И с разбегу сказать, важна ли здесь последовательность (обеспечивающая предусловие, или хотя бы оптимизирующая вычисление сложных выражений — когда менее вероятные предикаты ставятся в начале) — это вопрос.
Странная логика. А последовательность ифов (гора, точнее сказать) лучше передает суть?
Тут скорее в другую сторону надо посмотреть. Ведь все эти проверки чего-то означают. Не так ли?
А раз так, то логично было бы разнести их на отдельные функции с разумными именами. Тогда код бы стал понятнее, и что самое забавное, еще короче!
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
У нас принято не более 4х уровней вложенности.
Как правило, такой код не однообразен и может быть разделён на несколько функций.
Либо второй вариант, но скорее с флагами, т.к. у функции с несколькими точками выхода есть свои недостатки.
AK>Только мне не нравится этот код или это тайный заговор — делать код "шире"? Я постоянно встречаю такой код. Пишут так и новички и люди, чей стаж больше моего. Причем уровень вложенности часто доходит до 6-8. Здесь не обсуждается вариант с else.
AK>
Здравствуйте, AlexKr, Вы писали:
AK>Добрый день.
AK>Только мне не нравится этот код или это тайный заговор — делать код "шире"? Я постоянно встречаю такой код. Пишут так и новички и люди, чей стаж больше моего. Причем уровень вложенности часто доходит до 6-8. Здесь не обсуждается вариант с else.
[Skipped]
вместо
if ( condition1 )
return false;
предпочитаю писать
if ( condition1 )
{
return false;
}
т.к. второй вариант позволяет избежать возможной ошибки, когда другой девелопер решит исправить этот код, добавив например do(); таким образом:
if ( condition1 )
do();
return false;
а так получится со вторым вариантом
if ( condition1 )
{
do();
return false;
}
да и смотрится лучше, другое дело что вложенностей таких какие описаны у вас — не бывает
+есть такое понятие как корпоративный стандарт оформления кода
Здравствуйте, licedey, Вы писали:
L>Это дело привычки. Сам стараюсь писать код так, чтобы не приходилось пользоваться горизонтальным скрол баром. L>Хотя с другой стороны, сейчас работаю над проектом, в котором используется MSHTML. Так приходится себя заставлять L>писать вложенные if'ы, до 20 штук доходит. А все потому, что при получении интерфейса на любой элемент, нужно вызывать Release после использования. Напрягает жутко. Иногда просто забиваю на все релизы, отчего memory leaks бывают до 1GB при определенных условиях :). Вот она цена привычки. Странно, что клиент закрывает на это глаза.
Если тебе недоступны ни smart pointers, ни другой аналогичный подход — тогда вспомни про goto:
Были у меня разработки, где можно было писать только так... никакого C++ и прочих "высоких" средств не допускалось. Но проблем это не составляло — после того, как метод построения кода специфицирован вплоть до имени метки, объяснён и понят, споров вокруг идеологии и реализации уже не было.
L>По привычке часто пишу так: L>