Просмотров: 9578

Решение ООП-задач на языке Haskell


Как-то однажды знаменитый учитель Кх Ан вышел на прогулку с учеником Антоном. Надеясь разговорить учителя, Антон спросил: «Учитель, слыхал я, что объекты — очень хорошая штука — правда ли это?» Кх Ан посмотрел на ученика с жалостью в красных от боли глазах и ответил: «Глупый ученик! Объекты — всего лишь замыкания для бедных.»

Пристыженный Антон простился с учителем и вернулся в свою келью, горя желанием как можно скорее изучить замыкания. Он внимательно прочитал все статьи из серии «Lambda: The Ultimate», и родственные им статьи, и написал небольшой интерпретатор Scheme с объектно-ориентированной системой, основанной на замыканиях. Он многому научился, и с нетерпением ждал случая сообщить учителю о своих успехах.

Во время следующей прогулки с Кх Аном, Антон, пытаясь произвести хорошее впечатление, сказал: «Учитель, я прилежно изучил этот вопрос, и понимаю теперь, что объекты — воистину замыкания для бедных.» В ответ Кх Ан яростно огрел Антона палкой и воскликнул: «Когда же ты чему-то научишься, бездарь? Замыкания — это объекты для бедных!»

В эту же секунду Антон обрел просветление.

Моё послесловие к этой древней программистской притче таково:

В статически типизированных языках все не так кучеряво. Объект и замыкание — вещи пересекающиеся, но не идентичные — проблемы, как обычно, начинаются при наследовании с более чем одним уровнем иерархии.

Решение ООП-задач на языке Haskell

А теперь собственно центральная ссылка (отчасти, пример слегка демотивирует — выглядит громоздко и нечитаемо по сравнению с ООП-версией):

Рассмотрим типичную задачу, из тех, что обычно считаются «ООП-эшными». Имеется список данных (объектов) имеющих не одинаковые структуры (по научному, гетерогенный список), при чём, над каждым нужно выполнять одинаковые действия — по простому, каждый можно передать в некую функцию.
Первое, что приходит на ум — элементы GUI, но для примера они не годятся, понадобится подключать большие пакеты и слишком много места займёт код, к сущности ООП в Haskell отношения не имеющий.

А вот и дополнительные интересные ссылки по теме ФП:

Ключевики для нелюдей: функциональное программирование и объекты, а также ООП для использования Хаскеля, о котором я писал уже там. Специфика программирования и лямбды и замыкания, которые позволяют использовать рекурсии и циклы.

twitter.com facebook.com vkontakte.ru odnoklassniki.ru mail.ru ya.ru pikabu.ru blogger.com liveinternet.ru livejournal.ru google.com bobrdobr.ru yandex.ru del.icio.us

Подписка на обновления блога → через RSS, на e-mail, через Twitter
Теги: , , ,
Эта запись опубликована: Суббота, 1 августа 2015 в рубрике Программирование.

2 комментария

Следите за комментариями по RSS
  1. "при чём" - аффтарблин!

    Слитно, йопта!

  2. Eugene: чужие цитаты не правлю

Оставьте комментарий!

Не регистрировать/аноним

Используйте нормальные имена. Ваш комментарий будет опубликован после проверки.

Зарегистрировать/комментатор

Для регистрации укажите свой действующий email и пароль. Связка email-пароль позволяет вам комментировать и редактировать данные в вашем персональном аккаунте, такие как адрес сайта, ник и т.п. (Письмо с активацией придет в ящик, указанный при регистрации)

(обязательно)


⇑ Наверх
⇓ Вниз