Чи варто підібрати функціональну мову програмування?


10

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

Тож я здогадуюсь, це потім мене вдарило. Чи варто замість цього робити функціональне програмування?
Редагувати: У мене може бути неправильне уявлення про функціональне програмування.

Наразі моєю мовою вибору є C #, і я походжу з C ++. Я працюю розробником ігор, але наразі я безробітний.

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

Чи варто підібрати функціональну мову? Один із моїх факторів страху - залишити комфорт Visual Studio.


Ви можете спробувати F #, якщо виїжджаючи з Visual Studio є порушником угод.
Адам Лір

Це не розірвач угоди. Я просто не пробував багато інших альтернатив. Напевно, я побоювався працювати без інтелігенції, рефакторингу чи подібних інструментів, і я маю таке уявлення, що ви знову закінчите писати код у простому текстовому редакторі.
Заява

Я зараз безробітний ... чи не слід це першим виправити?
робота

Я б спробував трохи працювати без ВС. Ви можете виявити, що робота дуже мінімалістично може бути цікавою.
Захарій К

@Job, так, але останнім часом мене вразила низка досить поганих подій :) Я пошкодив ногу (ну я не кодую ногою, але, все-таки ...) зовсім недавно після того, як покинув стару роботу в пошук нового.
Заява

Відповіді:


5

ТАК

Навчання нових речей повинно бути цікавим. А вивчення нового способу програмування повинно зробити вас кращим програмістом. Перевірте один з Haskell або Erlang, обидва вони функціональні, але вони дуже різні. Якщо ви вибрали Haskell, знайдіть кілька розмов від "Simon Simon Payton Jones" на youtube або подкастах. Хлопець - чудовий оратор.


1
Я вибрав цю відповідь з багатьох причин. @Zachary K каже, що було б цікаво вийти з коробки добре відомого місця та мати іншу перспективу. Мені не варто боятися спробувати щось нове. Не кінець днів. Haskell - це мова, яка привертала мою увагу в різних дискусіях пару разів раніше. Я не знаю, чи потрібна мені функціональна мова, але як говорить @Toby Аллен, це чудовий спосіб побачити, як працюють інші способи, і я погоджуюсь на це, спробувавши деякі UnrealScript. @ammoQ трохи пропустив питання, але я не дуже добре визначив своє запитання. Я все ще викликаю його занепокоєння.
Заява

Радий допомогти. Повеселіться
Захарій К

14

Святий * * * *. Срібної кулі немає. Крок назад. Розслабтеся, зробіть глибокий вдих.

Тільки тому, що у вас є інструмент у вашій панелі інструментів, це не означає, що ви зобов'язані ним користуватися. Концентруйтеся на заданому заданні, тобто написанні програми, яка працює, і рефактор, коли код погано пахне. Не інкапсулюйте та абстрагуйте кожну дрібницю лише тому, що це може змінитися в якийсь день у майбутньому. IMO - це дійсно набагато краще починати прямо, KISS & YAGNI, і реагувати на зміни вимог, коли вони насправді змінюються .

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


Ну, я зараз не працюю над чим-небудь особливо. Я між робочими місцями. Я / був розробником ігор.
Заява

3
Це небезпечна ситуація щодо переобладнання. Ні терміну, ні відставання, просто занадто багато часу, щоб одержими деталями.
користувач281377

(Попереду багато здогадок, оскільки я не маю чіткої картини на увазі) Я здогадуюсь, що мої "потреби" були більш відображені в тому, як я вважаю за краще писати код. Я не знаю багато чого про функціональне програмування, і, мабуть, ім'я могло б трохи обдурити мене. Я просто відчуваю, що мої уподобання орієнтуються не стільки на об’єкт, скільки я думав. То, може, мені сподобається працювати в іншій парадигмі?
Заява

Так, я думаю, це так. Я зараз перебуваю у фазі навчання, тому я вивчаю можливості письма певними способами. На роботі часто не було часу писати такий код, і вам доводиться поважати кодекс поведінки та підтримувати послідовний стиль серед розробників.
Заява

2
Це абсолютно добре, коли ви намагаєтеся будь-який підручний інструмент зараз, коли ви перебуваєте між робочими місцями, але, боюся, ми не можемо сказати вам, чи підходить взуття.
користувач281377

12

Ви можете забрати F # . Це .NET функціональна мова, яка дозволить вам використовувати Visual Studio і повторно використовувати багато ваших знань .NET. Зрозуміло, це збірки, безперебійно інтегруючись із збірками C # (дозволяючи легко комбінувати C #, C ++ / CLI і F # в одному проекті). Підтримка F # постачається з VS Pro або краще, але я не впевнений, чи вона включена за замовчуванням.


Я думаю, що у VS2008 є добавка для F #, але вона є за замовчуванням у VS2010.
apoorv020

F # працює навіть із безкоштовною оболонкою VS.
SK-логіка

6

IMO, варто спробувати функціональну мову. Навіть якщо ви ніколи не використовуєте його безпосередньо у випущеному продукті, його вивчення майже напевно допоможе дати дещо інший світогляд / точку зору на програмування. Навіть якщо ви в кінцевому підсумку продовжуєте робити все "справжнє" кодування в C #, ймовірність, що це допоможе вам покращити код, який ви пишете на C #.

Як вже згадували інші, очевидним вибором для тих, хто звик до Visual Studio, є F #, який в основному є похідною Ocaml / Caml / ML. IMO, це було хорошим вибором з боку Microsoft для введення людей у ​​функціональне програмування - це повноцінна функціональна мова, але не має настільки чужих синтаксисів, як деякі (наприклад, в той час, як мови на основі Lisp роблять мають реальні переваги, початківцям майже завжди важко читати).


2

Так, слід.

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

F #, з іншого боку, не є чистим, і тому ви можете легко пропустити те, що важливо у функціональному програмуванні. Ви можете, так би мовити, продовжувати писати процедурні програми, які тут мутують змінну, виконувати там деякі побічні ефекти, просто у синтаксисі F #.


Я насправді розпочав роботу на tryhaskell.org :) Захоплююче дізнаватися нові речі.
Заява

1

Якщо ви вже використовуєте c #, вам не потрібна нова мова - за допомогою комбінації методів розширення, лямбда та загальних типів Func / Action досить просто написати функціональний код на C # - таким чином ви можете використовувати функціональний стиль у алгоритми, де це має найбільш сенс, не потрібно змінювати всю програму.


1
Вам завжди потрібна інша мова. Навіть якщо ви ніколи не користуєтесь ним, це чудовий досвід вивчення нової мови. Ні в якій мові немає всього.
Тобі Аллен

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

Так, я вважаю, що моя стурбованість була більш упередженою, якщо є мови, які краще (синтаксично) підходять для роботи з методами / функціями, таким чином, як я часто працюю під час відмови від цього. C # пропонують лямбда-вирази, і це добре саме по собі, але, наприклад, функція повертає значення без будь-яких параметрів коду виходу, наприклад () => x, і, можливо, існують більш чисті способи.
Заява

+1 @Toby. Нещодавно я проглянув посилання на UnrealScript і побачив цікаві мовні рішення для роботи зі станами тощо. Він переходить до C # з точки зору роздумів про проблему, і вони мають досить приємне рішення. Так що так, я вважаю, що ви багато чого навчитесь, коли вийдете з пісочниці та розграбуєте своїх сусідів за всім піском та іграшками, які ви знайдете :)
Заява
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.