Чи функціональна мова Javascript? Я знаю, що у неї є об'єкти, і ви також можете робити OOP з нею, але це також функціональна мова, чи можна її використовувати таким чином?
Іноді люди скажуть функціональне програмування, коли мається на увазі імперативне програмування або процедурне програмування . Власне кажучи, функціональне програмування - це:
В інформатиці функціональне програмування - парадигма програмування, яка розглядає обчислення як оцінку математичних функцій та уникає даних про стан та змінні . Він підкреслює застосування функцій на відміну від імперативного стилю програмування, який підкреслює зміни у стані. Функціональне програмування має своє коріння в обчисленні лямбда, формальній системі, розробленій в 1930-х роках для дослідження визначення функцій, застосування функції та рекурсії. Багато функціональних мов програмування можна розглядати як опрацьовування лямбда-числення.
Хоча Javascript не відомий і не використовується як функціональна мова, він має деякі функціональні елементи :
JavaScript має багато спільного з Scheme. Це динамічна мова. Він має гнучкий тип даних (масиви), який може легко імітувати s-вирази. І найголовніше, що функції - лямбда.
Схема - це діалект Ліспа , і, мабуть, одна з мов, про яку думають більшість програмістів, коли вони обговорюють функціональне програмування. Що стосується орієнтації на об'єкт , Javascript - це об'єктно-орієнтована мова. Але його об'єктна орієнтація заснована на прототипі :
Прототипне програмування - це стиль об'єктно-орієнтованого програмування, в якому класів немає, а повторне використання поведінки (відоме як успадкування в мовах на основі класів) здійснюється за допомогою процесу клонування існуючих об'єктів, які служать прототипами. Ця модель також може бути відома як безкласове, орієнтоване на прототип або на основі екземпляра програмування. Делегування - це мовна функція, яка підтримує програмування на основі прототипу.
Отже, хоча Javascript є об'єктно-орієнтованою, він не відповідає більш поширеній моделі на основі класу , як і мови, як C ++, C #, Java та PHP (і безліч інших). І звичайно, це також імперативна мова, що призводить до плутанини з описаним вище функціональним програмуванням.
Ви знаєте, як OOP став / здається, що наступна еволюція в програмуванні, чи означає це, що «Функціональне програмування» - це наступна еволюція
Об'єктна орієнтація та функціональне програмування - лише два з безлічі різних парадигм програмування , це різні стилі програмування з різними поняттями та абстракціями. Ключове слово - "різне". Не існує жодної парадигми, яка була б кращою за інших або розвивалася більше, ніж інші, кожна з них відповідає кращим сценаріям, ніж інші. Деякі можуть бути досить старшими за своїм походженням, ніж інші, але в еволюційному плані це робить їх кращими, оскільки вони пережили довше. Але це не дуже розумний погляд на це.
Як я описав вище, Javascript, як і багато інших мов, є багатопарадигмою. Це дозволяє писати код в імперативному, прототипному, об'єктно-орієнтованому та функціональному стилі. Ви самі вирішите вибрати, який саме підходить для того, що ви будуєте. Існує також кілька одиничних мов парадигми, канонічним прикладом є Java, яка дозволяє лише для об'єктно-орієнтованого програмування на основі класу 1 .
Ви дійсно повинні протистояти будь-яким закликам ставитися до мов та парадигм як до модних висловлювань. Там є велика ганьба, здебільшого написана фанатами / фангірлами або маркетинговими людьми, маючи незначні (якщо такі є) знання та розуміння програмування. Такі терміни, як "краще", "більше розвиваються" тощо, просто не застосовуються.
Я найкраще навчаюсь на прикладах, можливо, хтось може показати те, що виконує одне і те ж завдання в рамках OOP, а потім функціональним способом програмування, щоб я зрозумів і порівняв, що робить / є функціональне програмування.
Це було б жахливим способом вчитися. Функціональна та об’єктна орієнтація - це зовсім різні стилі, і будь-який приклад, окрім жахливо простих, не підходив би до того чи іншого стилю.
1 Але останнім часом намагається розширити сферу застосування на загальне програмування, давайте подивимося, як це відбувається.
На закінчення:
- Концентруйтесь на вивченні Javascript, це прекрасна і надзвичайно корисна мова. Вивчіть мову, а не ажіотаж.
- Досить кілька різних парадигм, всі однаково корисні. Ви самі вирішуєте, який саме вам надаватимете перевагу, а який - найкраще, що б ви не будували.
- Якщо ви хочете вивчити функціональне програмування, виберіть більш підходящу мову, як-от Схема або Clojure . Але спочатку потрібно розібратися в математичних поняттях.
- Проведіть кілька досліджень, перш ніж запитати. На більшість ваших запитань відповідають відповідні статті у Вікіпедії. Знання, як досліджувати і як задавати, - надзвичайно важливий навик для будь-якого програміста.