LINUX.ORG.RU
ФорумTalks

Лямбда-выражения для идиота


2

5

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

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

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

Ясно. Понял, о чем ты. Я вообще вот про это говорил:

Гы. Тогда правильнее такой сборщик мусора назвать free().

free, dispose, delete...

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

>>да и вообще - зачем перегружать простой формализм куда более сложными аналогиями?

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

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

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

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

> Когда-нибудь и ты дорастёшь до понимания, что высокий уровень абстракции сам по себе никому не упёрся.

Надеюсь, это будет не скоро. Мне старческий маразм не нужен.

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

Какой смысл вообще описывать _один_ кусок кода в виде callback, и городить лямбду, если можно написать этот код напрямую?

Нужен именно callback. Напиши «код напрямую».

Зачем нужен callback, если способ обработки данных _один_?

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

Зачем для обработки данных делать calback-функцию, устанавливать ссылку на нее ее в точку, где может вызываться только она и никакой другой код? В чем смысел?

pat_minus
()

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

Также использование лямбд помогает не использовать паттерны типа Стратегия (http://habrahabr.ru/blogs/programming/120375/)

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

P.S. рядом с лямбдами ходит понятие каррирования --- оно также сильно упрощает абстракции.

P.P.S. Рядом с лямбдами ходят языки с автоматическим выводом типов (представьте, что вам не надо указывать тип, а компилятор сам всё понимает с полуслова) и статической проверкой кода, что приводит к тому, что если программа скомпилировалась --- то она не упадет (что важно для промышленного программирования)

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

> Надеюсь, это будет не скоро. Мне старческий маразм не нужен.

Таки конкретный пример ты и не привёл. Что как бы намекает.

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

> Зачем нужен callback, если способ обработки данных _один_?

Потому что используемый API принимает callback. Например, в Gtk так делают.

В чем смысел?

Смысл в том, чтобы увидеть «код напрямую».

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

Своими мыслишками раскинуть-то слабо? Выписываешь костыли из Франции?

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

Но чтобы нащупать плодотворное направление _новой_ мысли - интуиция и аналогия должны работать отменно.

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

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

> Рядом с лямбдами ходят языки с автоматическим выводом типов (представьте, что вам не надо указывать тип, а компилятор сам всё понимает с полуслова) и статической проверкой кода, что приводит к тому, что если программа скомпилировалась --- то она не упадет (что важно для промышленного программирования)

А вот это уже интересно.

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

> Кложура - это когда есть ещё и внутреннее состояние (а ля питоновский генератор).

не верь.

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

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

Ты имеешь ввиду дорастёшь до должности, на которой на проблемы программистов тебе будет наплевать?

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

> Нет, я о том, что человек базарит о каких-то абстракциях, а конкретный пример привести не может.

Если что, функции - это тоже абстракции.

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

> Число - это тоже абстракция, что дальше?

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

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

Реши 3 отдельные задачи. Условия есть список структур типа «человек» вида {name, email, age}.

1. Надо отсортировать список по name.
2. Надо отсортировать список по age.
3. Надо отсортировать список по выбору пользователя - варианты выбора name, email, age передаются в качестве параметра (enum).

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

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

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

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

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

Свой велосипед на коленке фломастером нарисовать слабо?

меня и текущий устраивает, поэтому я его и привёл

Выписываешь костыли из Франции?

ну, может хоть французские элитные костыли тебе помогут

Будто одно другому противоречит.

не противоречит - мешает, причём мешает здорово

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

поясни подробнее, а то помимо того что неясно что ты имел в виду в первой и второй частях своей фразы по раздельности, у тебя ещё и первая со второй не сходится

Но чтобы нащупать плодотворное направление _новой_ мысли - интуиция и аналогия должны работать отменно.

спасибо, Кэп, хоть и ни о чём

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

буль-буль-буль, ещё чуть-чуть покипит и баттхёрт готов

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

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

Хочешь конкретного примера? Ну хорошо, вот из сегодняшнего:

Имеем код на Scala:

for (elem <- someCollection) {
  // Do something with elem
  spawn {
    // Do something with elem in the new thread
  }
}

Тут обнаруживается, что потоков что-то дохера плодится и надо бы выполнять задания в thread pool. Что делать? А просто дописать сверху

import scala.concurrent.TaskRunners.threadPoolRunner

Старый код трогать не пришлось и это хорошо.

Такие фокусы возможны именно благодаря тому, что spawn является частично применённой функцией с неявным аргументом.

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

>Такие фокусы возможны именно благодаря тому, что spawn является частично применённой функцией с неявным аргументом.

Ты садист.

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

>>поэтому я его и срисовал велосипед с чужих коленок

Как будет угодно - тем легче вас отличать.

привязка математических абстракций серьёзно влияет на качество исследований, причём не в лучшую сторону

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

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

во-первых это псевдокод, а во-вторых в c++ в бусте есть лямбды

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

> Никошда бы не подумал, что лямбда есть на C/C++

В си ее и нет, это пример. Да и в Си++ ее обычно нет.

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

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

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

Цитата верная, а аналогии искать полезно. ;)

у меня только один вопрос - для чего эти аналогии искать?

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

Загнал список в БД, составил запрос вида: «SELECT * FROM mytbl order by » нарисовал комбобоксик, который будет мапить ввод и имена полей таблиц (name, age, email), нарисовал контрол вывода полей строк таблицы - ву а ля, задача решена, пользователь счастлив.

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

> привязка математических абстракций серьёзно влияет на качество исследований, причём не в лучшую сторону

что куда привязывают??

напомню, речь идёт о поиске геометрических аналогий

обычно так делают студенты-первокурсники/второкурсники, когда не врубаются в функциональный анализ, например

Придется опять применять «обезьяньи ужимки»: лолшто???

вот эту фразу поясните отдельно, я её не понял

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

Чтобы не придумывать каждый раз все с начала, конечно!
Ведь так твой мозг работает. Это компьютеру все равно, какую информацию в него запихивают.

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

>> есть список структур типа «человек» вида {name, email, age}.

Надо отсортировать список

Загнал список в БД, составил запрос

Ыыыы... ынтерпрайзненько %)

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

>Загнал список в БД, составил запрос вида: «SELECT * FROM mytbl order by » нарисовал комбобоксик, который будет мапить ввод и имена полей таблиц (name, age, email), нарисовал контрол вывода полей строк таблицы - ву а ля, задача решена, пользователь счастлив.

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

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

С недавних пор есть в C++, но пока не вошло в стандарт.

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

>>Каким математикам? Почему не нравится?

Всяким прикафедральным формалистским бесполезным паразитам.

Кому-то холодно от этого или жарко?

Всяким прикафедральным формалистским бесполезным паразитам.

Критика Арнольда упоминается в некоторых источниках.

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

Чтобы не придумывать каждый раз все с начала, конечно!

что Вы собрались там придумывать?

Ведь так твой мозг работает.

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

Это компьютеру все равно, какую информацию в него запихивают.

для домохозяйки ответ сгодится

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

Да, но какова задача - такое и решение. Я не буду писать это всё на окамле, эрланге, лиспе, изобретая этот велосипед, потому что всем и так ясно - что это бред. Следующий пример.

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

>>слил, студентик?

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

В противном случае можно только макать в дерьмо. Но мне и это скучно с тобой делать.

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

>>слил, студентик?

Нет, выплюнул пустую скорлупу.

да, в столовке у вас с хавчиком негусто, видимо, ну ничего, потом может накопится - тогда выдавите и сольёте

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

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

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

Охапка дров - и плов готов (с)

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

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

Казалось бы: как эта фраза:

привязка математических абстракций серьёзно влияет на качество исследований, причём не в лучшую сторону

относится к «геометрическим аналогиям»?
Я немного представляю, как строятся теории в физике и, хоть убей, не вижу смысла в этой фразе!
а как же математические модели? теоретическая физика?

обычно так делают студенты-первокурсники/второкурсники, когда не врубаются в функциональный анализ, например

Я студент 2-го курса, да.

вот эту фразу поясните отдельно, я её не понял

(не понял, что конкретно, поясняю обе фразы-кандидата)

«обезьяньи ужимки»

незадолго до этого mclaudt обличил меня в них самых.

лолшто?

сленговая фраза, в интернете эта означает крайнюю степень удивления.

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

> А ты не в курсе, что потоки помимо вычислений ещё и I/O могут заниматься?

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

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