Meetup verslag: Functional and reactive programming with André Staltz

In de vorige nieuwsbrief stond de meetup ‘Functional and reactive programming with André Staltz’ vermeld en zowel Joost als ik (Arno) zijn daar heen geweest.

André Staltz volg ik zelf al langere tijd vanuit mijn fascinatie voor Reactive Programming, Reactive Extensions en alles dat daar aan vast hangt. Het is iemand die veel van het onderwerp afweet. Hij is o.a. ontributer aan RxJS.

Daarnaast heeft hij een eigen Javascript frontend framework gemaakt genaamd Cycle js dat origineel op RxJS gebouwd was, maar waar hij later een eigen stream library onder gelegd heeft. Het is een uitermate interessant framework dat eer doet aan de term ‘reactive’ en conceptueel zelfs links heeft Haskell (de oude streams IO). En daarnaast is het iemand die een duidelijk mening heeft over software ontwikkeling en dat ook regelmatig ventileert. Online zijn er verschillende talks van hem te zien (zie onderaan de blog) en ik was dus benieuwd wat hij deze avond te vertellen had.

Talk 1: OOP vs. FP
De eerste talk ging over de verhouding tussen Object Oriented Programming en Functional Programming. Hierbij maakte hij een vergelijk op 5 onderdelen ‘Dynamic vs. Typed’, ‘Assignment semantics vs Assignment syntax’, ‘Mutation vs. immutability’, ‘Objects vs. Closures’ en ‘Execute vs. Evaluate’. Tijdens zijn talk gaf hij mooi weer wat verschillen zijn in OOP en FP talen maar ook waar ze concepten en ideeën van elkaar overnemen. Bijvoorbeeld OOP talen zoals C# en Java waar steeds meer FP concepten als higher order functions en closures ingekomen zijn, maar bijvoorbeeld ook de Haskell do notation waardoor je een imperatieve assignment syntax krijgt binnen een functionele taal. En aan het einde liet hij nog de taal Koka zien. Een puur functionele taal waarbij side effects nog explicieter zijn gemaakt dan in Haskell maar wel met een ‘bekende’ javascript-achtige syntax. De slides van de talk zijn hier te vinden. Mocht je het interessant vinden maar je mist context bij de slides, zoek mij dan een keer op (of mail me), ik vind het leuk om het er over te hebben.

Talk 2: Live coding getter-getters, setter-setters, enumerables en observables
De tweede talk ging over getters, setters, getter-getters, setter-setters, getter-setter-setters en nog meer gekkigheid. Geïnspireerd door een video van Erik Meijer dook André door middel van live coding in de achtergrond van Observables, (async) callback, en enumerable/iterable.

Enkele sprekende voorbeelden:

Een … Functie type… En dat zegt… Dus het is een…
Getter () →  T Geeft een waarde. Niks er in, waarde er uit Getter (simpel)
Setter T → () Ontvangt een waarde. Waarde er in, niks er uit Setter (simpel)
Getter-getter () → ( () → T ) Een functie die je niets geeft en die een functie teruggeeft die, als je hem niets geeft een waarde geeft Enumerable/Iterable
Setter-setter ( T → () ) → () Ontvangt een functie die een waarde ontvangt Observable

En zo had André nog een heel aantal andere combinatie van getters en setters waarbij hij de karakteristieken uiteenzette. Begrijp je de tabel niet in één keer, dat hadden de meeste bezoekers ook. In de chaotiek van het live coden, inclusief af en toe een foutje, was het soms wat lastig te volgen en duurde het even voordat duidelijk werd wat hij wilde aantonen. Ik ga dat hier niet proberen, maar ben je geïnteresseerd kijk dan eens naar https://www.youtube.com/watch?v=sTSQlYX5DU0. Daar legt Erik Meijer het nog eens uit.

Bij elkaar een uitermate interessante avond.


Iedere maand komt de interne Sogyo nieuwsbrief uit. Daarin delen we met collega’s leuke feitjes en nieuwtjes over Sogyo. Een onderdeel van de nieuwsbrief is ook een selectie van interessante Meetup’s.  Bovenstaande beschrijving geeft een korte indruk van de ervaring  van deze meetup.