LINUX.ORG.RU
ФорумTalks

Изучение функционального программирования делает ваш код лучше


1

3

Или нет? У меня есть сомнения, так как во всех коллективах принято писать код согласно определенным конвенциям. Человек, который хочет применить ФП в обычных проектах на примитивных императивных языках без особых средств ФП скорее всего имеет в распоряжении

  • Рекурсия (если есть надежда на хвостовую)
  • Выполнение операций на основе предикатов или трансформирущих объектов.
  • Принятие решений на основе конфигурирующих данных. Как бы точнее выразиться? Например построение небольшого интерпретатора, из нескольких команд.
  • Иммутабельность чем больше тем лучше
  • Попытка работать с объектами как с функциями (частичное применение, или создание предикатов как в п. 2)
  • Еще что-то забыл, дополняйте

Но в большинстве коллективов (С, С++, Java) эти приемы будут восприняты как странные, и более того вообще быдлокодом. И на этом языке он и есть быдлокодом в некоторой мере. Тоесть концепции нормальные, но в соединение со средствами которые делают их простыми и краткими. А на вышеперечисленых ЯП лишь гора if-ов и 100500 объектов с нетривиальным состоянием - конвенция.

Вывод: изучение ФП - расширение кругозора, открытие для себя основаных на ФП инструментов. Не повод его пихать везде или гнуть в эту сторону палку в императивном коде как делают некоторые упоротые.

Ваше мнение?

★★★★★

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

Обычных списков?

не совсем
результатом linq является не список а IEnumrable
Данные были извлечены из нескольких таблиц и XML документа и затем что-то с ними делал.

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

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

Ну я же не написал что неправльно а что не совсем верно. т.е. уточняю

да. и идея этого примера была в том, чтобы показать что linq это весьма простой инструмент и получаемый код гораздо проще и понятнее того что пришлось бы писать на Java.
Сравнение со Scala, Lisp, F#, OCaml, ML, Javascript не подразумевалось.

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

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

У меня есть пара проектов для Андроеда, хочу вставить код на Scala.
Подскажите - как?

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

результатом linq является не список а IEnumrable

Мне интереснее то, что было на входе. Если тоже IEnumerable, то это stark fucking magic; со списками еще можно придумать какую-то оптимизацию, дающую серьезный выигрыш.

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

А вот чего нет в .NET, так это трейтов, миксинов, имплиситов, ad-hoc полиморфизма, вычислителя монад, экстракторов, паттерн матчинга и т.д.

вычислителя монад

В F# есть аналог.

паттерн матчинга

В F# есть.

Остальные слова для меня непонятный набор буковок, если расшифруешь (лучше с примером кода), то скажу есть или нет.

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

IEnumerable как раз подразумевает последующую оптимизацию как минимум за счёт ленивого исполнения, так как реальный запрос к базе данных учтёт наложенные в последствии условия и извлечёт только нужные данные.
У меня в том проекте внезапно начал падать SQL при переходе на реальный XML который был около 150мб.
Оказалось что linq тупо слал все ключи как параметры.
Я тогда только с этим самым linq начал разбираться.

ps
В понедельник новый проект на Java начинаем я про Scala заикнулся - восприняли как остроумную шутку.

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

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

В данном случае оптимизация будет просто делегирована оптимизатору СУБД (который будет оперировать понятиями вроде selectivity и cardinality, которых в ленивых структурах данных просто нет).

У меня в том проекте внезапно начал падать SQL при переходе на реальный XML который был около 150мб.

Похоже, на входе всё-таки не списки.

В понедельник новый проект на Java начинаем я про Scala заикнулся - восприняли как остроумную шутку.

Ты сам выше рассказал о стадах, которые не поймут.

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)

[маргиналы]хфункциональщина][Лугоффский]Боян, однако...

Из архивов ЛОРа

[ЖЖ] Луговский

«Как раз после того как это существо выперли из библиотеки занюханного провинциального НИИЧАВО, откуда он на весь LOR тявкал, он отчаянно пытался найти работу программистом. К нам вот приходил на собеседование, претендовал на роль Java-программиста. Junior, конечно же. Это был цирк! Попросил его написать метод, разворачивающий строку, классическая такая проверка на вшивость. Мелкое тощее горбатое существо с рожей и голосом профессионального алкаша бубнило и булькало чтото с полчаса, ничего родить не смогло, потом начало втирать, что вот зато в мегаязыке Хаскель строки сделаны односвязными списками и что это типа тру, а все остальное ламеризм. Еще чтото втирал что кулькакеры на Вакс использовали мегаформат для строк ASCIID, а ламеры не поняли и теперь везде позорный ASCIIZ (внимание: собеседование вообще про Java было). Угадайте - мы его взяли?

Говорят, оно все еще ищет работу. Хотите посмеяться, приглашайте его на собеседование. Баксов на $500, иначе решит, что прикалываются.»

Bioreactor ★★★★★
()

я какое-то время после небольшой дозы хаскеля писал на яве так: класс Foo с без методов с public final полями и большой такой класс FooOperations, в котором куча статических методов для изменения состояния объектов класса Foo. В особо запущенных случаях(когда создание объекта класса foo должно было проходить через валидацию) создавалась фабрика, а у класса foo конструктор становился private.

Через неделю понял, что горожу огород.

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

Имхо, без сахара не съедобно. А про такую интерпретацию монад я знаю, у Томаса Петричека читал.

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

Похоже, на входе всё-таки не списки.

Возможно. Давно было. Глубоко копать. Ятогда только со всем этим разбирался.

Ты сам выше рассказал о стадах, которые не поймут.

Мы не оутсорсная контора.
Мы сами оутсорсим иногда.
Правда все меньше и меньше, так как оказалось что затраты на QA часто превышают затраты на разработаку.
QA в Торонто сечас востребованнее программиста.

Т.е. здесь в среднем на порядок лучше.
НО!
Есть такое понятие как поддержка. Там будут сидеть среднестатистические Java программисты.

Опять таки, паралельный тим вместо 1 года писал проект на Groovy 3 года и пока ещё не сдали до конца и возможно оно таки сдохнет.

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

grim ★★☆☆
()
Последнее исправление: grim (всего исправлений: 1)
Ответ на: комментарий от rival

Давно было, не помню. Кажется, это была ходовая фраза в Фидо.

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

Ты сам выше рассказал о стадах, которые не поймут.

Мы не оутсорсная контора.
Мы сами оутсорсим иногда.

Я помню, что ты говорил об аутсорсинговых стадах %).

Есть такое понятие как поддержка. Там будут сидеть среднестатистические Java программисты.

ВотЪ. Снова немытые массы навязывают свое мнение %)

паралельный тим вместо 1 года писал проект на Groovy 3

Groovy - динамически типизированное говно :)

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

ВотЪ. Снова немытые массы навязывают свое мнение %)

Немытых масс не быват.
Бывают ленивые.

А чего им напрягаться за свои $60к в год.
Дом выплачен или вообще от дедушки остался - зачем эти напряги?

Это эмигрантам приходится колбасить, так как кредит на дом является серьёзным стимулом его выплать побыстрее.

Местные тоже часто трудяги, но в IT почему-то редко.

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

grim ★★☆☆
()
Последнее исправление: grim (всего исправлений: 1)
Ответ на: комментарий от CARS

ибо почти все мировые эксперты признали

Списочек фамилий можно? И, желательно, сами признания.

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

Извини, лично в дверь не стучал, не спрашивал. Тебя интересовало можно ли? Можно. Вообще непонятно зачем закрываться в маленьком мирке где Scala никто не использует. Возвращайся в настоящий

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

Эти вы к чему?
К тому что Оракл чморит Апачей а те сосут?
Так ведь нет.
Ушли из JCP.

Кстати, там есть опровержение вашего вранья

Сходи на Apache, на любую другую опенсорс foundation, там .NET и не пахло.

Есть проекты на С#

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

А у меня где хоть слово о .Net?

Писаешь кипятком в каждой строчке.

Поздравляю вас, господин соврамши.

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

Вообще непонятно зачем закрываться в маленьком мирке где Scala никто не использует.

:)
Вы бредите и выдаёте свои фантазии за реальность.
А реальность такова:
http://jobsearch.monster.com/jobs/?q=scala&cy=us
73 Scala jobs matched your search
т.е. за последние годы вывесили 73 работы.
10 лет языку.

тот-же Ruby выдаёт 1,000+ Ruby jobs matched your search
Даже Groovy выдаёт 168 Groovy jobs matched your search несмотря на то, что моложе.
Не говоря о популярных технологиях, которые выдают 500 новых работ в день

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

его всё-равно почти никто не читал

Чето я в последнее время очень мало видел плюсовиков, не читавших Modern C++ Design.

DELIRIUM ☆☆☆☆☆
()
Ответ на: комментарий от grim

К тому что Оракл чморит Апачей а те сосут?

Ты видел количество проектов? Или слепой?

Есть проекты на С#

Ну если бы не было - это одно. Но они есть и их количество по сравнению с Java символизирует.

А реальность такова:

http://www.scala-lang.org/node/1658

И то что Scala меньше чем Java или C# - не проблема. Если твой C# не удастся задеплоить на какой-нибудь нормальный cloud то ты приехал, разве что чудом туда удастся засунуть догоняющую поделку Mono. А Java и Scala могут гетерогенно работать на самой популярной VM в мире.

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

К тому что Оракл чморит Апачей а те сосут?

Ты видел количество проектов? Или слепой?

Это вы к чему?
К тому что Оракл чморит Апачей а те сосут?
Мазохисты?

Ну если бы не было - это одно.

Совсем недавно вы соврали что ими там и не пахнет и я вам поверил.
Теперь буду с вашими высказываними осторожнее.

И то что Scala меньше чем Java или C# - не проблема.

Как раз проблема и я уже 5 раз писал почему.
Пока не будет поддержки от Оракла, как к примеру имеют VB.Net, С#,F#,Boo от проекта mono язык обречен, так как завтра выйдет к примеру Ceylon и о Scala забудут и те кто вложил средства к развитие инфраструктуры на нем окажутся не у дел, так как не удастся набрать программистов в группу поддержки и придётся все переписывать обратно на Java или Ceylon.

Если твой C# не удастся задеплоить на какой-нибудь нормальный cloud то ты приехал

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

А Java и Scala могут гетерогенно работать на самой популярной VM в мире.

Хехе.
Виже уже не «самой кроссплатформной» :)
Приятно что хоть чему-то вас нaучил :)

grim ★★☆☆
()
Последнее исправление: grim (всего исправлений: 3)
Ответ на: комментарий от grim

Виже уже не «самой кроссплатформной» :)

Естественно самой кроссплатформенной. Потому что в отличии от .NET на всех система работает production ready JVM, а не догоняющий клон .NET

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

Естественно самой кроссплатформенной.

LOL
покажете для iOS или для Андроид ?

Потому что в отличии от .NET на всех система работает production ready JVM

Может вспомните о том, что Java вышла на первое место как средство распространения малвари?

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

Да, насчет кросплатформности,
Ещё подскажите о WP7
как для нее на Java писать

Это как никак ВСЕ популярные мобильные платформы.
И ни на одной Java от Оракла не работает.

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

Андроид

Java для андроид - естественно, в первую очередь. А порт iOS сейчас сейчас выпускает Google. Но да, ладно, этот порт такая же говняная поделка как Mono

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

WP7

На такие ненужные непопулярные мелочи увы нету. Что правда то правда

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

андроидовская жаба не оракловская. не прошлатесты.
гугл на суде заявлял что это не жаба а адльвик

А порт iOS сейчас сейчас выпускает Google.

похоже на вранье.

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

Врать у нас только ты тут нанялся. Доказывать очевидную истину что на 2012 год Java - самая переносимая платформа, очевидный тупняк и троллинг.

Я говорил о j2objc, просто, извините, допустил о печатку, порт Java кода «на» iOS, а не порт iOS. Какой смысл портировать iOS на Java?

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

Я говорил о j2objc, просто, извините, допустил о печатку, порт Java кода «на» iOS

Java код траслируется в objective-c а не портируется на iOS
Как вы себе представляете портирование Java кода намiOS без java?

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