LINUX.ORG.RU

Функциональная парадигма

 , ,


2

7

Что-то в последнее время начали хайпить функциональное программирование. Мол, стиль со взглядом в будущее, распараллеливание, оптимизация, замена устаревшему ООП, который не способен идти в ногу с современными процессорами. Есть ли здесь люди, которые пишут на Haskell или тому подобных языках? Есть ли профит переходить на ФП? Или мультипарадигмость С++ и Java исправят ситуацию?


Ответ на: комментарий от unt1tled

Ты больной? Для скора я могу просто написать «Не нужно», как тут пол форума делает. Вот тебе только что за твой тупняк тоже скор капнул. Ну ладно как хочешь, я по теме поговорить хотел

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

Столько погашенных звезд и он хотел в development поговорить по теме. Они какбы намекают нам «это мутант 80 lvl, его мнение очень важно», понимаешь? Клуб там --->

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

Ты понимаешь сейчас что я себя веду адекватно, а ты нет? Говорю строго по технической теме, развернуто. Или не понимаешь этого факта?

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

Нафига риторические вопросы в /dev? Другой персонаж как-то страниц 30 выяснял, что такое лямбды и зачем. ЧСХ, так и не понял.

У программеров тоже свои зоны комфорта.

anonymous
()
Ответ на: комментарий от vertexua

Проекция же. Его оригинальный комментарий и был минимально развёрнутым «не нужно», и это был первый его комментарий вне токсов за день.

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

а у тебя вся программа только лямбды считает?

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

Вот тебе Scala - words.map(_.ToLowerCase).filter(_.startsWith(«a»)).groupBy(_.length)

Так не про скалу речь, запиши в какомнибудь хачкиле то же самое: groupBy length . filter (flip sartsWith «a») . map toLowerCase $ words

anonymous
()
Ответ на: комментарий от utf8nowhere

Вот эта «поддержка» через лямбды и будет тормозить в 10-1000 раз по сравнению с ленивым языком.

С чгео бы ей тормозить? Там же будет точно такая же оптимизация, как в ленивом языке. Один и тот же код.

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

Так не про скалу речь

Почему не о Scala речь? В одних языках все читаемее, в других - нет. Выберем худшие?

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

Какая?

Какая и в ленивом языке.

anonymous
()
Ответ на: комментарий от i36_zubov

Вот я напишу, что ты — «馬鹿野郎», а ты скажешь

пц абракадабра какая. на этом вообще можно писать предложения то?

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

groupBy length . filter (flip sartsWith «a») . map toLowerCase

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

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

Читается много лучше и проще императивный дрисни.

Вообщето намного хуже, так как приходится парсить кучу синтаксического мусора. В «императивной дрисне» - ничего лишнего нет.

Сразу понятно, чего хочет добиться автор: привести к нижнему регистру

А вот и ошибка! Автор не хотел приводить к нижнему регистру. Его цель - исключительно отфильтровать слова, начинающиеся на «а» в case-insensitive манере.

anonymous
()
Ответ на: комментарий от Freyr69

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

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

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

Вообщето намн ого хуже, так как приходится парсить кучу синтаксического мусора. В «императивной дрисне» - ничего лишнего нет.

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

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

Кстати, flip там лишний. Надо было бы вот так:

filter ("a" `isPrefixOf`)

Красота)

Waterlaz ★★★★★
()
Ответ на: комментарий от ya-betmen

С тем же успехом можно было на хаскеле сделать

filter noStartsFromA
И любую другую задачу решать через
zdelaiMneVseHoroshoUtilityFunction

Waterlaz ★★★★★
()
Ответ на: комментарий от ya-betmen

Utils.filter(words, Filters.NO_STARTS_FROM_A);

Ну вот и обосрамс. В его коде все функции стандартные, а предикаты конструируются на месте, то есть у него весь код на ладони. У тебя же бажный самописный императивный предикат, неизвестно где и как реализованный. Ну и функция твоя не делает того, что делает пример на хаскиле (где приведение к нижнему регистру? где группировка?). Ну и написано в том же функциональном стиле, только уродливее и не все.

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

В его коде все функции стандартные

Хвастаешься толщиной стандартной либы, ок.

а предикаты конструируются на месте, то есть у него весь код на ладони

Только понятнее он от этого не становится. За то 100500 реализаций одного утилитного метода разной степени бажности и 100500 багов соответственно.

где приведение к нижнему регистру

ок

result = prepare(words);

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

Только понятнее он от этого не становится.

Понятнее для кого? Для каждого, кто хотя бы часа два уделил хаскелю, этот код будет понятным и предельно прозрачным.

Waterlaz ★★★★★
()
Ответ на: комментарий от ya-betmen

Хвастаешься толщиной стандартной либы, ок.

Забавно тут то, что стандартная либа у хаскеля нифига не толстая. Более того, из тех функций лишь «toLower» и «words» — функции над строками.

Waterlaz ★★★★★
()
Ответ на: комментарий от ya-betmen

А у некоторых даже строк, что теперь?

Не распарсил.

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

плюсохейтеры

При чем тут плюсы, если речь шла про императивную парадигму и ни слова про кресты? Тебя что, плюсохейтеры обидели? Где они тебя трогали? Я не писал про кресты, но специально для тебя буду везде писать «внимание, триггеры: императивная парадигма, кресты».

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

Если тебе смешно от этого смешно, то у тебя странное чувство юмора.

ya-betmen ★★★★★
()
Ответ на: комментарий от i36_zubov

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

О! Раз ты уж вспомнил плюсы, напиши эквивалент на плюсах, пожалуйста.

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

в функциональном стиле можно писать много включая с++, java, js и т.д.

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

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

На c++ почти невозможно писать в функциональном стиле. Теоретически, конечно, можно, но на практике...

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

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

ЗЫ напиши уже код на с++, а?

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

ЗЫ напиши уже код на с++, а?

Накину г...на (Rust) на вентилятор.

vec.iter()
   .map(String::to_lower)
   .filter(|s| s.starts_with("a"))
   .group_by(|a, b| a.len() == b.len())
anonymous
()

Извиняюсь за «не нужно» Но столько говна друг на друга вывалили, давно не видал.

imbaaa
()
Последнее исправление: imbaaa (всего исправлений: 1)
Ответ на: комментарий от Waterlaz

а зачем мне это делать?

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

i36_zubov
()
Ответ на: комментарий от Freyr69

Ну и функция твоя не делает того, что делает пример на хаскиле (где приведение к нижнему регистру? где группировка?).

Она и не должна к нижнему регистру приводить. Просто так проще на хачкиле написать - потому и написано неправильно.

anonymous
()
Ответ на: комментарий от Waterlaz

этот пост вроде как про некое «функциональное программирование», напомню для тех, у кого не весь текст виден в браузере:

стиль со взглядом в будущее, распараллеливание, оптимизация, замена устаревшему ООП, который не способен идти в ногу с современными процессорами

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

давайте я вам раскрою небольшой секрет: ЯП существуют для того, чтоб на них было удобно писать программы. в каждом ЯП есть свои подходы, которые его создатели туда заложили, есть наработаные практики. Иногда язык становится слишком тесен, и тогда его расширяют(как c++11,14,17), или придумывают новый ЯП.

Так вот, я хочу понять: какие плюшки дает лютое аскетическое программирование в функциональном стиле? ну кроме того, что школьники могут друг перед другом однострочной абракадаброй понтоваться, или о гегеле поспорить.

цацкель например существует четверть века, на семь лет младше С++, а с учетом глючности первых компиляторов С++ эти семь лет не такие уж и семь. и что мы имеем?

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