Чи існують якісь конкретні робочі процеси або шаблони дизайну, які зазвичай використовуються для створення великих функціональних програм програмування? [зачинено]


13

Я певний час досліджував Clojure, хоча не використовував його в жодних нетривіальних проектах. В основному, мені просто подобається синтаксис та деякі ідіоми. Виходячи з фону OOP, і Clojure є першою функціональною мовою, на яку я дуже придивився, я, природно, не так комфортний з функціональним способом робити речі.

Однак, чи існують якісь конкретні робочі процеси або шаблони дизайну, які є спільними для створення великих функціональних додатків? Я дуже хотів би почати використовувати функціональне програмування «по-справжньому», але боюся, що при моїй нинішній недостатній досвід це призведе до епічного провалу.

"Банда з чотирьох" є таким стандартом для програмістів ОО, але чи є щось подібне, що більше спрямоване на функціональну парадигму? Більшість ресурсів, які я знайшов, мають чудові програмні самородки, але вони не відступають, щоб надати більш широкий, більш архітектурний вигляд.


6
Деякі з шаблонів GOF насправді є лише способом вирішення в мовах ОО для речей, які функціональне програмування вже передбачено. Дивіться stackoverflow.com/q/327955
Роберт Харві



Я думаю, що в цій дискусії є занадто багато уваги на специфічних для GoF / OOP моделей. Чи може хтось розмістити деякі фактичні схеми, характерні для функціонального програмування (які не просто намагаються довести тривіальність GoF у функціональних мовах)?
Даніель Б

Відповіді:


3

Такі форми зазвичай є симптомами зламаної, непридатної основної моделі.

OOP розбитий за дизайном, непридатний для більшості застосувань, тому він лопається з усіма так званими "візерунками". Функціональна модель (трохи трохи) гнучкіша, і потреба у "шаблонах" не така очевидна.

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

Звичайно, деякі повторювані "візерунки" або "рецепти" високого рівня неминучі навіть у самій абстрактній, чистій та чистій математиці, але вони іншого типу та іншого рівня абстрагування, ніж шаблони GoF. Ви знайдете корисні монади, наприклад.


+1 за останні 2 абзаци, я думаю, що це місце. Що стосується ООП, мені цікаво обґрунтування того, як його називати порушеним, за винятком того, що це загальний інструмент, який часто застосовується до конкретних проблем (отже, такі моделі низького рівня, як ті, що виникають у Гофі). Чи можете ви охарактеризувати коротко або опублікувати посилання, що підсумовує вашу думку?
Даніель Б

@DanielB, в OOP немає нічого поганого, але спосіб його застосування повністю порушений. Ця модель підходить лише до кількох реальних проблем (і вона справді світить там, коли застосовується належним чином), але для решти вона потребує всього, що вмістить милиці та клейку стрічку. Дивіться моя відповідь на programmers.stackexchange.com/questions/52608 / ... , наприклад.
SK-логіка

Гаразд, я думаю, що я на одній сторінці. Насправді, можливо, я вже задавав це точне запитання один раз раніше, вибачте за це - те, як ви сформулювали цей рядок, просто здається, що ви натякаєте на це більше.
Даніель Б

-3

На мою особисту думку, дизайнерські зразки носять семантичний характер. Я пам’ятаю, як переписав деякі мої старі програми за допомогою MVC, щоб переконатися, що я зрозумів шаблон, як я вважав, що це зробив. Але, врешті-решт, я нічого не отримав від MVC за свій оригінальний код.

Однак, якби я застосував свій оригінальний код до більшого середовища розробки та сказав комусь, що існує проблема з цим певним методом ..., важко було б розробити цю проблему. ЗАРАЗ, якби я сказав, що контракт Контролера було закрито з якихось причин, він точно знатиме, з чого почати.

Шаблони дизайну чудові ... але, як я вже сказав, я думаю, що вони семантичні!

РЕДАКТУВАННЯ: Ти євангелістський тип розламає мене. Як щось коли-небудь розвивалося без MVC (або якоїсь іншої моделі дизайну)!


2
семантичний (sɪˈmæntɪk) - прикметник 1. або має відношення до значення або виникає з розрізнення значень різних слів або символів 2. або стосується семантики (вивчення значення) 3. логіка, що стосується тлумачення формальної теорії, як тоді, коли таблиці істинності подаються як опис спонсорів, що розсуджуються
Роберт Харві

+1 - моя думка полягала в тому, що моделі дизайну - це просто засіб спілкування!
aserwin

Шаблони дизайну - це не просто спосіб спілкування; це конкретні, добре зрозумілі рецепти, які можна реалізувати в програмному забезпеченні для вирішення певних, часто зустрічаються проблем.
Роберт Харві

Про це говорять книги. Але я ніколи насправді не вирішував проблему через схему дизайну, яку не міг вирішити без неї. Єдина перевага, яку я помітив на власному досвіді, - це вміння говорити один одному про код! ;)
aserwin

1
Щодо редагування: Отже, ви бажаєте переосмислити колесо кожного разу, коли пишете новий шматочок коду?
Роберт Харві
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.