Pull to refresh

Comments 21

Так у меня на сименсе спошная функциональщина, да еще и реалтайм!

Первый пример показателен тем, что в нём первая императивная реализация читается легче, чем "улучшенная" функциональная.

В этом есть доля правды :)
Каждый выбирает свой стиль

Главная заповедь, которую следует помнить функциональному программисту: "Программы делаются только и исключительно ради побочных эффектов".

Функциональное ядро, императивная оболочка

В своё время точно так же носились с ООП, как единственно правильным стилем, а до него еще что-нибудь было и лет через 10 будет (а может вернутся к нему, зумеры снова переоткроют что-то с умным видом. Это всё замануха для нового, неискушённого знанием истории поколения.

Ну так и расклад тот же, что с ООП: если ты его освоил и разумно используешь – ты можешь писать программы проще и надёжнее. А если поверил, что это silver bullet и стал пихать во все дыры – твой код может превратиться в тыкву.

Не знаком со свифтом, но ежели в нем условный .map() или .filter() не написан через хвостовую рекурсию с возвратом значения, то скорее всего он написан через for, который таки имеет состояние, к тому же мутируемое. Функции-то конечно скорее чистые, чем нет, однако же функциональная парадигма это в первую очередь про отказ от состояния и мутаций.

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

А если написан через хвостовую рекурсию, но компилятор её оптимизировал в цикл – это всё равно неправославно?

Не знаю, не мне судить. Я адепт быдлокода. Это было скорее про то, кто и насколько привержен трушности парадигмы.

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

P. S. По моему скромному опыту ни разу не встречался с тем, чтобы компилятор оптимизировал хвостовую рекурсию, да и вообще любую рекурсию в цикл и, честно говоря, даже не подозревал о подобных кейсах. Видимо по причине того, что я не часто использую рекурсии и не знаю ASM и машинный код, чтобы увидеть, что же там в итоге получится. Пойду почитаю что ль, спасибо, что подтолкнули.

Для функциональных языков оптимизация хвостовой рекурсии в цикл – мастхэв (и гуру больно бьют тех, кто использует просто рекурсию там, где можно хвостовую), для C++ – сложно, для Питона, если я правильно помню, Гвидо от неё сознательно отказался по каким-то своим причинам.

Перевод на человеческий:

- map: обработай каждую штуку;

- filter: убери лишнее;

- reduce: собери все в одну кучу.

Принципиальная ошибка.

Следует читать так:

Перевод на человеческий:- map: каждая штука рбработанна

filter: убрано лишнее;- reduce: собрано в одну кучу.

Зачем здесь эта GPTщина? Автор, самостоятельно написать статью, в своём стиле, - слабО?

Если в Интернете любят обсирать, то на хабре любят обсирать с умным видом :)
Статья в 2-х словах рассказывает начинающим, что такой стиль вообще есть. В ней нет пропаганды этого стиля, нет сравнения с другими, нигде не написано, что его нельзя применять с ООП и т.д. Нравится такой подход, он применим к твоему проекту - используй.

Местами мне кажется, что ИТ сообщество хуже ворчливых бабок на лавке...

Перевод на человеческий:- map: обработай каждую штуку;- filter: убери лишнее;- reduce: собери все в одну кучу.

так map, filter, reduce это же просто функции, их кто-то должен написать... то есть ФП это программирование для тех, для кого написание функций map, filter, reduce это магия, получается. Получается ФП это такая мечта о программировании без программирования, получается - как бы ничего нового! В самом начале были мечты о том что физики будут писать программы каким-то своим особенным способом не вспоминая про адреса в памяти, про различия типов памяти как памяти программной и памяти области данных, про адреса, указатели, ссылки, загрузки-передачи данных, ...

Все эти попытки использовать в статье сленг, примитивные сравнения с бытом, постоянные обращения на "ты" выглядят жутко кринжово и выдают GPT

Это все хорошо, но проблема в том, что программы делаются только и исключительно для того, чтобы изменять данные. А еще создавать новые копии так то не дешево.

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

Имеется ввиду неизменение исходных данных. То есть когда надо делать многочисленные выборки (filter), обсчитывать их (map, reduce) и выдать результат.

Это никак не противоречит моему комментарию. Я понимаю, почему неизменные данные хорошо работают. Но программы делаются ради измененных данных (как в прямом, так и в переносном смыслах)

А почему пример randomize так уж плох? Имя функции соответствует поведению, делает всё то же что и функция выше, ничего не меняет)

Потому что, скармливая одно и то же значение, получаешь разные результаты

Sign up to leave a comment.

Articles