OberonCore https://forum.oberoncore.ru/ |
|
Народные ополченцы изобрели новый способ кодить https://forum.oberoncore.ru/viewtopic.php?f=27&t=1731 |
Страница 1 из 2 |
Автор: | Сергей Губанов [ Среда, 22 Июль, 2009 12:54 ] |
Заголовок сообщения: | Народные ополченцы изобрели новый способ кодить |
Цикл выполняющийся 1 раз написанный только ради брэков: Код: do { if (условие1) { ... break; } ... if (условие2) { ... break; } ... } while (false) Сегодня на работе увидел в нашем коде, волосы встали дыбом. Нашёл человека написавшего этого крокодила. Он откровенно не понимает, что в этом плохого. |
Автор: | Евгений Темиргалеев [ Среда, 22 Июль, 2009 13:34 ] |
Заголовок сообщения: | Re: Народные ополченцы изобрели новый способ кодить |
Когда-то я писал такое же ![]() В одном месте использовался несколько раз подряд макрос который разворачивался в if (какое-то усл.) goto label; Кривая оптимизация делала код не работающим. Помогла компилятору замена goto на цикл и брейками... |
Автор: | Сергей Губанов [ Среда, 22 Июль, 2009 14:49 ] |
Заголовок сообщения: | Re: Народные ополченцы изобрели новый способ кодить |
Обнаружен источник заразы: «Совершенный код» Макконел. Вложение:
|
Автор: | Валерий Лаптев [ Четверг, 23 Июль, 2009 10:23 ] |
Заголовок сообщения: | Re: Народные ополченцы изобрели новый способ кодить |
Вот так доверять авторитетам. И на принципы Вирта нужно смотреть критически. ![]() |
Автор: | Сергей Губанов [ Четверг, 23 Июль, 2009 10:41 ] |
Заголовок сообщения: | Re: Народные ополченцы изобрели новый способ кодить |
Уж не пустомелю-ли Макконела Вы авторитом назвали? |
Автор: | Валерий Лаптев [ Пятница, 24 Июль, 2009 09:56 ] |
Заголовок сообщения: | Re: Народные ополченцы изобрели новый способ кодить |
Сергей Губанов писал(а): Уж не пустомелю-ли Макконела Вы авторитом назвали? Да. В сишной среде он - авторитет. Жаль, я не видел этого примера раньше - воткнул бы некоторым своим ученикам о доверии к авторитетам. Я уже спорил с ними по некоторым местам макконелла, но такого даже предположить не мог! |
Автор: | Alexey Veselovsky [ Пятница, 24 Июль, 2009 10:26 ] |
Заголовок сообщения: | Re: Народные ополченцы изобрели новый способ кодить |
А конструктивная критика будет? |
Автор: | Валерий Лаптев [ Пятница, 24 Июль, 2009 10:36 ] |
Заголовок сообщения: | Re: Народные ополченцы изобрели новый способ кодить |
Использовать конструкцию цикла вместо if - это абсолютный игнор читабельности. Понятно, что и микроскоп можно вместо молотка использовать... |
Автор: | Vlad [ Пятница, 24 Июль, 2009 10:52 ] |
Заголовок сообщения: | Re: Народные ополченцы изобрели новый способ кодить |
Валерий Лаптев писал(а): Использовать конструкцию цикла вместо if - это абсолютный игнор читабельности. Понятно, что и микроскоп можно вместо молотка использовать... Да, да, даже я (Vlad) говорю: пример крайне хреновой читабельности ![]() |
Автор: | slava [ Пятница, 24 Июль, 2009 11:19 ] |
Заголовок сообщения: | Re: Народные ополченцы изобрели новый способ кодить |
Это очень распространненый код "опытных" програмеров. Начинающие пишут так: Цитата: while (true){
... if (...) break; ... if (...) break; ... break; } |
Автор: | Валерий Лаптев [ Пятница, 24 Июль, 2009 11:42 ] |
Заголовок сообщения: | Re: Народные ополченцы изобрели новый способ кодить |
Я вообще не понимаю, зачем цикл использовать. А для последнего варианта в КП есть LOOP. |
Автор: | Alexey Veselovsky [ Пятница, 24 Июль, 2009 14:17 ] |
Заголовок сообщения: | Re: Народные ополченцы изобрели новый способ кодить |
Т.е. проблема лишь в несколько худшей читабельности? |
Автор: | slava [ Пятница, 24 Июль, 2009 14:24 ] |
Заголовок сообщения: | Re: Народные ополченцы изобрели новый способ кодить |
LOOP здесь ни причем, но вложенные if народу не нравятся. Из "той же оперы": Код: try{
if (...) throw something; ... if (...) throw something; ... }catch (something){ ... } |
Автор: | bohdant [ Пятница, 24 Июль, 2009 15:20 ] |
Заголовок сообщения: | Re: Народные ополченцы изобрели новый способ кодить |
а не лучше ли выделить код в процедуру и делать при определенных условиях return? я так иногда делаю и вроде все и наглядно, правда немного времени больше тратится на вызов и возврат (если компилятор не поддерживает inline процедуры) |
Автор: | slava [ Пятница, 24 Июль, 2009 15:28 ] |
Заголовок сообщения: | Re: Народные ополченцы изобрели новый способ кодить |
Ну и какая разница break с середины или return? Деление на процедуры и вложенные if позволяют все это разрулить. Но C-шники не любят делить на функции. Вложенных функций нет. Не вложенную (даже private) -- вроде как нужно объявить в h-файле. После этого придется перекомпилировать "бог знает что". Да еще и source control мешает. Короче легче наколбасить "такое". |
Автор: | Сергей Губанов [ Пятница, 24 Июль, 2009 18:37 ] |
Заголовок сообщения: | Re: Народные ополченцы изобрели новый способ кодить |
Если кто-то вдруг что-то не сразу правильно понял, то на всякий случай скажу это явно... Приведённый в первом сообщении этой ветки код всегда может (и должен) быть приведён к следующей цепочке: Код: ЕСЛИ ... ТОГДА
... ИНАЧЕСЛИ ... ТОГДА ... ... ... ИНАЧЕСЛИ ... ТОГДА ... ИНАЧЕ ... КОНЕЦ |
Автор: | Vlad [ Пятница, 24 Июль, 2009 19:19 ] |
Заголовок сообщения: | Re: Народные ополченцы изобрели новый способ кодить |
slava писал(а): Ну и какая разница break с середины или return? Большая. С return код будет нагляднее кучи if/else'ов. slava писал(а): Деление на процедуры и вложенные if позволяют все это разрулить. Вложенные if обфусцируют код не хуже "таких" циклов. Plain is better than nested - см. дао питона ![]() slava писал(а): Но C-шники не любят делить на функции. Я вас умоляю... ![]() slava писал(а): Вложенных функций нет. Не вложенную (даже private) -- вроде как нужно объявить в h-файле. Вы заблуждаетесь. |
Автор: | Vlad [ Пятница, 24 Июль, 2009 19:20 ] |
Заголовок сообщения: | Re: Народные ополченцы изобрели новый способ кодить |
Сергей Губанов писал(а): Если кто-то вдруг что-то не сразу правильно понял, то на всякий случай скажу это явно... Приведённый в первом сообщении этой ветки код всегда может (и должен) быть приведён к следующей цепочке: Может, но не должен ![]() ![]() |
Автор: | Илья Ермаков [ Пятница, 24 Июль, 2009 19:44 ] |
Заголовок сообщения: | Re: Народные ополченцы изобрели новый способ кодить |
Просто у народа логико-фобия. ![]() |
Автор: | Сергей Губанов [ Пятница, 24 Июль, 2009 21:44 ] |
Заголовок сообщения: | Re: Народные ополченцы изобрели новый способ кодить |
Return из середины процедуры, кстати, тоже всегда может (и должен) быть преобразован в цепочку ЕСЛИ-ИНАЧЕ-ЕСЛИ. Сегодня на работе отрефакторил две процедуры говнокода (каждая была по несколько сотен строк и насыщенна под завязку return-ами из середины). Теперь каждая из этих процедур выглядит навроде следующего: Код: void F (...) Обратите внимание, что никаких вложенных if-ов здесь нету.
{ ... if (a(...)) { b(...); } else if (c(...)) { d(...); } else if (e(...)) { f(...); } else if (g(...)) { h(...); } } |
Страница 1 из 2 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |