Managed hosting door True
Deze opinie is van een externe deskundige. De inhoud vertegenwoordigt dus niet noodzakelijk het gedachtegoed van de redactie.

Populariteit functionele talen stijgt

 

Als je vanuit het niets binnenkomt op de tweede plek in het lijstje van favoriete programmeertalen, dan doe je iets goed. Het gebeurde Kotlin onlangs; jaarlijks publiceert Stack Overflow de resultaten van een onderzoek naar de favoriete programmeertalen onder ontwikkelaars, studenten en onderzoekers. Kotlin was daarbij de hoogste nieuwe binnenkomer, op nummer twee. De nummer één is, net als vorig jaar, Rust.

Wat vooral opvalt, is dat het functionele paradigma in opmars is in ontwikkelaarsland. Zowel de nummers één als twee in de lijst (Rust en Kotlin) hebben veel functionele aspecten en dat geldt ook voor andere talen die hoog eindigen, zoals Scala en Go.

Dat is een opvallende verandering, omdat al sinds de jaren negentig met name objectgeoriënteerde talen in zwang zijn - en daar lijkt nu dus verandering in te komen. Niet alleen stijgt de populariteit van functionele programmeertalen, ook zie je dat objectgeoriënteerde talen zoals C#, Java en C++ steeds meer functionele elementen in zich krijgen.

Functioneel versus objectgeoriënteerd

"Functionele programmeertalen hebben een heel ander uitgangspunt."

Voordat we op zoek gaan naar een verklaring hiervoor, is het goed om eerst eens te kijken naar het verschil tussen de twee talenfamilies. Objectoriëntatie is gebaseerd op het idee dat je in een programma een model van de werkelijkheid probeert te creëren. Net zoals je in de werkelijkheid objecten herkent (zoals een auto of een stoel), maken objectgeoriënteerde programmeertalen ook gebruik van abstracte objecten, zoals ‘bedrijf’ of ‘contract’. In deze benadering probeer je de code zo dicht mogelijk bij de werkelijkheid te laten aansluiten.

Functionele programmeertalen hebben een heel ander uitgangspunt. Deze talen zijn gebaseerd op het principe van het wiskundige functiebegrip. Er is een functie, daar stop je input in en je krijgt er een output uit (een returnwaarde).

Hoe werkt dat in de praktijk? Neem bijvoorbeeld een hr-applicatie. In een objectgeoriënteerde aanpak werk je dan bijvoorbeeld met een collectie met werknemers (de objecten). Als deze werknemers een salarisverhoging krijgen, pas je, een voor een, de bijbehorende objecten aan. Als deze hr-applicatie in een functionele taal is geschreven, dan zul je waarschijnlijk te maken hebben met een lijst met werknemers. Als deze werknemers een salarisverhoging krijgen, dan beschrijf je door middel van een functie hoe het resultaat eruit moet zien: een lijst met werknemers, waarvan het salaris hoger is.

Dat is dus een wezenlijk andere benadering van programmeren. Maar hoe komt het dat deze manier van programmeren terrein lijkt te winnen?

Immutability

Een van de belangrijkste eigenschappen van functionele programmeertalen - en de reden waarom ze zo populair zijn - is dat ze worden gekenmerkt door een concept dat immutability heet.

Immutability wil zeggen dat een voorwerp onveranderlijk is; als je het eenmaal hebt gecreëerd, dan kun je het niet meer aanpassen. Dit is een stuk eenvoudiger toe te passen binnen functionele talen dan binnen objectgeoriënteerde talen. Datastructuren zijn binnen functionele talen onveranderbaar (immutable dus); er wordt niet gewerkt met variabelen, in plaats daarvan werk je met waarden die worden meegegeven aan een bepaalde functie.

Dat is een wezenlijk verschil met de objectgeoriënteerde aanpak. Als binnen een objectgeoriënteerd model een object is aangemaakt als beeld van de werkelijkheid (de werknemer in het voorbeeld) en de werkelijkheid verandert (een hoger salaris), dan is het gevolg dat het object ook verandert. En omdat de werkelijkheid nu eenmaal de neiging heeft om voortdurend te veranderen, veranderen de objecten in een objectgeoriënteerd model ook steeds.

Bij functionele talen staan niet objecten centraal, maar parameters en die worden bij elke aanroep opnieuw meegegeven. Immutability is daardoor eenvoudiger binnen functionele talen dan in objectgeoriënteerde talen.

Immutability is de afgelopen jaren een belangrijkere eigenschap geworden van software, omdat organisaties applicaties steeds vaker verspreiden over verschillende cores of processoren – hetzij fysiek, of in de cloud. Dit zogeheten parallelliseren van software is veel eenvoudiger te realiseren als een applicatie is geschreven in een functionele programmeertaal.

Daar komt nog bij dat functionele talen meer declaratieve aspecten hebben dan objectgeoriënteerde talen, wat het ook weer eenvoudiger maakt om applicaties te parallelliseren.

Schaalbaarheid

"In objectgeoriënteerde talen zoals C#, Java en C++ sluipen steeds meer functionele aspecten."

Nu zijn functionele talen niet nieuw; in de wetenschappelijke wereld zijn deze allang populair. Maar de recente opmars laat zien dat deze ‘taalgroep’ een streepje voor lijkt te krijgen op de objectgeoriënteerde talen waar de meeste developers nu nog gewend zijn om mee te werken. Daar komt bij dat in objectgeoriënteerde talen zoals C#, Java en C++ steeds meer functionele aspecten sluipen.

Deze opmars is dus vooral te verklaren door de groeiende behoefte binnen it om applicaties schaalbaar te maken en dus over meerdere processoren te verdelen.

Aanpassing

Voor veel developers die gewend zijn om op een objectgeoriënteerde manier te werken, betekent dit een hele omslag. Ook als ze gespecialiseerd blijven in objectgeoriënteerde talen - die voorlopig ook nog wel populair zullen blijven - dan zullen ze toch ook moeten wennen aan functionele aspecten.

Het leren van een nieuwe taal is daarbij niet de grootste uitdaging, maar wel het aanmeten van een andere manier van denken. Wie bij wil blijven als developer, doet er goed aan zich te verdiepen in functionele talen en zich de functionele aspecten van objectgeoriënteerde talen eigen te maken.

Gert Jan Timmerman, manager kenniscentrum bij Info Support,

Dit artikel is afkomstig van Computable.nl (https://www.computable.nl/artikel/6330734). © Jaarbeurs IT Media.

?


Lees meer over


 

Reacties

- zouden functionele talen niet ook veel meer objectgeorienteerde elementen in zich krijgen ?
- zijn objectmethoden niet gewoon functies op het object, dus nog steeds functies met of zonder parameters ?
- hoe kom je op een algemene stelling "Datastructuren zijn binnen functionele talen onveranderbaar (immutable dus)" ?
- waarom wordt immutability zo gekoppeld aan functionele programmeertalen, als de immutable oplossingen in zoveel soorten talen zijn geimplementeerd (immutable object, strings, tuples) ?
- zijn talen als ruby en python functionele talen met veel objectorientatiemogelijkheden of objectoriented talen met veel functionele mogelijkheden ?
- is het werknemervoorbeeld niet een typische database toepassing met CRUD bewerkingen met REST als oplossing voor schaling, die je dan horizontaal doet ? Waarom maar 1 voorbeeld en dan juist deze ?

@Dino, "zouden functionele talen niet ook veel meer objectgeorienteerde elementen in zich krijgen ?" => Er ontstaan steeds meer hybride talen naast de puur functionele en puur oo-talen.

@Dino, -"zijn objectmethoden niet gewoon functies op het object, dus nog steeds functies met of zonder parameters ?" => ja, dat klopt wel, maar functionele talen zijn gebaseerd op het wiskundige functiebegrip. In het wiskundige functiebegrip is een functie een mapping van input-waardes naar output-waardes, zonder side-effects.
-"hoe kom je op een algemene stelling "Datastructuren zijn binnen functionele talen onveranderbaar (immutable dus)" ?" =>Een wiskundige functie brengt geen wijzigingen aan. Vandaar immutability.
-"waarom wordt immutability zo gekoppeld aan functionele programmeertalen, als de immutable oplossingen in zoveel soorten talen zijn geimplementeerd (immutable object, strings, tuples) ?" => Ook binnen andere talen bestaat immutability, maar dat is dan een keuze. Binnen (zuivere) functionele talen zijn datastructuren per definitie immutable.
-"zijn talen als ruby en python functionele talen met veel objectorientatiemogelijkheden of objectoriented talen met veel functionele mogelijkheden ?" => het is maar hoe je er tegenaan kijkt.
-"is het werknemervoorbeeld niet een typische database toepassing met CRUD bewerkingen met REST als oplossing voor schaling, die je dan horizontaal doet ?" => je kunt werknemers in een database opslaan en dan heb je misschien een relationeel model (als je een relationele database gebruikt). In mijn voorbeeld heb ik me beperkt tot het vergelijken van OO en functioneel, maar dat zijn niet de enige mogelijkheden om werknemers te bewerken. Een (relationele) database is ook een mogelijkheid.
-"Waarom maar 1 voorbeeld en dan juist deze ?" => 1 voorbeeld omdat dat voorbeeld het verschil goed duidelijk maakt. Een tweede voorbeeld voegt niet veel toe.

Jouw reactie


Je bent niet ingelogd. Je kunt als gast reageren, maar dan wordt je reactie pas zichtbaar na goedkeuring door de redactie. Om je reactie direct geplaatst te krijgen, moet je eerst rechtsboven inloggen of je registreren

Je naam ontbreekt
Je e-mailadres ontbreekt
Je reactie ontbreekt

Stuur door

Stuur dit artikel door

Je naam ontbreekt
Je e-mailadres ontbreekt
De naam van de ontvanger ontbreekt
Het e-mailadres van de ontvanger ontbreekt

×
×
Wilt u dagelijks op de hoogte worden gehouden van het laatste ict-nieuws, achtergronden en opinie?
Abonneer uzelf op onze gratis nieuwsbrief.