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: Народные ополченцы изобрели новый способ кодить

Обнаружен источник заразы: «Совершенный код» Макконел.
Вложение:
mc.png
mc.png [ 79.77 КБ | Просмотров: 12719 ]

Автор:  Валерий Лаптев [ Четверг, 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: Народные ополченцы изобрели новый способ кодить

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


Может, но не должен :) Давайте возродим ветку про return из середины :)

Автор:  Илья Ермаков [ Пятница, 24 Июль, 2009 19:44 ]
Заголовок сообщения:  Re: Народные ополченцы изобрели новый способ кодить

Просто у народа логико-фобия. :)

Автор:  Сергей Губанов [ Пятница, 24 Июль, 2009 21:44 ]
Заголовок сообщения:  Re: Народные ополченцы изобрели новый способ кодить

Return из середины процедуры, кстати, тоже всегда может (и должен) быть преобразован в цепочку ЕСЛИ-ИНАЧЕ-ЕСЛИ.

Сегодня на работе отрефакторил две процедуры говнокода (каждая была по несколько сотен строк и насыщенна под завязку return-ами из середины). Теперь каждая из этих процедур выглядит навроде следующего:
Код:
void F (...)
{
  ...
  if (a(...))
  {
    b(...);
  }
  else if (c(...))
  {
    d(...);
  }
  else if (e(...))
  {
    f(...);
  }
  else if (g(...))
  {
    h(...);
  }
}
Обратите внимание, что никаких вложенных if-ов здесь нету.

Страница 1 из 2 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/