В этой статье я расскажу об одном из вариантов каррирования и частичного применения функций в любимом мною C++, покажу свою экспериментальную реализацию сего действа и объясню без математики, на пальцах, что такое вообще каррирование и что же под капотом у kari.hpp, с помощью которой мы и будем каррировать функции. Ну и как тут принято: заинтересовавшихся — прошу под кат.
Рубрика «функциональное программирование» - 21
Каррирование и частичное применение на C++14
2017-10-22 в 22:36, admin, рубрики: c++, C++14, карринг, каррирование, ненормальное программирование, Программирование, ФП, функциональное программирование, частичное применениеROS, ELM и черепашка
2017-10-19 в 19:48, admin, рубрики: elm, ROS, Разработка веб-сайтов, Разработка для интернета вещей, Разработка робототехники, функциональное программированиеRobotic Operation System позволяет взаимодействовать своим подсистемам по механизмам «подписка на топик» и «вызов сервиса» по своему специальному протоколу. Но есть пакет rosbridge, который позволяет общаться с ROS извне с помощью websocket. Описанный протокол позволяет выполнять основные операции по взаимодействию с другими подсистемами.
ELM — очень простой и элегантный язык, компилирующийся в javascript и отлично подходящий для разработки интерактивных программ.
Я решил совместить приятное с полезным и изучать ROS (по которой сейчас идет курс) и ELM вместе.
Читать полностью »
Моноиды, полугруппы и все-все-все
2017-10-16 в 13:57, admin, рубрики: .net, C#, F#, haskell, Блог компании JUG.ru Group, моноид, полугруппа, функциональное программирование Если ты на практике используешь ООП, то хорошо разбираешься в таких вещах, как «паттерны проектирования». А знаешь ли ты, что есть множество полезных паттернов, которые не укладываются в этот стандартный список? К сожалению, многие из них связаны с «функциональным программированием», которое, согласно легенде, сложное и заумное. Если десять раз сказать слово «моноид», можно вызвать Дьявола.
Mark Seeman расскажет о функциональном программировании просто и быстро. Для этого он начал писать цикл статей, посвященных связи между паттернами проектирования и теорией категорий. Любой ООПшник, у которого есть 15 минут свободного времени, сможет заполучить в свои руки принципиально новый набор идей и инсайтов, касающихся не только функциональщины, но и правильного объектно-ориентированного дизайна. Решающим фактором является то, что все примеры — это реальный код на C#, F# и Haskell. Этот хабрапост — перевод самого начала цикла, первых трех статей, слитых воедино для удобства понимания.
Кроме того, с Марком можно пообщаться вживую, посетив конференцию DotNext 2017 Moscow, которая состоится 12-13 ноября 2017 г. в Москве, в «Славянская Рэдиссон». Марк прочитает доклад на тему «From dependency injection to dependency rejection». Билеты можно взять здесь.
Железнодорожно-ориентированное программирование. Обработка ошибок в функциональном стиле
2017-10-09 в 4:04, admin, рубрики: .net, either monad, F#, functional programming, rop, Программирование, Проектирование и рефакторинг, Разработка веб-сайтов, функциональное программированиеКак пользователь я хочу изменить ФИО и email в системе.
Для реализации этой простой пользовательской истории мы должны получить запрос, провести валидацию, обновить существующую запись в БД, отправить подтверждение на email пользователю и вернуть ответ браузеру. Код будет выглядеть примерно одинаково на C#:
string ExecuteUseCase()
{
var request = receiveRequest();
validateRequest(request);
canonicalizeEmail(request);
db.updateDbFromRequest(request);
smtpServer.sendEmail(request.Email);
return "Success";
}
и F#:
let executeUseCase =
receiveRequest
>> validateRequest
>> canonicalizeEmail
>> updateDbFromRequest
>> sendEmail
>> returnMessage
Отклоняясь от счастливого пути
Дополним историю:
Как пользователь я хочу изменить ФИО и email в системе
И увидеть сообщение об ошибке, если что-то пойдет не так.
Что же может пойти не так?
- ФИО может оказаться пустым, а email – не корректным
- пользователь с таким id может быть не найден в БД
- во время отправки письма с подтверждением SMTP-сервер может не ответить
- ...
Добавим код обработки ошибок
string ExecuteUseCase()
{
var request = receiveRequest();
var isValidated = validateRequest(request);
if (!isValidated) {
return "Request is not valid"
}
canonicalizeEmail(request);
try {
var result = db.updateDbFromRequest(request);
if (!result) {
return "Customer record not found"
}
} catch {
return "DB error: Customer record not updated"
}
if (!smtpServer.sendEmail(request.Email)) {
log.Error "Customer email not sent"
}
return "OK";
}
Вдруг вместо 6 мы получили 18 строк кода с ветвлениями и большей вложенностью, что сильно ухудшило читаемость. Каким будет функциональный эквивалент этого кода? Он выглядит абсолютно также, но теперь в нем есть обработка ошибок. Можете мне не верить, но, когда мы доберемся до конца, вы убедитесь, что это действительно так.
Читать полностью »
Когда Феникс успел убить Рейлс?
2017-10-06 в 6:59, admin, рубрики: Elixir, elixir-lang, Elixir/Phoenix, rails, ruby, ruby on rails, wunsh, Разработка веб-сайтов, функциональное программированиеСлучается, что некоторые задачи не удаётся решить на привычном для вас языке программирования. Предположим, перед нами встала задача реализовать обмен сообщениями в реальном времени при больших объёмах трафика. Как сделать это оптимально? По понятным причинам, Руби – не лучший для этого вариант, поэтому придётся начинать поиски альтернатив. Перед вами появится множество путей, и как для рубиста, самым оптимальным выбором будет использование Эликсира.
Эликсир – функциональный язык программирования с синтаксисом Руби, работающий на виртуальной машине Эрланга. Следовательно, для человека из мира Руби знакомство с языком пройдёт очень легко. Хотя для того, чтобы понять его полностью, придётся постараться, не раз перечитывая документацию.
Ответ на вопрос из заголовка и масса интересного об Эликсире сразу же под катом.
Монады для Go-программистов
2017-10-05 в 15:44, admin, рубрики: functional programming, Go, monads, Блог компании Mail.Ru Group, никто не читает теги, Программирование, Проектирование и рефакторинг, функциональное программированиеМонады используются для компоновки функции (function composition) и избавления от связанного с этим утомительного однообразия. После семи лет программирования на Go необходимость повторять if err != nil
превращается в рутину. Каждый раз, когда я пишу эту строку, я благодарю Gopher’ов за читабельный язык с прекрасным инструментарием, но в то же время проклинаю за то, что чувствую себя наказанным Бартом Симпсоном.
OO VS FP
2017-09-18 в 8:02, admin, рубрики: .net, design, patterns, Анализ и проектирование систем, Программирование, функциональное программированиеМой перевод, как и оригинальный доклад вызвали неоднозначную реакцию в комментариях. Поэтому я решил перевести статью-ответ дяди Боба на оригинальный материал.
Множество программистов на протяжении последних лет утверждают, что ООП и ФП — являются взаимоисключающими. С высоты башни из слоновой кости в облаках, ФП-небожители иногда поглядывают вниз на бедных наивных ООП-программистов и снисходят до надменных комментариев. Приверженцы ООП в свою очередь косо смотрят на «функционыльщиков», не понимая, зачем чесать левое ухо правой пяткой.
Эти точки зрения игнорируют саму суть ООП и ФП парадигм. Вставлю свои пять копеек.
Читать полностью »
«Паттерны» функционального программирования
2017-09-17 в 21:31, admin, рубрики: .net, C#, F#, functional programming, patterns, ref#actoring, Анализ и проектирование систем, Проектирование и рефакторинг, функциональное программирование
Многие люди представляют функциональное программирование как нечто очень сложное и «наукоемкое», а представителей ФП-сообщества – эстетствующими философами, живущими в башне из слоновой кости.
До недавнего времени такой взгляд на вещи действительно был недалек от истины: говорим ФП, подразумеваем Хаскель и теорию категорий. В последнее время ситуация изменилась и функциональная парадигма набирает обороты в web-разработке, не без помощи F#, Scala и React. Попробуем взглянуть на «паттерны» функционального программирования, полезные для решения повседневных задач с точки зрения ООП – парадигмы.
ООП широко распространено в разработке прикладного ПО не одно десятилетие. Все мы знакомы с SOLID и GOF. Что будет их функциональным эквивалентом?.. Функции! Функциональное программирование просто «другое» и предлагает другие решения.
RailsClub 2017. Интервью с Luca Guidi, автором Hanami: смешиваем FP и OOP в Ruby
2017-09-13 в 14:10, admin, рубрики: hanami, ruby, ruby on rails, Блог компании «RailsClub», конференция, ооп, функциональное программированиеВсем привет! Мы вовсю готовимся к RailsClub, который состоится 23 сентября (ааааа, это уже на следующей неделе!!). Программа на сайте, 500 крутых рубистов уже зарегистрировались, ждем только тебя! Еще можно успеть заскочить в последний вагон и поучаствовать в главном Ruby событии года в России.
У Павла Аргентова получилось очень интересное интервью с потрясающим человеком. Luca Guidi — семьянин, независимый OSS разработчик, автор Ruby фреймворка Hanami.