C# 9.0 is uit! Benieuwd wat het is en waarom je het zou willen gebruiken? Onze Arcadian Sander ten Brinke legt het je uit. Hij neemt je mee in de features van C# 9.0 en waarom hij hier zo blij van wordt. Ook geeft hij wat stukken voorbeeldcode waardoor je de nieuwe features beter begrijpt en zelf kunt toepassen. Doe er je voordeel mee!
Het begin.
Voor de mensen die C# (je spreekt het uit als C sharp) niet kennen, is C# een programmeertaal ontwikkeld door Microsoft. Het wordt vooral gebruikt in de object georiënteerde wereld, maar kan ook steeds breder worden ingezet. Het is vooral populair bij het bouwen van backend applicaties met bijvoorbeeld ASP.Net Core. Maar je kan er bijvoorbeeld ook met Unity of Godot games mee bouwen. Zelfs het bouwen van front-end applicaties met Blazor is tegenwoordig mogelijk. C# is eigenlijk een hele veelzijdige programmeertaal. Wil je meer weten over C# en hoe het wordt ontworpen? Check dan eens: github repo.
Wat is nieuw?
C# is aanbeland bij versie 9.0. Elke versie brengt nieuwe features en verbeteringen met zich mee. Ik zet de 4 meest interessante veranderingen (althans voor mij) voor je op een rij.
Init only setters
Init only setters maken het makkelijker om het instantiëren van een object wat "correcter" neer te zetten. Een goed voorbeeld is deze situatie:
In veel projecten maak je gebruik van DTO's. Dit zijn Data Transfer Objects, en zijn eigenlijk types die je gebruikt om data door te geven aan een andere laag van je applicatie. Deze DTO's kunnen vaak redelijk wat properties bevatten. Om zo'n type op een makkelijke manier te instantiëren kun je op dit moment twee dingen doen. 1) Je gebruikt een constructor. 2) Je gebruikt Object initializers, ook wel bekend als de properties, om het object aan te maken. Het gebruik van constructors bij klasse met veel properties brengt een aantal nadelen met zich mee. Deze zijn algemeen bekend. Vandaar dat ik hier niet verder op in ga. Wel vertel ik je meer over het gebruik van de Object initializers en hoe init only setters je kunnen helpen.
Stel we hebben de volgende DTO:
Er zijn wat nadelen met deze aanpak. Bijvoorbeeld dat je je properties hierna nog mag wijzigen door bijvoorbeeld userDto.Voornaam = achternaam; kan typen. Dit is niet gewenst; zo'n DTO maak je een keer aan en geef je door; je wilt properties niet meer wijzigen.
Init only setters helpen je hierbij met de volgende syntax:
Wanneer je nu een instantie hebt van het UserDto type en je probeert Voornaam te wijzigen
userDto.Voornaam = achternaam;
Dan zal je een error krijgen van de compiler. Je mag de property namelijk slechts één keer setten en dat is tijdens het instantiëren van het object.
Verbeteringen voor het new keyword
Tijdens de aankondiging van deze feature werden er redelijk wat negatieve reacties gegeven. Dit komt omdat er nu een 3de manier is om in je code de objecten aan te maken met het new keyword. De eerste manier is door het type expliciet te beschrijven:
UserRepository repository = new UserRepository ( ) ;
Dit is simpel genoeg. Het enige probleem met deze aanpak is dat je redelijk wat moet typen. In C# 3 is het var keyword geïntroduceerd. Dit maakt het iets makkelijker:
var repository = new UserRepository ( ) ;
Tijdens compile-time checkt de compiler het type dat erbij hoort. Als je probeert om het type te wijzigen (repository = new Dog ( ) ; ), krijg je een error. Het enige verschil is dus dat je wat minder hoeft te typen. Dit is vooral handig bij code zoals Dictionary<int,
UserState> dictionary = new Dictionary<int, UserState> ( ). Het is veel makkelijker om de code te lezen. Aan de rechterkant van de expressie zie je al van welk type het object het zal zijn, dus waarom zou je het aan de linkerkant ook vereisen?
Nu, in C# 9 wordt de 3de manier geïntroduceerd... Hou je vast!
Dictionary<int, UserState> dictionary = new ( ) ;
Nu denk je misschien: "Wat is het voordeel? Dit is het omgekeerde van het var keyword. Nu staat er meer code aan de linkerkant dan aan de rechterkant!". Dit was ook mijn eerste reactie, en ook de reactie van veel andere mensen. Maar wat blijkt, het is eigenlijk een zeer handige toevoeging.
In eerste instantie moest je deze stukken code typen:
In dit soort gevallen heb je redelijk veel code die je twee keer moet typen.
Nu nogmaals met het gebruik van new ( ):
Top-level statements
Top-level statements maken het een stuk makkelijker voor mensen om te beginnen met C#. Een bestand in je programma hoeft namelijk een stuk minder boilerplate te bevatten!
Het kan ook gebruikt worden in bestaande c# applicaties, maar ik raad dit af vanwege de restricties die opgelegd worden met het gebruik van deze feature. Maar ook vanwege het weinige voordeel dat het heeft in bestaande codebases. Ik kom zometeen nog terug op de restricties. Zie bijvoorbeeld dit standaard "Hello world" voorbeeld:
Voor mensen die C# kennen is dit simpel genoeg. We snappen wat er gebeurt. Maar voor beginners is dit een ander verhaal. Waar je met python gewoon met print ("Hello World!") begint, begin je met C# met de volgende onderwerpen:
Voor beginners is dit niet heel vriendelijk.
Top-level statements kunnen beginners hierbij helpen. Met top-level statements wordt de volgende code ‘onderwater’ hetzelfde als de code hierboven:
Dit is handig voor beginners! Zo kunnen ze beetje bij beetje meer leren over de onderwerpen die ik hierboven benoemde.
Daarnet had ik het over restricties. Dit zijn er twee:
Oftewel, gebruik dit om C# te leren. Misschien zelfs om een paar kleine console projecten te maken of misschien in kleine Azure Functions. Maar ik zou niet de Program.cs van een bestaand project aanpassen om dit te gebruiken. Voor mensen die deze feature niet kennen, zal het verwarrend zijn. Je krijgt niet veel voordeel hiervan.
Nog meer veranderingen die eraan gaan komen.
Ik hoop dat je het interessant vond om meer te lezen en te leren over C# 9.0. Wil je meer weten? Check dan dit artikel.
Naast C# 9.0 zal er binnenkort veel meer gebeuren in de wereld van .NET. Zo wordt .NET 5 uitgebracht, een nieuw framework dat probeert om alle verschillende .NET omgevingen (.NET Core, .NET Framework, Mono) samen te brengen. Daarnaast wordt er hard gewerkt aan .NET MAUI, een nieuw UI Framework van Microsoft. Hiermee kan je straks moderne UI applicaties bouwen voor zowel desktop als voor telefoons. Een evolutie van Xamarin.
Genoeg materiaal om je in te verdiepen dus! Zou je graag meer willen weten over deze ontwikkelingen, of heb je vragen over dit artikel? Mail mij gerust!
Sander ten Brinke | sander@arcady.nl