|
|
|
Лямбда-выражения
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, Вопрос банален - для чего нужны лямбда-выражения? Они просто позволяют создать анонимный объект с реализацией метода функционального интерфейса? Просто такой необычной формой записи? Щито это вообще такое? И где его использовать..? Знаком с ООП, но не с функциональным подходом... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2014, 18:11 |
|
||
|
Лямбда-выражения
|
|||
|---|---|---|---|
|
#18+
Cpt. GrayВопрос банален - для чего нужны лямбда-выражения? Упростить использование функциональных подходов в Java. Без них большинство попыток реализовать что-то функционально превращется в нагромождение интерфейсов и анонимных классов. Синтаксический шум у анонимных классов ужасный на столько что даже в IDE добавляют возможность его скрывать. Cpt. GrayОни просто позволяют создать анонимный объект с реализацией метода функционального интерфейса? Анонимными бывают классы, а не объекты. На сколько я помню, это не совсем так. Лямды не обязательно реализуются через анонимные классы. Они имеют поддержку на уровне JVM и на низком уровне возможны другие способы реализации. Но в целом - да, функциональность у них почти идентичная. Но у лямбд помимо простого синтаксиса есть ещё и возможность ссылаться на методы и конструкторы. Cpt. GrayПросто такой необычной формой записи? Пусть и не привычной, но сильно упрощающей код. Cpt. GrayЩито это вообще такое? И где его использовать..? Мне кажется стоит почитать документацию к Guava http://code.google.com/p/guava-libraries/wiki/GuavaExplained По-моему это один из довольно доходчивых способов для Java программиста разобраться в функциональщине. Ещё вот доклады хорошие есть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2014, 18:29 |
|
||
|
Лямбда-выражения
|
|||
|---|---|---|---|
|
#18+
Cpt. GrayЗнаком с ООП, но не с функциональным подходом... Немного не по теме, просто выскажусь. У меня почти такая же ситуация и недавно прочитал статью Опасности обучения на Java и понял, что с моим подходом я как программист никто. Так что просто совет, не спеши с ООП, функциональное программирование учит азам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2014, 18:33 |
|
||
|
Лямбда-выражения
|
|||
|---|---|---|---|
|
#18+
Usman http://ru.wikipedia.org/wiki/Замыкание_(программирование) По поводу терминологии интересная тема: http://stackoverflow.com/questions/220658/what-is-the-difference-between-a-closure-and-a-lambda ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2014, 18:34 |
|
||
|
Лямбда-выражения
|
|||
|---|---|---|---|
|
#18+
BlazkowiczUsman http://ru.wikipedia.org/wiki/Замыкание_(программирование) По поводу терминологии интересная тема: http://stackoverflow.com/questions/220658/what-is-the-difference-between-a-closure-and-a-lambda Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2014, 19:28 |
|
||
|
Лямбда-выражения
|
|||
|---|---|---|---|
|
#18+
Вопрос банален - для чего нужны лямбда-выражения? Для того, чтобы не писать кучу ненужного кода. Они просто позволяют создать анонимный объект с реализацией метода функционального интерфейса? Просто такой необычной формой записи? Нет, они не создают объект. Они создают анонимную функцию. Может быть в Java конечно это и объект... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2014, 19:36 |
|
||
|
Лямбда-выражения
|
|||
|---|---|---|---|
|
#18+
[quot MasterZivНет, они не создают объект. Они создают анонимную функцию. Может быть в Java конечно это и объект...[/quot] Нет они именно создают объект анонимного класса для интерфейса с одним единственным неопределенным методом, доопределяют его и вызывают. И это все скрывая в коде какой интерфейс они доопределили. Но в целом красиво. Если не считать, что четверть века назад в трубо паскакале можно было спокойно определять переменную типа функция, вызывать и менять ее значение и для любых типов функций с любым набором параметров. Но это было в эпоху процедурного программирования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2014, 23:19 |
|
||
|
Лямбда-выражения
|
|||
|---|---|---|---|
|
#18+
Сергей АрсеньевЕсли не считать, что четверть века назад в трубо паскакале можно было спокойно определять переменную типа функция, вызывать и менять ее значение и для любых типов функций с любым набором параметров. Но это было в эпоху процедурного программирования. Только нельзя было создавать анонимную функцию по месту и тем более замыкать ее на лексический контекст, в отличие от лиспа, в котором первое появилось лет за 10 до создания оригинального паскаля, а второе — за 8 до создания турбо паскаля. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2014, 07:54 |
|
||
|
Лямбда-выражения
|
|||
|---|---|---|---|
|
#18+
Сергей Арсеньев[quot MasterZivНет, они не создают объект. Они создают анонимную функцию. Может быть в Java конечно это и объект... Нет они именно создают объект анонимного класса для интерфейса с одним единственным неопределенным методом, доопределяют его и вызывают. И это все скрывая в коде какой интерфейс они доопределили.[/quot] Нет, это всё-таки новая сущность в рантайме. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2014, 09:47 |
|
||
|
Лямбда-выражения
|
|||
|---|---|---|---|
|
#18+
k0rvinТолько нельзя было создавать анонимную функцию по месту. Ну так старик Вирт был суров и считал, что определения должны быть в своем блоке, а исполнение в своем. Отсюда делаем вывод - прогресс он в ужесточении рамок. :) А отсюда - лямбда недорегресс. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2014, 11:19 |
|
||
|
Лямбда-выражения
|
|||
|---|---|---|---|
|
#18+
Alexey TominНет, это всё-таки новая сущность в рантайме. Ну да. Разница примерно как между synchronized method и synchronized block. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2014, 11:24 |
|
||
|
Лямбда-выражения
|
|||
|---|---|---|---|
|
#18+
Сергей АрсеньевНу так старик Вирт был суров и считал, что определения должны быть в своем блоке, а исполнение в своем. Отсюда делаем вывод - прогресс он в ужесточении рамок. :) А отсюда - лямбда недорегресс. :) А еще он любил ключевые слова писать капсом и пропорциональный шрифт в исходниках. И учитывая, где теперь его детища, то сложно их назвать образцами прогресса. Да и давать имена функциям на каждый чих — явный маразм: зачем мне функция "greaterThan3", если проще написать "fun x -> x > 3" где надо? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2014, 11:31 |
|
||
|
Лямбда-выражения
|
|||
|---|---|---|---|
|
#18+
k0rvinА еще он любил ключевые слова писать капсом и пропорциональный шрифт в исходниках. Как сделать пропорциональный шрифты на текстовом терминале? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2014, 11:38 |
|
||
|
Лямбда-выражения
|
|||
|---|---|---|---|
|
#18+
не пропорциоальный ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2014, 11:39 |
|
||
|
Лямбда-выражения
|
|||
|---|---|---|---|
|
#18+
Сергей АрсеньевКак сделать пропорциональный шрифты на текстовом терминале? А при чем тут текстовый терминал? http://en.wikipedia.org/wiki/Oberon_(operating_system) http://www.modulaware.com/images/SCREEN.jpg ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2014, 12:03 |
|
||
|
Лямбда-выражения
|
|||
|---|---|---|---|
|
#18+
k0rvin, Паскаль - 68 год. Как бы и требования к красивостям возникли от привычек тех лет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2014, 12:13 |
|
||
|
Лямбда-выражения
|
|||
|---|---|---|---|
|
#18+
Cpt. GrayВопрос банален - для чего нужны лямбда-выражения? В контексте Java/OOP - это сахарок такой. Просто оказалось что ссылки на функции весьма удобны и упрощают код. Подробнее для Java пишут тут: http://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2014, 13:25 |
|
||
|
Лямбда-выражения
|
|||
|---|---|---|---|
|
#18+
Сергей Арсеньев][quot MasterZivНет, они не создают объект. Они создают анонимную функцию. Может быть в Java конечно это и объект... Нет они именно создают объект анонимного класса для интерфейса с одним единственным неопределенным методом, доопределяют его и вызывают. И это все скрывая в коде какой интерфейс они доопределили. Но в целом красиво. Если не считать, что четверть века назад в трубо паскакале можно было спокойно определять переменную типа функция, вызывать и менять ее значение и для любых типов функций с любым набором параметров. Но это было в эпоху процедурного программирования.[/quot] Ну это вопрос реализации. Если они считают, что так лучше -- их дело. Главное, это всё руками писать не надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2014, 15:21 |
|
||
|
Лямбда-выражения
|
|||
|---|---|---|---|
|
#18+
Сергей АрсеньевНет они именно создают объект анонимного класса для интерфейса Не совсем. Тело функции (байткод) лежит в этом же файле, а не отдельном, инстанцируется не конкретный класс Example$999, а чёртЗнаетЧто сгенерированное в рантайме. Рефлекшен на лямбду говорит, что это не анонимный класс. 15653776 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2014, 17:20 |
|
||
|
Лямбда-выражения
|
|||
|---|---|---|---|
|
#18+
если хочется функционального программирования под jvm то лучше сразу clojure, там и не пытаются смешать парадигмы, просто максимально близко реализовали проверенный lisp style c учетом специфики jvm и вызова готового java кода, а тут получается такой же синтаксический ужас в целом как в scala, еще немного и будет хуже чем с++ по синтаксису имхо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2014, 21:41 |
|
||
|
Лямбда-выражения
|
|||
|---|---|---|---|
|
#18+
Вот где порылась собака. Лямбды реализованы как приватные статические функции с префиксом "lambda$" в текущем классе. Выхлоп javap показывает что просто используется пара инструкций invokedynamic, invokestatic. Обе описаны в спецификации JVM-7 и не являются чем-то новым. Рискну предположить что лямбды не вносят изменения в спецификацию байткода машины. И хотя в шапке версия прыгнула на c 51 на 52 думаю что лямбды здесь непричём а просто идёт некая другая эволюция JVM. Вобщем, коллеги, получИте свои обещанные синтаксические сладости и распишитесь. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2014, 02:32 |
|
||
|
Лямбда-выражения
|
|||
|---|---|---|---|
|
#18+
mayton, судя по комментариям Сергея Куксенко высока вероятность, что реализация изменится: http://habrahabr.ru/post/216303/#comment_7415965 http://habrahabr.ru/post/216303/#comment_7415907 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2014, 17:08 |
|
||
|
Лямбда-выражения
|
|||
|---|---|---|---|
|
#18+
Мне нравится текущая реализация Java lamdbas. В ней нету new и сопутствующих накладных на работу с memory. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2014, 19:42 |
|
||
|
Лямбда-выражения
|
|||
|---|---|---|---|
|
#18+
maytonМне нравится текущая реализация Java lamdbas. В ней нету new и сопутствующих накладных на работу с memory. Есть т.к. invokeDynamic создает java.lang.invoke.CallSite ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2014, 09:59 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38592251&tid=2127445]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
161ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 229ms |
| total: | 467ms |

| 0 / 0 |
