LINUX.ORG.RU
ФорумTalks

Алгоритмическое


0

1
while {
     ...
     while {
     ...
          while {
          ...
               for {
               ...
                    for {
                    ...
                         for {
                         ...
                         if, then, else, рекурсия, рекурсия, рекурсия!111

Вот типичный пример сортировки отчета.

Идет время, меняются проекты, но неизменно есть циклы с вложенностью 100500, которые рекурсивно вызывают циклы вложенностью 100500 в 20 параллельных потоках. И ни единого комментария.

Причем, судя по сложности обрабатываемых данных, пишут далеко не быдланы... Но боже, зачем так? Почему из всех способов выбирается этот - самый сложный, запутанный, неочевидный, недебажащийся?

Черт, что творится в мозгах людей, пишущих такие алгоритмы? Может, это какая-то специальная религия?

Лор, покарай их всех...

★★★★☆

Без полного кода не понятно. Вдруг там код хрустальной чистоты и суть его проста, как e=mc^2. Но сложность задачи сделала из этого подобие ОТО.

Tark ★★
()

Потому что отчет нужен был вчера, а эти ваши рекурсии среднему человеку сложнее проектировать и дебажить чем 100500 циклов, при жестком ограничении на вложенность.

r_asian ★☆☆
()

кстати, а как это можно заменить?

aiqu6Ait ★★★★
()

Потому что 100500 циклов могут оказаться _очевиднее_, чем код, разбросанный по нескольким функциям, каждая из которых не делает ничего определенного, что можно описать в человеческих понятиях.

Deleted
()

А может, они подумали-подумали, и у них получилось, что так проще всего?

proud_anon ★★★★★
()

Почему из всех способов

Из каких?

рекурсия, рекурсия, рекурсия!111

Ой ли? В 100500 циклах - рекурсия? Расстрелять.

Xellos ★★★★★
()
Ответ на: комментарий от dk-

Когда объект, функция или какая-то еще сущность начинает состоять из более чем 5+-2(порог восприятия) подсущностей, её нужно нещадно разбивать на более мелкие кусочки.

Документация и комментарии. И весь алгоритм целиком, и отдельные вызовы методов и функций, и отдельные неочевидные строки.

Если какие-то вещи можно отсортировать или как-то еще обработать на уровне запроса к базе данных или ORM - нужно юзать это. В конце концов, для этого они и придумывались, чтобы не заставлять писать велосипеды из вложенных цыклов.

Еще есть стандартные шаблоны проектирования (посмотреть можно в википедии, или в книжках - тут объяснять слишком долго).

Короче, вполне можно это написать человекочитаемо. Сейчас же у меня на экране нечто, от чего хочется пойти и переустановить Шиндовшс.

stevejobs ★★★★☆
() автор топика
Ответ на: комментарий от Deleted

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

значит декомпозиция была проведена неверно.

альтернативная версия: значит ты делаешь что-то нечеловеческое, т.е. нафиг не нужное. Решение - не делать этого вообще.

stevejobs ★★★★☆
() автор топика
Ответ на: комментарий от stevejobs

ты делаешь что-то нечеловеческое, т.е. нафиг не нужное. Решение - не делать этого вообще.

Идеализм детектед :)

На самом деле, очевидность алгоритма бывает важнее идеальности реализации.

Deleted
()
Ответ на: комментарий от temporary

Функции с пояснениями ?

Специализированный язык, который все эти циклы скроет/позволит оптимизировать, в идеале встроенный в основной язык.

Begemoth ★★★★★
()
Ответ на: комментарий от Begemoth

Блин, ну вот в Жаве есть возможность писать компараторы для коллекций.
И вместо того, чтобы самому сортировать пузырьком, можно написать компаратор и заюзать стандартную сортировку.

Но этим почему-то никто не пользуется. Все пишут долбаный пузырёк.

stevejobs ★★★★☆
() автор топика

Мне кажется что вся проблема в заказчиках и руководстве которое общается с заказчиками и идет у них на поводу.
Например, из самого запомнившегося. В одном проекте один заказчик хотел выводить фамилию и имя в аперкейсе, один в камелкейсе, следующий фамилию в аперкейсе а имя с саглавной. Ну не могу я поверить что эти требования порождены какими-то реальными производственными нуждами.

urxvt ★★★★★
()

> Почему

Потому что в этом вашем $LANGNAME нет поддержки нормальных итераторов, контейнеров, фильтров, методов map и reduce? И остаётся городить 100500 вложенных циклов, в лучших традициях беспощадной императивщины.

geekless ★★
()
Ответ на: комментарий от geekless

нормальных итераторов, контейнеров,

Google Guava, Commons Collections, etc

фильтров, методов map и reduce

QueryDSL, lambdaj, jedi, etc

чего из этого тебе не хватает? ;)

stevejobs ★★★★☆
() автор топика
Ответ на: комментарий от stevejobs

Ну значит просто ваших программистов никто не научил программировать.

geekless ★★
()

Омг. Стараюсь представить, для чего может понадобиться ТАКОЕ, но не могу.

Причем, судя по сложности обрабатываемых данных, пишут далеко не быдланы... Но боже, зачем так? Почему из всех способов выбирается этот - самый сложный, запутанный, неочевидный, недебажащийся?

Черт, что творится в мозгах людей, пишущих такие алгоритмы? Может, это какая-то специальная религия?

Мне кажется, это все из-за привычки придумывать алгоритм по ходу кодирования. Сначала была рекурсивная функция с двумя for'ами, потом к ним добавились два while'а, а потом пошло-поехало...

kermzyxer
()

Ну вообще, если пяток табличек в sql сджойнить с условиями всякими, а то и подзапросами, то что-то вроде такого получится. Этот код случайно не занимается работой сервера СУБД?

unC0Rr ★★★★★
()
Ответ на: комментарий от stevejobs

> Но этим почему-то никто не пользуется. Все пишут долбаный пузырёк.

Если они действительно сортируют пузырьком, а не какой-нибудь вставкой, то да, они суровы. Но на малых массивах quicksort не обязательно лучший выбор. И потом, может быть «стандартная» сортировка их библиотеки нестабильна, а им нужно сортировать стабильно. Т.е. я бы не решился сходу критиковать выбор, может на то есть причины...

smh ★★★
()
Ответ на: комментарий от stevejobs

>Но этим почему-то никто не пользуется. Все пишут долбаный пузырёк.

Блин, я чуть не усрался, когда это прочитал!

Zenom ★★★
()
Ответ на: комментарий от stevejobs

>состоять из более чем 5+-2(порог восприятия)
вообще-то, _7_+/-2

wingless
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.