Комментарии
Извините, но не считаю тему раскрытой:
  1. Не уяснил причину сравнения с плюсами. Это заметно разные языки. Более логично было сравнить, с каким нибудь скриптовым языком.
  2. В perl есть, например, функция sort, которую можно использовать в функциональном стиле для сортировки массивов с чем угодно. Есть функция map, которую любят демонстрировать поклонники функциональной парадигмы. Автор этот момент опустил, хотя для иллюстрации они, на мой взгляд, более подходят, чем пример с замыканием.
  3. Сама по себе механика обратных вызовов не является признаком функциональной парадигмы, потому как давно используется в perl, например при работе с GUI.
  4. В чем прелесть использования FP в perl?

PS Возможно кому нибудь будет интересна книга: «Higher-Order Perl» by Mark Jason Dominus. Книга раздается в сети бесплатно, и она доступна для скачивания.
  1. В данном случае было сравнение функционального программирования и ООП, чтобы показать, общее в ООП и в функциональном программирвовании. В данном случае не важно, на каком языке делать с ООП, главное, чтобы он его поддерживал. Например, как и описано в статье, замыкание — это аналог класса, т.е. имеет данные и состояние, либо колбек — это аналог виртуальной функции. Например, если человек знает ООП, но не знает, что такое анонимные функции, замыкания и колбеки, то в данном случае будет более просто разобраться в этих вопросах.


  2. Полностью согласен, что sort/grep/map позволяет работать в функциональном стиле. Вопрос только в том, что блок кода в этих функциях по сути и есть замыкание, просто записаны с использования прототипа map(&@), что позволяет сначала задавать блока кода без sub, а затем массив. Пример, который иллюстрирует, что это и есть замыкание


    perl -MDDP -E 'my @arr = qw/1 2 3/; sub test { my $multiplier = shift;  map { $_ * $multiplier } @arr;} my @nums = test(5); p @nums'

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


  4. Неблокирующее/асинхронное программирование с помощью AnyEvent/EV, Mojo::IOLoop; использование, как вы описали функций sort/grep/map, включая разные модули, например, для работы со списками List::Util, List::MoreUtils. Mojo::DOM/Web::Query — например, в функцию each передается колбек, который выполняется для каждого найденного элемента. В Dancer2/Mojolicious используются колбеки для роутинга, например, пример для Dancer2:


    use Dancer2;
    get '/' => sub { "Hello World" };
    dance;


«Higher-Order Perl» by Mark Jason Dominus. действительно очень неплохая, и рассказывает о фукнциональном программировании в Perl

В данном случае было сравнение функционального программирования и ООП, чтобы показать, общее в ООП и в функциональном программирвовании.
perl не является языком ООП. Разные надстройки позволяют достаточно полно эмулировать ООП, но это только эмуляция, и поэтому я сказал о не совсем корректном сравнении.
Вопрос только в том, что блок кода в этих функциях по сути и есть замыкание
не совсем согласен. Блок кода применяется к значению, что не обязывает его быть замыканием.

Веб не очень удачный пример для FP, хотя бы потому, что при рассмотрении отправки запроса и получения ответа как функции, в том смысле, как это подразумевается в FP — эта функция с побочными эффектами. При одном и том же исходом url мы можем получить разный результат.
perl не является языком ООП. Разные надстройки позволяют достаточно полно эмулировать ООП, но это только эмуляция, и поэтому я сказал о не совсем корректном сравнении.

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


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

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


Веб не очень удачный пример для FP, хотя бы потому, что при рассмотрении отправки запроса и получения ответа как функции, в том смысле, как это подразумевается в FP — эта функция с побочными эффектами. При одном и том же исходом url мы можем получить разный результат.

на самом деле FP — это не только чистые функции, но и вообще оперирование функциями как значениями (передача функций как параметр, возврат функций)

Спасибо за хороший пример.
Действительно, на C++ можно проще, но рамках данной статьи хотелось рассказать о замыканиях и лямбдах в более привычных для знающих ООП терминах. В данном случае Perl можно заменить даже на тот же C++, JavaScript, но суть останется той же.

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