Dlaczego programowanie funkcjonalne

38

O co chodzi z programowaniem funkcjonalnym? Często o tym mówię, ale szczerze mówiąc, nigdy nie uważałem ich za użyteczne. Dlaczego tak wiele uniwersytetów najwyraźniej ich uczy?


źródło
6
Bardzo duży w programowaniu AI.
aqua
3
@aqua - czy nie powinna to być odpowiedź na pytanie dlaczego?
Martin Beckett
5
Chciałbym również zauważyć, że nawet tradycyjne języki OO zaczynają zawierać koncepcje programowania funkcjonalnego. Przykładem tego jest Linq (w .NET).
apoorv020
Myślę, że programowanie funkcjonalne bardziej ćwiczy mózg i może prowadzić do naprawdę zwartego kodu. Więc to całkiem fajne.
Adel
2
@ apoorv020: A generics, krotki i odśmiecanie i ... wszystko pochodzi z funkcjonalnych języków.
Jon Harrop

Odpowiedzi:

60

Zacznij od tego, dlaczego programowanie funkcjonalne ma znaczenie . Następnie przejść do czemu czemu funkcja programowania Matters Matters . Kilka pocisków:

  • Programowanie funkcjonalne pozwala na inne rozumowanie problemów
  • Abstrakcja funkcjonalna jest bardzo potężna i pozwala na OSUSZANIE kodu w sposób niedostępny dla innych paradygmatów
  • W naszej wielordzeniowej przyszłości języki funkcjonalne mogą być łatwiejsze do podziału na równoczesne zadania (chociaż języki, które nie są ściśle funkcjonalne, również ciężko pracują nad tym problemem).
  • Łatwiej jest udowodnić, że programy napisane w czysto funkcjonalnych językach (bez skutków ubocznych) są matematycznie poprawne.
Corbin March
źródło
5
+1 - To są wszystkie doskonałe punkty, które zostały wyjaśnione bardziej zwięźle i bardziej szczegółowo niż to, co próbowałem zrobić.
jmort253
1
Czy w czwartym punkcie miałeś na myśli, że język może być sprawdzony, czy programy napisane w tym języku? W każdym razie zarówno nieczyste języki, jak i programy napisane w nieczystych językach można udowodnić, że są poprawne, jest to po prostu dużo trudniejsze i bardziej chaotyczne.
Jörg W Mittag,
1
@ Jörg W Mittag, o wiele łatwiej jest też zrozumieć właściwości samego języka. Semantyka denotacyjna jest trywialna dla języków funkcjonalnych i dość skomplikowana dla trybu rozkazującego.
SK-logic
zabawne, jak drugi link zawiera pewne „wyraźne” argumenty, wiedząc, że nawet nie czytam pierwszego linku.
Jokoon
+1: Świetna odpowiedź. Szczególnie podoba mi się sposób, w jaki przypisujesz słowa punktom 1 i 2.
Jim G.
9

Koncepcje programowania funkcjonalnego budują fundament, który zmieni sposób myślenia i pomoże rozwiązać rzeczywiste problemy.

Ta koncepcja jest podobna do tego, dlaczego wszyscy uczymy się rachunku różniczkowego, algebry i / lub fizyki inżynierskiej na kierunkach informatycznych, chociaż nie zawsze potrzebujemy tej konkretnej wiedzy w naszych karierach.

Właśnie dlatego Law Schools uwielbia kandydatów z BS w matematyce. Studiowanie matematyki uczy logicznego myślenia o wielu koncepcjach, a programowanie funkcjonalne uczy abstrakcji i wielu innych ważnych pojęć, które pomagają rozwiązywać problemy i patrzeć na nie w innym świetle.

Podsumowując, programowanie funkcjonalne pomaga nauczyć się, jak się uczyć.

jmort253
źródło
Może więc tak naprawdę nie potrzebuje imienia? Czy to nie jest po prostu „poprawny” projekt programu?
4

Na początku programowanie funkcjonalne jest najlepszym modelem myślenia. Ponieważ większość twoich programów nie wymaga orientacji obiektowej. Przynajmniej takie było moje doświadczenie.

Jednak teraz, gdy zajmuję się niektórymi aplikacjami, które wymagają oddzielenia wyświetlania i logiki, wtedy zacząłem rozdzielać całą logikę i kod wyświetlania, aby ułatwić każdemu robienie tego, co jest najlepsze.

Ale nie będziesz wiedział, dlaczego to robić, chyba że najpierw opanujesz Functional. Nigdy nie lubiłem ludzi, którzy rzucali we mnie OO, ani że OO jest rozwiązaniem na wszystko. Po prostu upewnij się, że niezależnie od tego, jakie podejście zastosujesz, ma sens dla tego, nad czym pracujesz, i nie jest zbyt stromą krzywą uczenia się, aby poświęcić zbyt dużo czasu na pracę, za którą otrzymujesz wynagrodzenie.

Crosenblum
źródło
1
+1 - Podoba mi się, że zwracasz uwagę na stosowanie najlepszej techniki do pracy: upewnij się, że ma to sens.
jmort253
1
Niestety zdrowy rozsądek jest rzadkością w naszej branży. Ponieważ każdy z nas ma zupełnie inne doświadczenia, które z powodu błędów, które popełniamy, są różne, każdy z nas rozwija inne nawyki i dlaczego je robimy ... Takie jak dostosowanie kontroli źródła, nie ma sensu dla każdego, kto zawsze pracował przez oni sami.
crosenblum
„Zdrowy rozsądek jest najbardziej rozpowszechnioną rzeczą na świecie, ponieważ każdy uważa, że ​​jest tak dobrze wyposażony, że nawet ci, którzy są najtrudniejsi do zaspokojenia we wszystkich innych sprawach, nie mają zwyczaju pragnienia więcej niż już teraz mieć." - Kartezjusz
3

Ponieważ podkreśla czasowniki, a nie rzeczowniki. Czasami liczą się czasowniki.

Scant Roger
źródło
OOP podkreśla rzeczowniki. Czasami liczą się rzeczowniki. Skąd wiemy, który? - Fałszywy dylemat. System zatrzymany
3

Ponieważ ogólnie używa mniej kodu do wykonania tego samego zadania. Mniej kodu do napisania, mniej kodu do utrzymania. Poza tym, że jest mniej kodu, ma również tendencję do mniejszego stanu, a zatem jest nieco prostszy do uzasadnienia (kiedy już się do tego przyzwyczaisz).

Alex Baranosky
źródło
Czy to nie jest po prostu definicja „lepszego”? Dlaczego mielibyśmy robić cokolwiek innego niż to, co opisałeś?
2

Może dlatego, że uniwersytety chcą uczyć czegoś ze wszystkich paradygmatów programowania, a dla niektórych rzeczy lepsze jest programowanie funkcjonalne (np. Opisywanie ruchu postaci w grze i opisywanie animacji)

Coyote21
źródło