Een paar jaar programmeren in Dart

Mijn eerste kennismaking met Dart (en Flutter) was eind 2019, toen Flutter nog versie 1.x had. De directe aanleiding was dat ik langzamerhand klaar was met het fragiele ecosysteem van CodenameOne waar ik inmiddels verschillende apps in had ontwikkeld, en daarom op zoek ging naar alternatieven. Mijn verwondering was groot over de kwaliteit en documentatie van de tooling die op dat moment al beschikbaar was, en de hot-reload feature die ontwikkeling van apps zoveel soepeler maakt. – Ik was meteen verkocht.

In eerste instantie heb ik de rol van de programmeertaal Dart over het hoofd gezien. Het leek voor mij samengevat een afgeleide van JavaScript met een Java smaakje, wat klopt met de historie van Flutter en Dart in de web wereld. Het overdadig gebruik van async/await bevestigde deze eerste indruk. Die bekendheid maakte de leercurve als beginner in ieder geval aangenaam.

Een verstandige keuze (op basis van mijn ervaringen in JavaScript) was om vanaf het begin vast te houden aan static typing, en het dynamic keyword te schuwen. Daarbij stond ik er destijds nog niet stil bij de luxe van krachtige type-inference, die veel beter is dan in Java. Ook besefte ik mij nog niet welke wereld er achter microtasks en het concurrency model zit. Wel kreeg ik door het gedrag van het const keyword en beperkingen van constructors steeds meer het gevoel dat Dart gericht is op statische compilatie naar efficiënte native code, en niet zo veel op JavaScript lijkt dan ik in eerste instantie dacht.

Toen ik door de eerste leercurve heen was, begon mij het gevoel te bekruipen dat Dart veel meer te bieden had dan ik op dat moment gebruikte. Dit begon pas goed tot me door te dringen toen sound null safety zijn intrede deed, en alle NPE problemen die voor mij zo vertrouwd zijn uit Java in één klap opgelost werden. Ook begon ik te ervaren dat Dart vele manieren heeft om code expressiever te maken, en begon ik me te irriteren aan langdradige Java backend code. Het werd een tijd waarin ik me verder ben gaan verdiepen in de meer geavanceerde mogelijkheden van Dart als programmeertaal, wat de kwaliteit van mijn code sterk heeft verbeterd. Voorbeelden hiervan zijn: type extensions, type definities, tearoffs, en operator overloading.

Ondertussen blijft Dart zich door de populariteit van Flutter in een rap tempo ontwikkelen. Ik hoop dat dit de taal verder compleet maakt, en als cross-platform taal ook buiten Flutter zijn toepassingen gaat vinden. In ieder geval beginnen er (opnieuw) backend frameworks te ontstaan, waarmee Dart zomaar de basis kan worden voor andere soorten cross-platform ontwikkeling zoals command-line tools en zelfs native gecompileerde server software.