Tijdens verschillende sessies is op de build Conference uit de doeken gedaan hoe de toekomst van C#, het .Net framework en Visual Studio eruit ziet. Een aantal onderdelen zijn deze week beschikbaar geworden in de Visual Studio 2015 Update 2 release, en een aantal zaken zullen pas in de volgende release terecht komen. Hier onder een overzicht.

Inner loop

De aandacht van Microsoft is vooral gevestigd op de handelingen die je als ontwikkelaar vaak doet, sneller of makkelijker te maken. Deze ‘inner loop’ van herhalende handelingen moet dus aantrekkelijker worden en dat moet lukken met onderstaande verbeteringen.
 

Binaire getal notatie

Laten we beginnen met een stukje code. Op het eerste gezicht gewoon C#, maar als je iets verder kijkt begint het met array van getallen met binaire getal notatie. De underscores mogen naar hartenlust worden toegevoegd om de leesbaarheid te verhogen, maar worden feitelijk genegeerd door de compiler.
 
 

Inline functions

Het tweede dat moet opvallen is dat de "Tally” methode gedefinieerd is binnen de "Main” methode. Deze "Tally” inline functie kun je dus alleen binnen de "Main” methode aanroepen, maar voorkomt vervuiling van de grotere scope. In dit voorbeeld biedt het weinig voordeel, maar soms wordt de code een stukje leesbaarder of als je herhalende stukken code hebt, kunt je die in een inline functie onderbrengen.
 

Tuples

Ten derde retourneert de "Tally” methode niet 1, maar 2 waardes. Of te wel Tuples worden nu ook ondersteund in C#. In dit geval zijn het 2 integers, maar het mogen ook andere (combinaties) van types zijn en ook meerdere waardes.
 

String literals

De String.Format() functie is natuurlijk prima om de string concatenatie overzichtelijker te maken dan alles aan elkaar te plussen, maar toch kan het nog mooier. Hier zie je WriteLine gebruik maakt van de "$” waarna op de juiste plekken direct parameters kunnen worden geplaatst. Ik dacht overigens dat dit ook al in C# 6 beschikbaar was (net als de binaire getallen), maar kan geen kwaad om nog eens te noemen.
 

Is operator

Stel de methode verwacht geen integer Array, maar een lijst van objects. Dan zul je dus het type moeten controleren met de ‘is’ operator en vervolgens moeten casten. In C# 7 kan dat in 1 keer zoals hier onder in de ‘if’ statement. Hier wordt ‘v’ gecontroleerd op ‘int’ en direct gecast in de variabele ‘i’ geplaatst als dat het geval is. Scheelt toch weer een regel.
 
 

Switch case

De switch case kan voortaan ook worden toegepast op andere zaken dan alleen de primitieve types. Zo kun je nu een switch case doen op het type zelf. En als we dan toch bezig zijn, direct de toekenning doen op een variabele. De lijst van nummers is in dit voorbeeld nu aangepast in en object Array waarin getallen, of andere object arrays zitten. Klinkt niet als dagelijkse praktijk, maar hopelijk toont het wel het idee van switchen op type.
 
 

When filter

Maar een Object Array kan natuurlijk leeg zijn en null zijn, dus daar willen we dan ook op kunnen switchen. Daarvoor kun je met "when” een filter toepassen op de case. Hieronder wordt de "Tally” methode alleen uitgevoerd als er iets in het Array zit.
 
 
Overigens is de "is” operator ook te gebruiken om andere checks uit te voeren. Kijk maar eens naar onderstaande voorbeeld waarbij alleen de professors die "Scott” heten eruit worden gefilterd. Beetje wennen, maar wel compact.
 
 

Ref return values

Een methode argument meegeven "by Ref” kennen we al vanaf het begin. Maar een output parameter by Ref, dat is nieuw. Stel je zoekt naar een bepaalde waarde in een Array en je zou dat retourneren, dan krijg je alleen die waarde. Prima, maar soms wil je niet zo zeer de waarde, maar de referentie naar de entry in de Array. Dat is dus op te lossen met een Ref return parameter, zoals hieronder uitgewerkt.
 
 

Visual Studio

Zoals al beschreven in de blog over Dag 2 van de //build/, gaat de installatie procedure van Visual Studio behoorlijk op de schop. Het wordt veel meer modulair zodat de download rond de 200MB uitkomt i.p.v. meer dan 1GB en de installatie in enkele minuten plaats vindt in plaats van een uur.
 

Intellisense

Intellisense wordt weer een stukje intelligenter gemaakt. Zo herkent hij bijvoorbeeld de hoofdletters binnen Pascal- en Camel Casing.  Zoals je hieronder ziet wordt bijvoorbeeld de "WL” te typen de WindowLeft property en WriteLine methode gevonden.
 
 
Het komt ook wel een voor dat je wel een gedeelte van de naam weet van de member die je zoekt, maar niet precies met welk woord het ook al weer begon. Hieronder zie je dat door "args” in te typen, de "args” parameter herkent wordt, maar ook andere mogelijkheden waar "args” in voor komt.
 
 

Fuzzy

Intellisense krijgt ook een soort van fuzzy search waarbij een kleine typefout je vergeven wordt. Hieronder zie je dat "xlmDocument” niet juist gespeld is, maar dat er wel een suggestie komt voor "XmlDocument”. En dat is extra knap omdat de juiste ‘using’ daarvoor ontbreekt.
 
 

References

Overigens is hij niet alleen slim in het toevoegen van ‘usings’ maar hij herkent zelf classes die niet gereferenced zijn en biedt aan om dit voor je op te lossen.
 
 
Nu komt het vaak voor dat je heel veel projecten in je solution hebt, terwijl je er slechts een aantal echt aan het ontwikkelen bent. De andere projecten heb je erbij omdat je dan kunt debuggen en naar de definitie kunt navigeren. Een andere nieuwigheid is dat je dat niet meer hoeft te doen. Een reference is voldoende: als je met F11 erin stapt, of F12 de definitie opzoekt, dan opent Visual Studio toch de bijbehorende code, al zit het project niet in je solution. Sterker nog: hij kan van Packages zelfstandig naar de Git repository en daar de source code opzoeken!
 

Coding styles

Binnen organisaties zijn vaak wel coding styles afgesproken, maar binnen Visual Studio bestond er niet echt een manier om dat te controleren of af te dwingen. Nu kan dat wel vanuit het Opties scherm. Hieronder zie je bijvoorbeeld een rule waarbij wordt gecontroleerd of private variabelen met een underscore beginnen en anders komt er een warning. Dit kan ook worden ingesteld zodat er een error komt en natuurlijk andere regels zijn ook mogelijk. Denk aan Pascal casing toepassen op methodes, enz.
 
 

Live Visual Tree

Bij het ontwikkelen van WPF applicaties is het vaak een uitdaging om fouten in de XAML op te sporen. In de update voor Visual Studio is het nu mogelijk om Live de Visual tree te inspecteren. Eigenlijk zoals je in de browser met de F12 tools gewend bent, dat je een element kan selecteren en dat je de properties van het element dan kan inspecteren. Je kunt zelfs de waardes aanpassen in Visual Studio en je ziet direct wat er veranderd in de applicatie!
 
 
Hopelijk weer een hoop handige verbeteringen waardoor we weer een stukje productiever kunnen zijn.
 

Toekomst van .Net

De toekomst van .Net werd ook besproken. Daarvoor moeten we eerst even kijken naar de huidige status.
 
 
Het .Net framework dat we tot nu toe altijd gebruikt hebben voor WinForms, WPF en ASP.Net zien we aan de linker kant.
In het midden de .NET CORE, of te wel de .Net versie die gebruikt wordt op het Universal Windows Platform (UWP) om apps op windows, phone, Xbox, Iot, Hololens, etc. te draaien. En ook wordt .Net Core gebruikt voor ASP.Net Core (de nieuwe ASP implementatie)
En rechts Xamarin met de Mono implementatie.
 
Het probleem is dus dat er 3 class libraries onder liggen en dat moet nu uniform gaan worden.
 
 
Als het goed is merken we daar niet al te veel van, maar wordt er wel een hoop werk verzet door de developers van Microsoft. En de developers uit de community niet te vergeten, want het is open source en er wordt actief aan mee ontwikkeld. Bij de ontwikkeling van ASP.net Core komt circa 40% van de performance winst op naam van bijdrages van buiten Microsoft.