Skip to main content

Wat is functioneel programmeren?

Functioneel programmeren is een programmeerparadigma waarbij de basisbasis de evaluatie van uitdrukkingen is.Sommige kenmerken zijn het gebruik van functies van hogere orde, referentiële transparantie en luie evaluatie.De voordelen van de programmeerstijl omvatten dat programma's gemakkelijk te lezen zijn, zeer betrouwbaar zijn en kunnen worden onderverdeeld in componenten.Nadelen zijn dat berekeningen traag kunnen zijn en de stijl en syntaxis volledig verschillen van andere gemeenschappelijke programmeerstijlen.De functionele programmeerstijl wordt vaker omarmd door academici dan door computerwetenschappelijke professionals.

Zoals de naam al doet vermoeden, zijn functies een fundamenteel onderdeel van dit programmeerparadigma.Functies kunnen worden genest in andere functies, genaamd Higher Order-functies en elke functie van hogere orde kan worden onderverdeeld in bouwblokfuncties die gemakkelijk te begrijpen en te debuggen zijn.Voorbeelden van enkele hogere orde functies zijn kaart en nest.De functiekaart neemt een functie F en de lijst met variabelen, bijvoorbeeld (x, y, z) en geeft het resultaat in een lijst: kaart [f, (x, y, z)] ' (f (x), f(y), f (z)).Nest neemt de functie F, de variabele x en het aantal iteraties: nest [f, x, 3] ' f (f (x))).

Pure functionele programmering neemt een invoer en retourneert een uitvoer zonder ooit de status van een variabele te wijzigen.Met andere woorden, een functie met dezelfde invoer zal altijd dezelfde resultaten opleveren, ongeacht wat eerder in het programma is gebeurd.Dit wordt referentiële transparantie genoemd.Aangezien wiskundige functies referentieel transparant zijn, is functionele programmering intuïtief voor veel wiskundigen, ingenieurs en wetenschappers.

De referentiële transparantie van functies betekent dat de volgorde van functie -evaluatie niet belangrijk is.Daarom hoeven functies niet te worden geëvalueerd totdat hun resultaten nodig zijn, wat luie evaluatie wordt genoemd.Dit staat volledig in contrast met imperatieve programmering, waarbij een programma begint met de eerste opdracht en de lijst doorloopt tot de laatste opdracht.Lazy evaluatie gaat over delen van het programma die niet logisch volgen of overbodig zijn, wat het programma automatisch optimaliseert en de rekentijd kan verminderen.

Functionele programmering heeft veel voordelen ten opzichte van andere programmeerparadigma's.Functies met duidelijke ingangen en uitgangen zijn eenvoudig te lezen en te begrijpen.Zodra een functie grondig is opgelost, kan deze betrouwbaar worden gebruikt in andere toepassingen.Multicore machines kunnen mogelijk functies berekenen die onafhankelijk parallel worden geëvalueerd, waardoor de prestaties van programma's drastisch worden verbeterd.

Helaas lenen niet alle programma's zich voor parallel computing, en computerfunctionele programma's kunnen nogal traag zijn.Functionele programma's zijn sterk afhankelijk van recursie, wat vaak minder efficiënt is dan het gebruik van traditionele lussen of iteratiemethoden.In feite kan functionele programmering behoorlijk onhandig en moeilijk te leren zijn, omdat het niet lijkt op andere meer gebruikelijke paradigma's zoals objectgeoriënteerde programmering.

Academici hebben de voorkeur aan functionele programmering, omdat het een duidelijke en begrijpelijke manier biedt om complexe echte problemen te programmeren.Sommige pure talen zijn Haskell en Erlang.Mathematica is gespecialiseerd in symbolische wiskunde, R is gespecialiseerd in statistieken en J is gespecialiseerd in financiële analyse.Multiparadigm -talen zoals Scala en F# ondersteunt zowel functionele programmering als andere programmeerstijlen.