Wat is functioneel programmeren? Tutorial met voorbeeld

Wat is functioneel programmeren?

Functioneel programmeren (ook wel FP genoemd) is een manier van denken over softwareconstructie door het creëren van pure functies. Het vermijdt concepten van gedeelde status, veranderlijke data die worden waargenomen in Object Oriented Programming.

Functionele talen leggen de nadruk op uitdrukkingen en verklaringen in plaats van op de uitvoering van verklaringen. Daarom hangt de waarde-uitvoer in FP, in tegenstelling tot andere procedures die afhankelijk zijn van een lokale of globale status, alleen af ​​van de argumenten die aan de functie worden doorgegeven.

Kenmerken van functioneel programmeren

  • Functionele programmeermethode richt zich op de resultaten, niet op het proces
  • De nadruk ligt op wat er moet worden berekend
  • Gegevens zijn onveranderlijk
  • Functioneel programmeren Ontleed het probleem in 'functies'
  • Het is gebouwd op het concept van wiskundige functies, waarbij gebruik wordt gemaakt van voorwaardelijke uitdrukkingen en recursie om de berekeningen uit te voeren
  • Het ondersteunt geen iteratie zoals lusinstructies en voorwaardelijke instructies zoals If-Else

Geschiedenis van functioneel programmeren

  • De basis voor functioneel programmeren is Lambda Calculus. Het werd in de jaren 1930 ontwikkeld voor de functionele toepassing, definitie en recursie
  • LISP was de eerste functionele programmeertaal. McCarthy ontwierp het in 1960
  • Eind jaren zeventig definieerden onderzoekers van de Universiteit van Edinburgh de ML (Meta Language)
  • Begin jaren 80 voegt de Hope-taal algebraïsche gegevenstypen toe voor recursie en vergelijkingsmatig redeneren
  • In het jaar 2004 Innovatie van de functionele taal 'Scala.'

Functionele programmeertalen

Het doel van elke FP-taal is om de wiskundige functies na te bootsen. Het basisberekeningsproces is echter anders bij functioneel programmeren.

Hier zijn enkele van de meest prominente functionele programmeertalen:

  • Haskell
  • SML
  • Clojure
  • Scala
  • Erlang
  • Schoon
  • F#
  • ML/OCaml Lisp / Schema
  • XSLT
  • SQL
  • Mathematica

Basisterminologie voor functioneel programmeren en Concepts

Basisterminologie voor functioneel programmeren en Concepts

Onveranderlijke gegevens

Onveranderlijke gegevens betekent dat u gemakkelijk gegevensstructuren kunt creëren in plaats van bestaande structuren te wijzigen.

Referentiële transparantie

Functionele programma's moeten bewerkingen uitvoeren alsof het de eerste keer is. Zo weet u wat er wel of niet is gebeurd tijdens de uitvoering van het programma, en wat de neveneffecten zijn. In FP-termen wordt dit referentiële transparantie genoemd.

modulariteit

Modulair ontwerp verhoogt de productiviteit. Kleine modules kunnen snel worden gecodeerd en hebben een grotere kans op hergebruik, wat zeker leidt tot snellere ontwikkeling van programma's. Daarnaast kunnen de modules afzonderlijk worden getest, waardoor u de tijd die u besteedt aan het testen en debuggen van eenheden, kunt verminderen.

Onderhoudbaarheid

Onderhoudbaarheid is een eenvoudige term, wat betekent dat FP-programmering gemakkelijker te onderhouden is, omdat u zich geen zorgen hoeft te maken dat u per ongeluk iets verandert buiten de gegeven functie.

Eersteklas functie

'Eersteklasfunctie' is een definitie die wordt toegeschreven aan programmeertaalentiteiten waarvoor geen beperkingen gelden voor het gebruik ervan. Daarom kunnen eersteklas functies overal in het programma verschijnen.

Closure

De sluiting is een interne functie die toegang heeft tot variabelen van de bovenliggende functie, zelfs nadat de bovenliggende functie is uitgevoerd.

Functies van hogere orde

Functies van hogere orde nemen andere functies als argumenten of retourneren deze als resultaten.

Functies van hogere orde maken gedeeltelijke toepassingen of currying mogelijk. Deze techniek past een functie één voor één toe op zijn argumenten, omdat elke toepassing een nieuwe functie retourneert die het volgende argument accepteert.

Pure functie

Een 'Pure-functie' is een functie waarvan de invoer wordt gedeclareerd als invoer en geen enkele daarvan mag worden verborgen. De outputs worden ook gedeclareerd als outputs.

Pure functies reageren op hun parameters. Het is niet efficiënt als er niets wordt geretourneerd. Bovendien biedt het dezelfde uitvoer voor de gegeven parameters

Voorbeeld:

Function Pure(a,b)
{
	return a+b;
}

Onzuivere functies

Onzuiver functioneert precies het tegenovergestelde van zuiver. Ze hebben verborgen input of output; het wordt onrein genoemd. Onzuivere functies kunnen niet afzonderlijk worden gebruikt of getest, omdat ze afhankelijk zijn.

Voorbeeld

int z;
function notPure(){
	z = z+10;
}

Functie Samenstelling

Functiecompositie is het combineren van 2 of meer functies om een ​​nieuwe te maken.

Gedeelde staten

Gedeelde toestanden zijn een belangrijk concept bij OOP-programmering. Kortom, het voegt eigenschappen aan objecten toe. Als een harde schijf bijvoorbeeld een object is, kunnen opslagcapaciteit en schijfgrootte als eigenschappen worden toegevoegd.

Side Effects

Bijwerkingen zijn alle toestandsveranderingen die optreden buiten een opgeroepen functie. Het grootste doel van elke FP-programmeertaal is het minimaliseren van bijwerkingen, door ze te scheiden van de rest van de softwarecode. Bij FP-programmering is het essentieel om bijwerkingen uit de rest van uw programmeerlogica weg te nemen.

De voordelen van functioneel programmeren

  • Hiermee kunt u verwarrende problemen en fouten in de code voorkomen
  • Gemakkelijker om unit-tests te testen en uit te voeren en FP-code te debuggen.
  • Parallelle verwerking en gelijktijdigheid
  • Implementatie van hotcode en fouttolerantie
  • Biedt betere modulariteit met een kortere code
  • Verhoogde productiviteit van de ontwikkelaar
  • Ondersteunt geneste functies
  • Functionele constructies zoals Lazy Map & Lists, enz.
  • Maakt effectief gebruik van Lambda Calculus mogelijk

Beperkingen van functioneel programmeren

  • Het functionele programmeerparadigma is niet eenvoudig en dus moeilijk te begrijpen voor de beginner
  • Moeilijk te onderhouden omdat veel objecten evolueren tijdens het coderen
  • Heeft veel spot en uitgebreide omgevingsinstellingen nodig
  • Hergebruik is erg ingewikkeld en moet voortdurend worden aangepast
  • Objecten geven het probleem mogelijk niet correct weer

Functioneel programmeren versus objectgeoriënteerd programmeren

Functioneel programmeren OOP
FP gebruikt onveranderlijke gegevens. OOP gebruikt veranderlijke gegevens.
Volgt een op declaratief programmeren gebaseerd model. Volgt het imperatieve programmeermodel.
Waar het zich op richt is: “Wat je doet. op het programma.” Waar het zich op richt, is "Hoe u programmeert."
Ondersteunt parallelle programmering. Geen ondersteuning voor parallel programmeren.
De functies ervan hebben geen bijwerkingen. De methode kan veel bijwerkingen veroorzaken.
Flow Control wordt uitgevoerd met behulp van functieaanroepen en functieaanroepen met recursie. Het stroomcontroleproces wordt uitgevoerd met behulp van lussen en voorwaardelijke instructies.
De volgorde van uitvoering van verklaringen is niet erg belangrijk. De volgorde van uitvoering van verklaringen is belangrijk.
Ondersteunt zowel ‘Abstractie boven gegevens’ als ‘Abstractie boven gedrag’. Ondersteunt alleen “Abstractie via gegevens”.

Conclusie

  • Functioneel programmeren of FP is een manier van denken over softwareconstructie gebaseerd op enkele fundamentele definiërende principes
  • Functionele programmeringsconcepten richten zich op resultaten, niet op het proces
  • Het doel van elke FP-taal is om de wiskundige functies na te bootsen
  • Enkele meest prominente functionele programmeertalen: 1)Haskell 2)SM 3) Clojure 4) Scala 5) Erlang 6) Clean
  • Een 'Pure-functie' is een functie waarvan de invoer wordt gedeclareerd als invoer en geen enkele daarvan mag worden verborgen. De outputs worden ook gedeclareerd als outputs.
  • Onveranderlijke gegevens betekent dat u gemakkelijk gegevensstructuren kunt creëren in plaats van bestaande structuren te wijzigen
  • Hiermee kunt u verwarrende problemen en fouten in de code voorkomen
  • Functionele code is niet eenvoudig, dus moeilijk te begrijpen voor de beginner
  • FP gebruikt onveranderlijke gegevens, terwijl OOP veranderlijke gegevens gebruikt