Hallo, beste medetweakers,
Het viel me op dat er hier in het Programming-board nog erg weinig informatie te vinden was over Functioneel Programmeren, dus: bij deze.
Ik ben zelf developer en student Computing Science in Groningen. Naast dat ik veel werk met Object-georienteerde talen zoals Ruby en C++ ben ik de laatste tijd bezig om me meer en meer te verdiepen in functionele programmeertalen, waaronder Haskell en Elixir.
Wat is Functioneel Programmeren?
Het meest fundamentele verschil tussen Functioneel Programmeren(FP) en de meeste andere programmeertalen, is dat datastructuren in FP immutable(onveranderbaar) zijn. Een variabele is dus niet 'een doosje waar je iets in kunt stoppen', maar een label dat je geeft aan een bepaalde waarde.
Over het algemeen bestaan er geen globale variabelen of dergelijke, wat betekent dat de enige manier om informatie door te geven tussen onderdelen van je applicatie, het meegeven van parameters aan je functies is. Dit heeft als voordeel dat het resultaat van een functie altijd* hetzelfde is wanneer je het opnieuw aanroept.
Andere belangrijke features die vaak gevonden worden in FP-talen zijn:
Waarom zou ik Functioneel willen programmeren ipv. bijv. Object-georienteerd?
De functionele manier is een heel andere manier van denken, die veel dichter bij de wiskunde ligt. Voor sommige taken is dit een veel logischere manier om een probleem te benaderen. Er zijn ook minder dingen die je 'fout' kunt aanleren:

Daarnaast heeft een functionele programmeertaal heeft relatief weinig keywords/regels, t.o.v. veel imperatieve of object-georienteerde talen, en is daarom relatief makkelijk te leren (in mijn mening).
En misschien wel het belangrijkste: Omdat alles functies zijn, en er dus geen 'verborgen staat' is die gewijzigd kan worden, maar het resultaat altijd een bewerking is van de input-parameters van een functie, is het eenvoudig(er) om het overzicht te houden; Om dezelfde reden is het ook eenvoudig(er) om code te verplaatsen en aan te passen tijdens bijv. refactoren.
Nu ben ik benieuwd:
Zijn hier al mensen die zelf functionele programmeertalen kennen, en misschien ook dagelijks gebruiken? En zijn er mensen die deze talen ook voor hun werk inzetten?
Het viel me op dat er hier in het Programming-board nog erg weinig informatie te vinden was over Functioneel Programmeren, dus: bij deze.
Ik ben zelf developer en student Computing Science in Groningen. Naast dat ik veel werk met Object-georienteerde talen zoals Ruby en C++ ben ik de laatste tijd bezig om me meer en meer te verdiepen in functionele programmeertalen, waaronder Haskell en Elixir.
Wat is Functioneel Programmeren?
Het meest fundamentele verschil tussen Functioneel Programmeren(FP) en de meeste andere programmeertalen, is dat datastructuren in FP immutable(onveranderbaar) zijn. Een variabele is dus niet 'een doosje waar je iets in kunt stoppen', maar een label dat je geeft aan een bepaalde waarde.
Over het algemeen bestaan er geen globale variabelen of dergelijke, wat betekent dat de enige manier om informatie door te geven tussen onderdelen van je applicatie, het meegeven van parameters aan je functies is. Dit heeft als voordeel dat het resultaat van een functie altijd* hetzelfde is wanneer je het opnieuw aanroept.
Andere belangrijke features die vaak gevonden worden in FP-talen zijn:
- Pattern-Matching: Ook wel bekend als 'parametric polymorphism on steroids'; de mogelijkheid om stukjes van een datastructuur los een naam te geven, en om meerdere varianten van een functie te maken die anders werken, afhankelijk van wat voor data er in wordt gestopt.
- Structural Typing: Onderscheid tussen datastructuren wordt gemaakt afhankelijk van hoe ze in elkaar zitten, ipv welke naam je er aan gegeven hebt.
- Function Application/Currying: Functies zijn 'ook gewoon data' en kunnen gewoon worden gebruikt als parameters, in variabelen, etc. Daarnaast kun je in veel FP-talen geleidelijk parameters invullen in een functie (ipv. dit persé in één keer te dienen doen). Op deze manier kun je heel generieke functies maken.
- Memoization: Een 'pure' functie (die geen neveneffecten veroorzaakt) geeft altijd hetzelfde antwoord wanneer je er dezelfde input in stopt. Sommige talen slaan dus het antwoord van de eerste aanroep op, waardoor bepaalde algoritmen een stuk sneller worden.
Waarom zou ik Functioneel willen programmeren ipv. bijv. Object-georienteerd?
De functionele manier is een heel andere manier van denken, die veel dichter bij de wiskunde ligt. Voor sommige taken is dit een veel logischere manier om een probleem te benaderen. Er zijn ook minder dingen die je 'fout' kunt aanleren:

Daarnaast heeft een functionele programmeertaal heeft relatief weinig keywords/regels, t.o.v. veel imperatieve of object-georienteerde talen, en is daarom relatief makkelijk te leren (in mijn mening).
En misschien wel het belangrijkste: Omdat alles functies zijn, en er dus geen 'verborgen staat' is die gewijzigd kan worden, maar het resultaat altijd een bewerking is van de input-parameters van een functie, is het eenvoudig(er) om het overzicht te houden; Om dezelfde reden is het ook eenvoudig(er) om code te verplaatsen en aan te passen tijdens bijv. refactoren.
Nu ben ik benieuwd:
Zijn hier al mensen die zelf functionele programmeertalen kennen, en misschien ook dagelijks gebruiken? En zijn er mensen die deze talen ook voor hun werk inzetten?
[ Voor 5% gewijzigd door Qqwy op 30-10-2016 18:22 ]