Wat is functioneel programmeren? Zelfstudie met voorbeeld

Wat is functioneel programmeren?

Functioneel programmeren (ook wel FP genoemd) is een manier van denken over softwareconstructie door pure functies te creëren. Het vermijdt concepten van gedeelde staat, veranderlijke gegevens die worden waargenomen in objectgeoriënteerd programmeren.

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

In deze tutorial leer je-

Kenmerken van functioneel programmeren

  • Functionele programmeermethode richt zich op resultaten, niet op het proces
  • De nadruk ligt op wat moet worden berekend
  • Gegevens zijn onveranderlijk
  • Functioneel programmeren Deel het probleem op in 'functies'
  • Het is gebaseerd op het concept van wiskundige functies die voorwaardelijke uitdrukkingen en recursie gebruiken om de berekening 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 dertig ontwikkeld voor de functionele toepassing, definitie en recursie
  • LISP was de eerste functionele programmeertaal. McCarthy ontwierp het in 1960
  • Eind jaren 70 definieerden onderzoekers van de Universiteit van Edinburgh de ML (Meta Language)
  • In het begin van de jaren 80 voegt Hope-taal algebraïsche gegevenstypen toe voor recursie en vergelijkingsredenen
  • In het jaar 2004 Innovatie van Functionele taal 'Scala.'

Functionele programmeertalen

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

Hier zijn enkele van de meest prominente functionele programmeertalen:

  • Haskell
  • SML
  • Clojure
  • Ladder
  • Erlang
  • Schoon
  • F#
  • ML/OCaml Lisp / Schema
  • XSLT
  • SQL
  • Wiskunde

Basisterminologie en concepten voor functioneel programmeren

Onveranderlijke gegevens

Onveranderlijke gegevens betekent dat u gemakkelijk gegevensstructuren moet kunnen maken in plaats van bestaande structuren aan te passen.

Referentiële transparantie

Functionele programma's zouden bewerkingen moeten uitvoeren alsof het voor de eerste keer is. U weet dus wat er wel of niet is gebeurd tijdens de uitvoering van het programma en de bijwerkingen. In FP-termen wordt dit referentiële transparantie genoemd.

Modulariteit

Modulair ontwerp verhoogt de productiviteit. Kleine modules zijn snel te coderen en hebben een grotere kans op hergebruik wat zeker leidt tot snellere ontwikkeling van programma's. Afgezien daarvan kunnen de modules afzonderlijk worden getest, wat u helpt de tijd die wordt besteed aan het testen en debuggen van eenheden te 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

'Eersteklas functie' is een definitie die wordt toegeschreven aan programmeertaalentiteiten die geen beperking hebben op het gebruik ervan. Daarom kunnen eersteklas functies overal in het programma verschijnen.

Sluiting

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

Functies van hogere orde

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

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

Pure functie

Een 'Pure functie' is een functie waarvan de ingangen worden gedeclareerd als ingangen en geen van hen mag worden verborgen. De uitgangen worden ook als uitgangen gedeclareerd.

Pure functies werken op hun parameters. Het is niet efficiënt als u niets retourneert. Bovendien biedt het dezelfde output voor de gegeven parameters

Voorbeeld:

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

Onzuivere functies

Onzuiver functioneert precies in het tegenovergestelde van zuiver. Ze hebben verborgen inputs of outputs; 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

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

Gedeelde Staten

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

Bijwerkingen

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

De voordelen van functioneel programmeren

  • Hiermee kunt u verwarrende problemen en fouten in de code voorkomen
  • Eenvoudiger te testen en uit te voeren Unit testing en debug FP Code.
  • Parallelle verwerking en gelijktijdigheid
  • Hotcode-implementatie 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

  • Functioneel programmeerparadigma is niet eenvoudig, dus het is 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 vertegenwoordigen het probleem mogelijk niet correct

Functioneel programmeren versus objectgericht programmeren

Functionele programmering

OPEN

FP gebruikt onveranderlijke gegevens.

OOP gebruikt veranderlijke gegevens.

Volgt declaratief programmeren gebaseerd model.

Volgt het imperatief programmeermodel.

Waar het op focust is: 'Wat je doet. op het programma.'

Waar het zich op richt is 'Hoe je aan het programmeren bent'.

Ondersteunt parallel programmeren.

Geen ondersteuning voor parallel programmeren.

De functies hebben geen bijwerkingen.

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 uitspraken is niet erg belangrijk.

De volgorde van uitvoering van uitspraken is belangrijk.

Ondersteunt zowel 'Abstractie boven gegevens' als 'Abstractie boven gedrag'.

Ondersteunt alleen 'Abstractie over gegevens'.

Conclusie

  • Functioneel programmeren of FP is een manier van denken over softwareconstructie op basis van enkele fundamentele bepalende principes
  • Functionele programmeerconcepten zijn gericht 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 ingangen worden gedeclareerd als ingangen en geen van hen mag worden verborgen. De uitgangen worden ook als uitgangen gedeclareerd.
  • Onveranderlijke gegevens betekent dat u gemakkelijk gegevensstructuren moet kunnen maken in plaats van bestaande structuren aan te passen
  • 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