Здравствуйте, kaa.python, Вы писали:
KP>так же спорный вопрос. функция больше 15-20 строчек уже не совсем желательна.
Короткие функции — не самоцель. Целью является грамотная функциональная декомпозиция без значительного ущерба для производительности. Но искусственно разбивать функции, абы-как, только чтобы вписаться в 15-20 строчек — это бред.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Здравствуйте, Erop, Вы писали:
E>Да уж, мегарежим E>А с else ты что делаешь?
Нету там никакого else.
E>Я тебе советую так делать, кстати: E>[c]static bool debugFlag = false; E>if( debugFlag || ... ) E>{ E> int i = action(); E> . . .
Это полное ламерство. Спасибо, не катит.
Иногда попадаются такие "стили", сделаные "мега-профессионалами", полностью замусоренные всякими отладочными флагами, логами и совершенно бессмысленными коментариям на каждой строке (i++; // Increment i). Чтобы понять, что там происходит, приходится тратить время и тщательно чистить все это от грязи и ржавчины — чтобы просто увидеть, что же там происходит.
E>Ты это, лучше такие аргументы не приводи, а то оторванную скобку нафиг запретят все E>Я бы, например, намного лучше понял такой код:
Спасибо, не катит.
Мы с тобой разговариваем на разных языках и занимаемся разными задачами. Это во-первых. Во-вторых, я ничего не понял из твоих примеров — твоя функциональная декомпозиция ужасна. Какой кайф в том, чтобы все запутать и замусорить, вместо того, чтобы поставить один-единственный и очевидный ifdef? Какой кайф в том, чтобы дублировать логику? Какой кайф в лишних ненужных операциях? Это риторические вопросы, можно не отвечать.
Опытный инженер отличается от юниора в том числе и тем, что он более-менее оптимально разделяет функциональность. Не укрупняет, но и не дробит в мелкую крошку. Он делает опмимально. В то время, как юниора все время заносит либо в ту, либо в другую сторону. В моем примере решение близко к оптимальному.
Я это пишу не для тебя. Я пишу это, чтобы новички не приняли твои слова за чистую монету. В твоем случае, есть сильное подозрение, что пациент принципиально не обучаем (в народе говорят "как об стенку горох").
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Здравствуйте, korzh.pavel, Вы писали:
KP>а я только здесь спорю, на rsdn.
KP>просто очень сложно заставить себя делать не логичные вещи. KP>Ну вот не вижу я логики в этом: KP>
KP>if (flag) {
KP> //...
KP>}
KP>
Я не вижу тут ничего нелогичного. Просто стиль такой. На вопрос "что делать, если условие занимает несколько строк — как визуально отделить тело от условия" Икс процентов респондентов ответили "у вас слишком длинные условия — разбейте их на более простые", Игрек процентов — "поставьте 2 отступа для второй и последующих строчек условия", Зет процентов — "оставьте все условие на одной строке, и хрен с ним, что строка получается 200 символов".
Весь Linux Kernel написан в этом стиле — они еще не знают, что они нелогичные. Предлагаю написать на LKML предложение заменить стиль для всех скобок. Меня только в CC не ставьте, пожалуйста.
AA>>Давайте еще размер табуляции обсудим, и нужно или нет табуляцию на пробелы заменять.
KP>можно обсудить. KP>Кстати тоже холиварная тема, здесь, помоему, уже обсуждалось. Тоже флейм не хилый был
Я, пожалуй, воздержусь от этого обсуждения.
It's kind of fun to do the impossible (Walt Disney)
Здравствуйте, MasterZiv, Вы писали:
MZ>Насколько оправдан такой подход сейчас ?
Кодинг-стайл — это кодинг-стайл. Не нравится — обращайтесь к старшему. Но следовать ему — must have. Иначе будет ситуация сродни автодорогам: есть ПДД, но каждый ездит по понятиям. А они у каждого свои, вот и уносит по 30 тыщ в год на кладбище.
Re[10]: И эти люди говорят мне о ЧИТАБЕЛЬНОСТИ? :)
MS>if(condition) // Есть If
MS>{
MS> int i = action();
MS> . . .
MS>}
MS>//if(condition) // Нет If-а (режим отладки)
MS>{
MS> int i = action();
MS> . . .
MS>}
MS>
Да уж, мегарежим
А с else ты что делаешь?
Не говоря уже о том, что эту "правку" можно ещё и забыть откатить...
Я тебе советую так делать, кстати:
static bool debugFlag = false;
if( debugFlag || ... )
{
int i = action();
. . .
}
и сбрасывать debugFlag из отладчика, например, или ещё из каких настроек...
MS>Не говоря уже об условной компиляции. Вот пример из реального проекта: MS>
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Erop, Вы писали:
E>Здравствуйте, CreatorCray, Вы писали:
CC>>ИМХО банально строки экономили. Вариант с открывающей скобкой на отдельной строке куда более читабельный.
E>ИМХО пофиг. Просто вопрос привычки быть может. E>Можешь попробовать привести пример кода, где "перерасстановка скобок" существенно меняет его понятность E>ИМХО обычно всё как у Крылова: "А вы, друзья, как не расставть скобки..."
if (flag) {
do_something();
}
if (flag)
{
do_something();
}
в первом случае условие визуально сливается с телом условия, во втором же — визуально всё разделено и лично мне приятнее читать второй вариант
Вот, работаю в комании, где практикуют чистый С и
Kernighan & Richie coding style впридачу.
Комментарии — только /* */,
объявления переменных — только в начале функций или блоков,
ну и прочие прелести. В общем, чтобы на самом старом компиляторе
можно было бы собрать.
Насколько оправдан такой подход сейчас ?
Мне казалось, что GCC уже прошелся победным маршем по всем
возможным платформам и такое сейчас просто не оправдано.
Здравствуйте, MasterZiv, Вы писали:
MZ>Вот, работаю в комании, где практикуют чистый С и MZ>Kernighan & Richie coding style впридачу.
УЖОС!!! Беги оттуда!!! Как ты вообще терпишь?
Вообще-то cs есть cs, а K&R вовсе и не лохи были...
ИМХО соблюдение cs вообще несущественная часть процесса программирования, в смысле по трудозатратам, а вот несоблюдение -- очень существенная может получиться
Но главное -- это то, что интересностьработы программера и его уровеньопределяется вовсе и не CS, а качеством кода...
А к CS привыкаешь за день-два-три...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, korzh.pavel, Вы писали:
KP>И вообще, я могу жить с любой нотацией, мне воротит только от трёх вещей, когда пишешь на C++:
KP>1. Венгерская нотация
KP>2. Имена классов начинающееся с 'C'
KP>3. Когда фигурную скобку ставят на одной строке с условием.
Все-таки у тебя, видимо, очень много свободного времени, если его остается на беспокойство о таких мелочах. Об этом надо договориться один раз и использовать. Спорить, где скобка лучше — бред полный. Давайте еще размер табуляции обсудим, и нужно или нет табуляцию на пробелы заменять.
It's kind of fun to do the impossible (Walt Disney)
Здравствуйте, MasterZiv, Вы писали:
MZ>Вот, работаю в комании, где практикуют чистый С и MZ>Kernighan & Richie coding style впридачу.
Все зависит от задачи. Во-первых, С пошустрее, а уж если С++ коряво используемый, так и гораздо пошустрее. Во-вторых, программу гораздо легче читать, если переменные описаны в начале блока, это уж зависит от привычек, но я так и на С# сейчас пишу.
dimavs пишет:
> используемый, так и гораздо пошустрее. Во-вторых, программу гораздо > легче читать, если переменные описаны в начале блока, это уж зависит от > привычек, но я так и на С# сейчас пишу.
Это от привычек не зависит. Программу легче читать, если переменная
объявляется в месте первого использования. Ты знаешь, сколько
у нас тут НЕИСПОЛЬЗУЕМЫХ ПЕРЕМЕННЫХ ?
Здравствуйте, korzh.pavel, Вы писали:
KP>Меня тут пытаются заставить писать вот так: KP>
KP>if (...) {
KP> //...
KP>}
KP>
KP>так я прям сопротивляюсь всеми фибрами души.
Я тоже когда-то сопротивлялся. А теперь даже так нравится, привык к этому стилю за месяц где-то, вначале было тяжело.
Что нравится — меньше строчек получается (имхо оптимально именно так, заодно можно выработать правило всегда оборачивать все, что после if в фигурные скобочки), а читаемость при определенной тренировке не падает совсем. Ну и некоторые вумные научные обоснования где-то были, типа если закомментируешь if случайно — то будет ошибка компиляции .
Здравствуйте, CreatorCray, Вы писали:
CC>ИМХО банально строки экономили. Вариант с открывающей скобкой на отдельной строке куда более читабельный.
ИМХО пофиг. Просто вопрос привычки быть может.
Можешь попробовать привести пример кода, где "перерасстановка скобок" существенно меняет его понятность
ИМХО обычно всё как у Крылова: "А вы, друзья, как не расставть скобки..."
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, CreatorCray, Вы писали:
CC>Где они тут длинные?
Ну там было написано someQuiteLongCondition0
Если скобку видно, то уже лучше намного становится
Но с двойным отступом ещё лучше таки читается.
ИМХО оба стиля вполне терпимые. И нет никакой необходимости навязывать выбор одного из них, хотя если его навязать то тоже ничего особо страшного нет, кроме библиотечного и старого кода.
Мне не понять от чего людям трудно перестроться
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, dimavs, Вы писали:
D>Все зависит от задачи. Во-первых, С пошустрее, а уж если С++ коряво используемый, так и гораздо пошустрее.
Крайне спорно D>Во-вторых, программу гораздо легче читать, если переменные описаны в начале блока, это уж зависит от привычек, но я так и на С# сейчас пишу.
ИМХО, наоборот тяжелее.
Здравствуйте, Аноним, Вы писали:
D>>Во-вторых, программу гораздо легче читать, если переменные описаны в начале блока, это уж зависит от привычек, но я так и на С# сейчас пишу. А>ИМХО, наоборот тяжелее.
Функции стоит делать не диннее чем на ~50 строчек, тогда нормально все
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)
Здравствуйте, MasterZiv, Вы писали:
MZ>ДимДимыч пишет: >> Функции стоит делать не диннее чем на ~50 строчек, тогда нормально все
MZ>Функции у нас бывают по 1000-1500 строк.
а вот это гораздо хуже объявлений всех переменных в начале блока и комментариев /* */
Здравствуйте, korzh.pavel, Вы писали:
KP>а хочется вот так:
KP> if (...)
KP> {
KP> //...
KP> }
Понятно. Думал, ты чего-нибудь необыкновенного захотел, вроде:
if (...) {
//... }
А так IMHO зря тебя заставляли, если ты своего любимого стиля последовательно придерживался. Но все же, так, как заставляли, написаны примеры в стандарте C, C++, C#, и в книгах K&R, Страуструпа, Гослинга и Хейлсберга.
Здравствуйте, korzh.pavel, Вы писали:
KP>Могу только посочувствовать. KP>Меня тут пытаются заставить писать вот так: KP>
KP>if (...) {
KP> //...
KP>}
KP>
KP>так я прям сопротивляюсь всеми фибрами души.
А что так?
Слишком много текста на экран убирается?
Попробуй увеличить шрифт
Ну а если серьёзно, то если тебе на новом месте не нравится только то, где скобочку почле if надо писать, то тебе парень очень крупно повезло.
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, igna, Вы писали:
I>А так IMHO зря тебя заставляли, если ты своего любимого стиля последовательно придерживался. Но все же, так, как заставляли, написаны примеры в стандарте C, C++, C#, и в книгах K&R, Страуструпа, Гослинга и Хейлсберга.
ИМХО банально строки экономили. Вариант с открывающей скобкой на отдельной строке куда более читабельный.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Здравствуйте, korzh.pavel, Вы писали:
KP>Здравствуйте, Erop, Вы писали:
E>>Здравствуйте, CreatorCray, Вы писали:
CC>>>ИМХО банально строки экономили. Вариант с открывающей скобкой на отдельной строке куда более читабельный.
E>>ИМХО пофиг. Просто вопрос привычки быть может. E>>Можешь попробовать привести пример кода, где "перерасстановка скобок" существенно меняет его понятность E>>ИМХО обычно всё как у Крылова: "А вы, друзья, как не расставть скобки..."
KP>
KP> if (flag) {
KP> do_something();
KP> }
KP>
KP>
KP> if (flag)
KP> {
KP> do_something();
KP> }
KP>
KP>в первом случае условие визуально сливается с телом условия, во втором же — визуально всё разделено и лично мне приятнее читать второй вариант
И вообще, я могу жить с любой нотацией, мне воротит только от трёх вещей, когда пишешь на C++:
1. Венгерская нотация
2. Имена классов начинающееся с 'C'
3. Когда фигурную скобку ставят на одной строке с условием.
Здравствуйте, Аноним, Вы писали:
D>>Во-вторых, программу гораздо легче читать, если переменные описаны в начале блока, это уж зависит от привычек, но я так и на С# сейчас пишу. А>ИМХО, наоборот тяжелее.
Я вообще привык все используемые переменные определять в начале фукнции, каждую на отдельной строчке, и обязательно инициализировать начальными значениями, например так:
BOOL flag = FALSE; // флаг
CMyStruct* data = NULL; // расчетные данныеint i = -1; // счетчик
И мне нравится, и мне так гораздо удобнее. Я думаю, это вопрос привычки...
Здравствуйте, korzh.pavel, Вы писали:
KP>в первом случае условие визуально сливается с телом условия, во втором же — визуально всё разделено и лично мне приятнее читать второй вариант
Ты уж прости, но это к психотерапевту надо обратиться или к окулисту, уж даже и не знаю к кому.
ИМХО совершенно одинаково читабельно...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, MShura, Вы писали:
MS>Очень похоже на стиль используемый в Microsoft. MS>Там только добавляют одну пустую строчу после {
Вот! Так же нередко поступают и в Java. Но если всё равно остается пустая строка, что мешает разместить «{» на ней?!
MS>Я предпочитаю писать логические операторы в начале строчки
А я так и не определился. У написания их в конце есть то преимущество, что сразу видно, что строка не завершена (слева это и так ясно):
При таком расположении легко добавлять и удалять условия. В этом случае можно было бы разместить «)» и «{» на одной строке, но я их разделяю для единообразия.
А вот это правильно. Я привык к мониторам, на которых умещается три колонки исходников. Не более 80 символов каждая. И минимум 60 строк в высоту. Хотя и из этого бывают исключения, но редко. Здесь главное — без фанатизма.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Здравствуйте, Alex Alexandrov, Вы писали:
AA>Здравствуйте, korzh.pavel, Вы писали:
KP>>И вообще, я могу жить с любой нотацией, мне воротит только от трёх вещей, когда пишешь на C++:
KP>>1. Венгерская нотация
KP>>2. Имена классов начинающееся с 'C'
KP>>3. Когда фигурную скобку ставят на одной строке с условием.
AA>Все-таки у тебя, видимо, очень много свободного времени, если его остается на беспокойство о таких мелочах. Об этом надо договориться один раз и использовать. Спорить, где скобка лучше — бред полный.
а я только здесь спорю, на rsdn.
просто очень сложно заставить себя делать не логичные вещи.
Ну вот не вижу я логики в этом:
if (flag) {
//...
}
AA>Давайте еще размер табуляции обсудим, и нужно или нет табуляцию на пробелы заменять.
можно обсудить.
Кстати тоже холиварная тема, здесь, помоему, уже обсуждалось. Тоже флейм не хилый был
Здравствуйте, korzh.pavel, Вы писали:
AA>>Писать надо так, как команда договорилась.
KP>я и пишу ибо не охота внутри компании из-за такой мелочи шум поднимать.
Это хорошо. Теперь понаблюдай за собой и обрати внимание на то, как через 2 недели ты привыкнешь и тебе этот вариант станет нравится больше.
AA>>Какая разница, где скобки ставить?
KP>Вот действительно. Какая разница? KP>Тогда я не понимаю почему из-за такой мелочи программистов надо отвлекать от работы, KP>чтобы они приучались скобки ставить по новому.
Ну, под "какая разница" я имел в виду не команду, а каждого индивидуума. Работа в команде такое дело, что иногда надо делать не как тебе хочется, а как всем хочется. Стиль кодирования — очень хороший тест на качество команды. Его замечательность заключается еще и в том, что это одно из первых решений, которое команда должна принять после формирования. Если люди не могут договориться и пойти на взаимные компромиссы со скобками, то что же будет, когда они начнут договариваться о более существенных для успеха продукта аспектах дизайна???
Если же ты пришел в уже сложившуюся команду и тебе "навязывают" принятый там стиль кодирования — нужно его просто принять и все. Лично для меня одно из самых приятных ощущений, когда я смотрю на командный код и не помню я его написал или нет. Он выглядит Одинаково и его писала Команда.
AA>>А всяких сопротивляющихся и втихую продолжающих писать по-своему — гнать из команды надо. Чтобы микроклимат не портили...
KP>слишком катигорично.
It's kind of fun to do the impossible (Walt Disney)
Здравствуйте, MasterZiv, Вы писали:
MZ>Вот, работаю в комании, где практикуют чистый С и MZ>Kernighan & Richie coding style впридачу.
MZ>Комментарии — только /* */, MZ>объявления переменных — только в начале функций или блоков, MZ>ну и прочие прелести. В общем, чтобы на самом старом компиляторе MZ>можно было бы собрать.
MZ>Насколько оправдан такой подход сейчас ? MZ>Мне казалось, что GCC уже прошелся победным маршем по всем MZ>возможным платформам и такое сейчас просто не оправдано.
MZ>(я уже не говорю о использовании С++ вместо С).
Могу только посочувствовать.
Меня тут пытаются заставить писать вот так:
MZ>Вот, работаю в комании, где практикуют чистый С и
Круть! Давно мечтал сходить в музей по программированию! MZ>Kernighan & Richie coding style впридачу.
главное чтоб он был, а какой неважно
Здравствуйте, MasterZiv, Вы писали:
MZ>Мне казалось, что GCC уже прошелся победным маршем по всем MZ>возможным платформам и такое сейчас просто не оправдано.
У нас похожий подход применяется. С комментариями, правда, попроще
А обусловлено тем, что все-таки не для всех target-платформ есть компилятор gcc C, не говоя уже о g++.
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)
MZ>Вот, работаю в комании, где практикуют чистый С и MZ>Kernighan & Richie coding style впридачу.
....
Так писали и до сих пор пишут в Microsoft.
Можете посмотреть исходники свежайшего драйвера FAT.
Здравствуйте, kaa.python, Вы писали:
ДД>>Функции стоит делать не диннее чем на ~50 строчек, тогда нормально все
KP>так же спорный вопрос. функция больше 15-20 строчек уже не совсем желательна.
Зависит от того, в какой среде разработка ведется и какие требования к оформлению кода. Я стараюсь придерживаться такого правила: функция должна занимать не более 3/4 высоты редактора и содержать не более 3 вложенных конструкций.
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)
Здравствуйте, MasterZiv, Вы писали:
>> А обусловлено тем, что все-таки не для всех target-платформ есть >> компилятор gcc C, не говоя уже о g++.
MZ>Пример можешь привести ?
С которыми сталкивался лично: PIC18FXX2, 8086.
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)
Здравствуйте, ДимДимыч, Вы писали: ДД>Функции стоит делать не диннее чем на ~50 строчек, тогда нормально все
ээх,... все бы этого придерживались. Я тут недавно раскручивал функцию на 2000 строк в файле длиной около 11 тыс строк. Чистый Си, причем объявления функций должны быть в двух видах и старом(K&R) и новом (ANSI). Типа так:
#ifdef NOANSI
static void function(p1,p2,p3)
int p1;
int p2;
int p3;
#else
static void function(int p1,int p2,int p3)
#endif
По другому нельзя,нельзя даже на макросы заменить Жуть...
Вот где кунцкамера программирования. :-o
Здравствуйте, korzh.pavel, Вы писали:
KP>И вообще, я могу жить с любой нотацией, мне воротит только от трёх вещей, когда пишешь на C++:
KP>3. Когда фигурную скобку ставят на одной строке с условием.
Здравствуйте, Roman Odaisky, Вы писали:
RO>Здравствуйте, Erop, Вы писали:
E>>Можешь попробовать привести пример кода, где "перерасстановка скобок" существенно меняет его понятность
RO>1. RO>
Здравствуйте, korzh.pavel, Вы писали:
E>>>Можешь попробовать привести пример кода, где "перерасстановка скобок" существенно меняет его понятность
RO>>1. RO>>
Попробуй форматировать программу так, чтобы она помещалась в обычный экран по ширине... Скажем 70 символов хорошее ограничение длины строки сверху...
KP>Отлично. У тебя получилось лучше аргументировать чем у меня. KP>ну невозможно же читать такое!
Согласен, что невозможно, но в первую очередь из-за того, что строчки длинные.
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, elmal, Вы писали:
E>Здравствуйте, korzh.pavel, Вы писали:
KP>>Меня тут пытаются заставить писать вот так: KP>>
KP>>if (...) {
KP>> //...
KP>>}
KP>>
KP>>так я прям сопротивляюсь всеми фибрами души. E>Я тоже когда-то сопротивлялся. А теперь даже так нравится, привык к этому стилю за месяц где-то, вначале было тяжело. E>Что нравится — меньше строчек получается (имхо оптимально именно так, заодно можно выработать правило всегда оборачивать все, что после if в фигурные скобочки),
а смысл экономить строчки?
E>а читаемость при определенной тренировке не падает совсем. Ну и некоторые вумные научные обоснования где-то были, типа если закомментируешь if случайно — то будет ошибка компиляции .
я себе слабо представляю как можно *случайно* что-то закомментировать
Здравствуйте, McSeem2, Вы писали:
MS>Нету там никакого else.
А если есть, то ты как действуешь в "отладочном режме"?
E>>Я тебе советую так делать, кстати: E>>[c]static bool debugFlag = false; E>>if( debugFlag || ... ) E>>{ E>> int i = action(); E>> . . .
MS>Это полное ламерство. Спасибо, не катит. MS>Иногда попадаются такие "стили", сделаные "мега-профессионалами", полностью замусоренные всякими отладочными флагами, логами и совершенно бессмысленными коментариям на каждой строке (i++; // Increment i).
За признание моего мегапрофессионализма спасибо конечно, но таки ты не понял моего совета.
Я тебе советовал делать так на время, когда ты комментишь
Просто при таком способе, даже если ты забудешь убрать коммент, то ничего плохого не случится.
Про то, что отлаживаться лучше вообще совсем иначе, я и не говорю
MS>Мы с тобой разговариваем на разных языках и занимаемся разными задачами. Это во-первых. Во-вторых, я ничего не понял из твоих примеров — твоя функциональная декомпозиция ужасна. Какой кайф в том, чтобы все запутать и замусорить, вместо того, чтобы поставить один-единственный и очевидный ifdef? Какой кайф в том, чтобы дублировать логику? Какой кайф в лишних ненужных операциях? Это риторические вопросы, можно не отвечать.
Почему ужасна? Почему "инициализация текстуры таким-то образом" или "инициализация текстуры другим образом" это плохая декомпозиция?
Но в любом случае я же не знаю что обозначают все твои структуры. Я бы совсем иначе делал
MS>Опытный инженер отличается от юниора в том числе и тем, что он более-менее оптимально разделяет функциональность. Не укрупняет, но и не дробит в мелкую крошку. Он делает опмимально. В то время, как юниора все время заносит либо в ту, либо в другую сторону. В моем примере решение близко к оптимальному.
Самокритично так
Лично мне, например, очень неудобно читать что будет в случае если такая условная компиляция или другая.
Ну мне, например, не нравится, что в одном случае объявляется переменная tgData, которая видна после if'а, а в другом нет...
Ну и вообще мне не понятно из стовего кода, например, должно в конце поле gv->Texture обязательно инициализироваться чем-то ненулевым или нет, и если таки должна, то в каком случае чем (как при использовании так и не при использовании макроса)
MS>Я это пишу не для тебя. Я пишу это, чтобы новички не приняли твои слова за чистую монету. В твоем случае, есть сильное подозрение, что пациент принципиально не обучаем (в народе говорят "как об стенку горох").
Ещё раз спасибо. Признаюсь, что такими аргументами меня обучить действительно затруднительно
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
, например KP>Так там как раз закомментировали не случайно
Упс, я имел в виду описаный в ответе сценарий "закомментировалии забыли"
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
В Microsoft как всегда не ищут лёгких путей.
Т.е. пожертвовали компактностью, но стиль кода не сменили даже ради одного случая.
(написали два #if/#endif но стиль сохранили)
Когда я пишу в таком стиле, то в подобных случаях им жертвую.
Здравствуйте, Erop, Вы писали:
MS>>Нету там никакого else. E>А если есть, то ты как действуешь в "отладочном режме"?
Блочными коментариями. Неужели не очевидно?
E>За признание моего мегапрофессионализма спасибо конечно, но таки ты не понял моего совета. E>Я тебе советовал делать так на время, когда ты комментишь E>Просто при таком способе, даже если ты забудешь убрать коммент, то ничего плохого не случится.
Не бойся, не забуду. На этапе разработки алгорима у меня вообще бывают тонны отладочной логики, которую потом безжалостно стираю. Например, вывод в некую графическую консоль. Оставлять ее — только мусорить и раздувать из мухи слона. Смысла в этом — ноль-целых-ноль-десятых.
E>Про то, что отлаживаться лучше вообще совсем иначе, я и не говорю
Ну это только твое мнение. Отладка бывает разная, в том числе бывают случаи, когда ни точки останова, ни пошаговое выполнение не помогают в принципе.
E>Почему ужасна? Почему "инициализация текстуры таким-то образом" или "инициализация текстуры другим образом" это плохая декомпозиция? E>Но в любом случае я же не знаю что обозначают все твои структуры. Я бы совсем иначе делал
Потому ужасна, что все порубано в слишком мелкую крошку. Многие не понимают, что это тоже плохо. Вместо того, чтобы охватить логику одним взглядом, приходится скакать туда-сюда, чтобы понять, а что же происходит. А просходит какая-нибудь мелочь. Грамотная декомпозиция функциональности — это гигантская проблема современных программистов. Электронщики в этом плане гораздо опытнее и мудрее. Наверное потому, что ошибки декомпозиции обходятся им гораздо дороже.
E>Ну и вообще мне не понятно из стовего кода, например, должно в конце поле gv->Texture обязательно инициализироваться чем-то ненулевым или нет, и если таки должна, то в каком случае чем (как при использовании так и не при использовании макроса)
Если нет ассерта, значит не обязательно. По-моему так. Был у меня прецедент — некие умники понаставили в моем алгоритме ассетов, потому что им показалось что так будет првильнее. И главное — именно в тех местах, где нуль-поинтеры были совершенно нормальной штатной ситуацией. А потом начали жаловаться, что вываливается по ассерту. Когда я понял в чем дело, то слегка офигел.
А условная компиляция нужна именно потому, что если не определена эта макро-константа, то в природе просто не существует ни TextureGlyph, ни ImageInfoBase, ни Font::GetBinding(). А если определена, то это тащит за собой еще тонну кода, что на всяких Sony PSP может быть очень критичным. Да и даже не в этом дело, а например, в соблюдении законов об интеллектуальной собственности. И зачем, ну зачем еще дробить такую тривиальную логику в еще более мелкую крошку?
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Здравствуйте, McSeem2, Вы писали:
MS>Блочными коментариями. Неужели не очевидно?
Ну мало ли что у крутых программеров принято
Может ты
if( true ) {}
вписываешь
А что мешает действоватьодинаково в случае когда else есть и когда нет?
MS>Не бойся, не забуду. На этапе разработки алгорима у меня вообще бывают тонны отладочной логики, которую потом безжалостно стираю. Например, вывод в некую графическую консоль. Оставлять ее — только мусорить и раздувать из мухи слона. Смысла в этом — ноль-целых-ноль-десятых.
Очень даже может быть. Алгоритмы, они разные бывают... Я вот, например, пишу макеты и тестовые драйверы, которые потом остаются для развитияи и поддержки...
Но вот "не забуду" -- это не убеждает. Я слишком много чужого такого "незабываемого" кода за жизнь вычистил из прог
E>>Про то, что отлаживаться лучше вообще совсем иначе, я и не говорю MS>Ну это только твое мнение. Отладка бывает разная, в том числе бывают случаи, когда ни точки останова, ни пошаговое выполнение не помогают в принципе.
А точки останова и пошаговое выполнение -- это ещё хуже, ИМХО
MS>Грамотная декомпозиция функциональности — это гигантская проблема современных программистов.
А ты можешь пояснить почему крошка "слишком мелкая"? Казалось бы у тебя там сначала записан "конструктор" структуры от параметров, но в нулевом состоянии,
Потом она доинициализируется разными способами. Я бы всё это методами сделали звал их.
Тогда уровень "какие способы инициализации и доинициализации зовём" был бы в одном местеописан, а конкретные действия в описанных рядом методах... Обычно тебе либо тот уровень нужен, либо другой, вроде...
MS>Если нет ассерта, значит не обязательно. По-моему так.
Так как у тебя там нет ни одного assert, то это, ИМХО, не очевидно
Мало того, мог бы коммент написать что ли...
MS>Был у меня прецедент — некие умники понаставили в моем алгоритме ассетов, потому что им показалось что так будет првильнее. И главное — именно в тех местах, где нуль-поинтеры были совершенно нормальной штатной ситуацией. А потом начали жаловаться, что вываливается по ассерту. Когда я понял в чем дело, то слегка офигел.
Ну и я про то же. Такой код, как ты привёл, трудно поддерживать, особенное если он чужой
Ты мне всё ещё не веришь?
MS>А условная компиляция нужна именно потому, что если не определена эта макро-константа, то в природе просто не существует ни TextureGlyph, ни ImageInfoBase, ни Font::GetBinding(). А если определена, то это тащит за собой еще тонну кода, что на всяких Sony PSP может быть очень критичным. Да и даже не в этом дело, а например, в соблюдении законов об интеллектуальной собственности. И зачем, ну зачем еще дробить такую тривиальную логику в еще более мелкую крошку?
Ну, например, чтобы те, кто на Sony PSP не заморачивались...
Я бы сделал какой-то слой-нелпер, который от запчастей лишних на Sony PSP изолирует, если надо, а весь код условной компиляцией не перепахивал бы
Ну да у всех свои приоритеты.
У меня они такие: надёжность и поддерживаемость другими людьми
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Erop, Вы писали:
E>Ну и я про то же. Такой код, как ты привёл, трудно поддерживать, особенное если он чужой E>Ты мне всё ещё не веришь?
Не верю. Мой код легко поддерживать и модифицировать. Тому есть многочисленные подтвержения на мировом уровне.
E>Я бы сделал какой-то слой-нелпер, который от запчастей лишних на Sony PSP изолирует, если надо, а весь код условной компиляцией не перепахивал бы
Дык это и есть тот самый слой-хелпер.
E>Ну да у всех свои приоритеты. E>У меня они такие: надёжность и поддерживаемость другими людьми
Именно так. Но у нас с тобой разные критерии о "надежности и поддерживаемости". Я опираюсь на опыт и отклики большого количества других людей, а ты похоже исходишь из своих субъективных критериев.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Коряво выглядит
E>И бить динные строки на короткие...
У него и так они разбиты на короткие
E>Попробуй форматировать программу так, чтобы она помещалась в обычный экран по ширине... Скажем 70 символов хорошее ограничение длины строки сверху...
Строка то как раз не длиннее 70 символов.
E>Согласен, что невозможно, но в первую очередь из-за того, что строчки длинные.
Где они тут длинные?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[16]: Может п-ю задвиним? По делу есть что сказать?
Здравствуйте, McSeem2, Вы писали:
E>>Я бы сделал какой-то слой-нелпер, который от запчастей лишних на Sony PSP изолирует, если надо, а весь код условной компиляцией не перепахивал бы
MS>Дык это и есть тот самый слой-хелпер.
Дык надо было про это и рассказать. Я так понял, что это типичный код из проекта
Но в нём всё равно маловато, на мой вкус, комментариев и assert'ов.
И главное, я так и не понял почему тебе кажется, что такое причудливое переплетение оперетора if и дерективы #ifdef легко понимается, читается и поддерживается?
Мне собственно не понравилось именно это. Если тебе удобнее не дробить на функции, то можно не дробить, а подставить их обратно. На структуру кода это, ИМХО, никак не повлияет.
Опять же вопрос, а что ты пишешь, если там надо два разных #ifdef приделать?
Ну типа будет у текстуры не два варианта инициализации, а три, при этом они все пробуются по очереди, но на некоторых платформах каких-то из них нет.
Почему для случая "две альтернативы" и для случая "три альтернативы" надо применать разные техники использования условной компиляции?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
korzh.pavel пишет:
> И вообще, я могу жить с любой нотацией, мне воротит только от трёх > вещей, когда пишешь на C++: > 1. Венгерская нотация > 2. Имена классов начинающееся с 'C' > 3. Когда фигурную скобку ставят на одной строке с условием.
Здравствуйте, McSeem2, Вы писали:
MS>А вот это правильно. Я привык к мониторам, на которых умещается три колонки исходников. Не более 80 символов каждая. И минимум 60 строк в высоту. Хотя и из этого бывают исключения, но редко. Здесь главное — без фанатизма.
Прошу прощения за офтоп. Можешь рассказать, каким ИДЕ пользуешься?
Здравствуйте, korzh.pavel, Вы писали:
KP>Здравствуйте, c-smile, Вы писали:
CS>>Здравствуйте, korzh.pavel, Вы писали:
KP>>>Меня тут пытаются заставить писать вот так: KP>>>
KP>>>if (...) {
KP>>> //...
KP>>>}
KP>>>
KP>>>так я прям сопротивляюсь всеми фибрами души.
CS>>Это ж кто у нас там такой любитель?
KP>
KP>PKv
Здравствуйте, korzh.pavel, Вы писали:
KP>И вообще, я могу жить с любой нотацией, мне воротит только от трёх вещей, когда пишешь на C++:
KP>1. Венгерская нотация
KP>2. Имена классов начинающееся с 'C'
KP>3. Когда фигурную скобку ставят на одной строке с условием.
А меня вообще ни от чего не воротит, у нас все пишут как привыкли и никто никого не заставляет
Я пишу со скобкой на той же строке и не расставляю пробельчики между операторами и круглыми скобками,
некоторые пишут тоже без пробельчиков но скобки с новой строки, а некоторые делают и то и другое.
Все норм, все уживаемся, никто не жалуется на читабельность.
Более того, это сразу помогает идентифицировать автора если что не так
Правда С перед именами не ставит никто, но если бы кто-то и ставил, от ужаса бы никто не помер
Переменные также в вольном стиле. lpctstrString и подобные извращения никто не использует, но префикс из 1 буквы ставится частенько.
Кто ставит 'p' перед указателем, кто любит 'a' ставить, иногда 'с', короче кому как нравится.
Re[17]: Может п-ю задвиним? По делу есть что сказать?
Здравствуйте, Erop, Вы писали:
E>И главное, я так и не понял почему тебе кажется, что такое причудливое переплетение оперетора if и дерективы #ifdef легко понимается, читается и поддерживается?
Потому что в данном случае ничего другого и не требуется по определению. И поддержка моего кода является гораздо более простой, чем с навороченными иерархиями.
E>Мне собственно не понравилось именно это. Если тебе удобнее не дробить на функции, то можно не дробить, а подставить их обратно. На структуру кода это, ИМХО, никак не повлияет.
E>Опять же вопрос, а что ты пишешь, если там надо два разных #ifdef приделать? E>Ну типа будет у текстуры не два варианта инициализации, а три, при этом они все пробуются по очереди, но на некоторых платформах каких-то из них нет.
E>Почему для случая "две альтернативы" и для случая "три альтернативы" надо применать разные техники использования условной компиляции?
Трех альтернатив в данном случае нету. И не будет никогда. Это определено сущностью задачи, и, если угодно, математической сущностью законов этого мира. Так зачем все переусложнять?
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Здравствуйте, korzh.pavel, Вы писали:
KP>Здравствуйте, MasterZiv, Вы писали:
KP>Могу только посочувствовать. KP>Меня тут пытаются заставить писать вот так: KP>
KP>if (...) {
KP> //...
KP>}
KP>
KP>так я прям сопротивляюсь всеми фибрами души.
Писать надо так, как команда договорилась. Какая разница, где скобки ставить? А всяких сопротивляющихся и втихую продолжающих писать по-своему — гнать из команды надо. Чтобы микроклимат не портили...
It's kind of fun to do the impossible (Walt Disney)
Здравствуйте, unreg_flex, Вы писали:
_>А меня вообще ни от чего не воротит, у нас все пишут как привыкли и никто никого не заставляет
Ужас. Как же вы договариваетесь о более серьезных вещах?
_>Я пишу со скобкой на той же строке и не расставляю пробельчики между операторами и круглыми скобками, _>некоторые пишут тоже без пробельчиков но скобки с новой строки, а некоторые делают и то и другое. _>Все норм, все уживаемся, никто не жалуется на читабельность.
По-прежнему ужас.
_>Более того, это сразу помогает идентифицировать автора если что не так
"cvs ann" и "svn blame" у вас не в почете, видимо? Снова ужас.
_>Правда С перед именами не ставит никто, но если бы кто-то и ставил, от ужаса бы никто не помер _>Переменные также в вольном стиле. lpctstrString и подобные извращения никто не использует, но префикс из 1 буквы ставится частенько. _>Кто ставит 'p' перед указателем, кто любит 'a' ставить, иногда 'с', короче кому как нравится.
Мне это не нравится.
It's kind of fun to do the impossible (Walt Disney)
Здравствуйте, Alex Alexandrov, Вы писали:
AA>Здравствуйте, korzh.pavel, Вы писали:
KP>>Здравствуйте, MasterZiv, Вы писали:
KP>>Могу только посочувствовать. KP>>Меня тут пытаются заставить писать вот так: KP>>
KP>>if (...) {
KP>> //...
KP>>}
KP>>
KP>>так я прям сопротивляюсь всеми фибрами души.
AA>Писать надо так, как команда договорилась.
я и пишу ибо не охота внутри компании из-за такой мелочи шум поднимать.
AA>Какая разница, где скобки ставить?
Вот действительно. Какая разница?
Тогда я не понимаю почему из-за такой мелочи программистов надо отвлекать от работы,
чтобы они приучались скобки ставить по новому.
AA>А всяких сопротивляющихся и втихую продолжающих писать по-своему — гнать из команды надо. Чтобы микроклимат не портили...
слишком катигорично.
Re[18]: Может п-ю задвиним? По делу есть что сказать?
Здравствуйте, McSeem2, Вы писали:
MS>Трех альтернатив в данном случае нету. И не будет никогда. Это определено сущностью задачи, и, если угодно, математической сущностью законов этого мира. Так зачем все переусложнять?
Просто, но это для меня слишком умно. Лучше покажи как оформляешь случай с тремя альтернативами?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[19]: Может п-ю задвиним? По делу есть что сказать?
Здравствуйте, Erop, Вы писали:
E>Просто, но это для меня слишком умно. Лучше покажи как оформляешь случай с тремя альтернативами?
Сколько можно повторять — не бывает такого. Три альтернативы из условной компиляции — это, как говорят в Одессе, что-то особенного. Это можно допустить при определениии типа данных, но мне ни разу не приходилось делать ничего подобного для разного кода. И вообще, в моем исходном примере — один-единственный #ifdef, даже безо всякого #else — то есть, либо оно есть, либо его нет. И никаких #else тоже не бывает, не говоря уже о "трех вариантах". На что ты тут начал мощно вопить про "ужас ужас". А проблема-то не стоит и яичной скорлупы. Короче говоря, тебя не должен беспокоить пустяковый вопрос сопровождения и поддержки приведенного решения.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Здравствуйте, Erop, Вы писали:
E>Здравствуйте, korzh.pavel, Вы писали:
KP>>в первом случае условие визуально сливается с телом условия, во втором же — визуально всё разделено и лично мне приятнее читать второй вариант
E>Ты уж прости, но это к психотерапевту надо обратиться или к окулисту, уж даже и не знаю к кому. E>ИМХО совершенно одинаково читабельно...
К кодооформопатолгоанатомотерапевту.
Но я открывающие скобки переношу. На новую строку переношу.
Здравствуйте, McSeem2, Вы писали:
MS>Сколько можно повторять — не бывает такого. Три альтернативы из условной компиляции — это, как говорят в Одессе, что-то особенного. Это можно допустить при определениии типа данных, но мне ни разу не приходилось делать ничего подобного для разного кода. И вообще, в моем исходном примере — один-единственный #ifdef, даже безо всякого #else — то есть, либо оно есть, либо его нет. И никаких #else тоже не бывает,
Вообще-то в случае когда есть и когда нет у тебя получается два разных варианта кода...
MS>не говоря уже о "трех вариантах". На что ты тут начал мощно вопить про "ужас ужас". А проблема-то не стоит и яичной скорлупы. Короче говоря, тебя не должен беспокоить пустяковый вопрос сопровождения и поддержки приведенного решения.
Понимаю, "не бывает" это тоже ответ.
Раз не бывает, то у тебя нельзя поучиться решать подобные проблемы наверное, потому что у тебя в таких вопросах нет опыта.
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Sm0ke, Вы писали:
S>Но я открывающие скобки переношу. На новую строку переношу.
А мне без разницы.
Мало того, я знаю контору, где в некоторых конструкциях обязывают то или иное поведение, а в некоторых предоставляют свободу выбора программисту
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
KP>Меня тут пытаются заставить писать вот так: KP>
KP>if (...) {
KP> //...
KP>}
KP>
Я вот раньше терпеть не мог такого стиля — условие и скобка на одной строчке. А недавно попробовал, привык. Теперь бесит код, где открывающая скобка начинает строку Привычка — великое дело. ИМХО, главное, чтобы программист писал код, качественный с точки зрения выбранной парадигмы и средств языка. А уж как там скобки ставить или классы именовать — дело десятое.