Какую задачу лучше всего выполнить в стиле функционального программирования? - PullRequest
28 голосов
/ 29 марта 2009

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

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

Ответы [ 16 ]

0 голосов
/ 29 марта 2009

Интересно, никто так и не ответил на вопрос: какое задание лучше всего выполнить в «функциональном стиле»?

Программа / алгоритм состоит из 2 частей: логическое управление и структура данных. Я думаю, что задачи, которые лучше всего выполнять в функциональном стиле, это те списки или массивы, в которых они работают, как списки (например, qsort). Не случайно, что функциональные языки программирования очень хорошо поддерживают списки.

Когда структуры данных отклоняются от списков, я думаю, что использование функционального стиля программирования становится немного «неестественным».

0 голосов
/ 29 марта 2009

Покажите им способ jQuery для перебора элементов DOM:

$(".magic-divs").click(function(){
    // FYI, in this context, "this" will be the element clicked on.
    alert("somebody clicked on " + this.id);
    this.hide();

});

$(".magic-divs").show();

против. как большинство результатов Google для "элемента JavaScript по имени класса" делают это:

var arrayOfElements = // this is filled with the elements somehow
for(var i=0,j=arrayOfElements.length; i<j; i++) {
   alert("now I get to add an onclick event somehow " + i);
}
// i dont even want to type the ugly for-loop stuff to hide every div...

Функциональное программирование полезно в повседневных вещах, подобных описанным выше!

(примечание: я не знаю, соответствует ли мой пример точному определению функционального программирования, но если да, то функциональное программирование - это здорово)

0 голосов
/ 29 марта 2009

Простым примером задачи, которую часто проще всего выполнить в функциональном стиле, является преобразование данных из одной формы в другую. «Сумма квадратов» является тривиальным примером преобразования данных. Выступление Луки на прошлогоднем PDC показало, как использовать этот вид преобразования данных для чего-то более практичного, загрузки и анализа котировок акций. Демонстрация сделана на F #, но концепции те же и могут быть применены к C # или большинству других языков программирования.

http://channel9.msdn.com/pdc2008/TL11/

0 голосов
/ 29 марта 2009
  1. Показать, как кодировать отдельный массив. Отличить очень легко в SQL, но это было трудно для массива памяти. Теперь легко определить массив с помощью LINQ.

  2. Вы можете объяснить им, что в будущем будет parralel LINQ (PLINQ). Когда вы начнете писать функциональный код, вам будет проще провести параллелизацию вашего приложения. Google широко использует MapReduce.

  3. Объясните им, что LINQ - это язык запросов для манипулирования всеми видами данных. В памяти, в базе данных, отлично, веб-сервисы, XML-файлы, JSON-файлы. Это какой-то универсальный SQL. Однако люди, которые не любят SQL, будут менее убеждены.

Я бы не стал много говорить о функциональном программировании, я бы объяснил, как LINQ может помочь разработчикам.

0 голосов
/ 29 марта 2009

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

0 голосов
/ 29 марта 2009

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

С F # гораздо проще написать логику синтаксического анализа, чем с C #.

Взгляните на эту статью: Функциональные .NET - LINQ или встроенные в язык монады?

...