From: Алексей
Date: 2021-09-14 09:57:45Z
Увы, на ОО-языках можно написать такой же код. С тех пор, как кто-то придумал правило, что текст функции непременно должен влезать в экран, читать код стало намного труднее. Потому как то, что раньше было записано сплошняком, последовательно, теперь нарублено в салат из крошечных функций, которые вызывают и перевызывают друг друга. Буквально:
1. Чтобы узнать, сколько нужно воды, см. п.8
8. Количество воды зависит от количества муки (п.16) и масла (п.4) либо способом п.5, либо способом п.7 в зависимости от требуемого объёма теста (определяется в п.2).
Я понимаю, когда в функции выносится код, выполняемый многократно. Но не когда на функции режется то, что в рамках программы больше ниоткуда, кроме текущего места, не вызывается! Когда каждый блок if вынесен в отдельную функцию, это жесть (учитывая, что возможность сворачивания блоков есть в любом текстовом редакторе, кроме разве что Блокнота).
Так и это ещё не всё. Ведь какой-то вредитель авторитетно сказал, что композиция лучше наследования, а все остальные подхватили. Ну, и теперь у нас больше нет чёткой иерархии классов/объектов, а есть динамическое связывание. Фактически, структура программы собирается из кусочков прямо в рантайме, и вот тут понять алгоритм работы простым изучением кода становится адски сложно. Без отладчика практически нереально узнать, что, чёрт возьми, попадает в данные переменные или параметры, и даже какого оно типа. Точно так же сложно понять, при каких вообще условиях выполнится данный конкретный кусок кода (и выполнится ли он вообще), потому что у нас тут всюду косвенные вызовы, и простым поиском по имени функции/метода вы никогда никакого вызова не найдёте.
From: Sergey Matveev
Date: 2021-09-14 10:06:13Z
*** Алексей [2021-09-14 12:57]:
>Увы, на ОО-языках можно написать такой же код.
Согласен. Поэтому ООП тоже идёт нафиг :-)
На чём угодно можно написать непонятный код -- тут никуда не денешься.
Но на функциональщине я только простейшие вещи видел чтобы было ясно и
понятно как их написать (хотя я тот ещё функциональщк :-)). Для
функциональщины нужно мышление которое не каждому дано, а для ООП нужно
много квалификации и опыта.
>С тех пор, как кто-то придумал правило, что текст функции непременно должен влезать в экран, читать код стало намного труднее. Потому как то, что раньше было записано сплошняком, последовательно, теперь нарублено в салат из крошечных функций, которые вызывают и перевызывают друг друга. Буквально:
Ага, встречал такое. Полный ужас. Вот что значит бездумное применение
советов и практик. Как-то я на полном серьёзе видел код где требовалось
около двадцати переходов по функциям/методам чтобы добраться до
настоящего действия, что действительно там под капотом будет выполнятся.
Ну типа .AddResult() какой-то был, и чтобы понять что оно на самом деле
вырождается в self.result.append() -- нужно было под двадцать переходом
по методам проделать.
>Ну, и теперь у нас больше нет чёткой иерархии классов/объектов, а есть динамическое связывание. [...]
Тоже верно. Бездумное применение чего угодно -- всегда плохо закончится.
Я встречал что даже простой self.redis.get() превращался в код на ~200
строк (без docstring-ов), ибо он сделан в лучших традициях и рекомендациях
ООП был.