Navigatie overslaan en direct naar de pagina gaan
inloggen | helpdesk | Zoeken
Home > Waarom Linq?

Waarom Linq?

In ons Computron Software weblog houden wij u op de hoogte van nieuws op het gebied van Software Engineering.

Weblog

 Waarom Linq?

“Ja, wij gebruiken Linq, en jullie?” Dit is een zin die je eigenlijk verwacht te horen op het moment dat je in gesprek raakt met andere .NET programmeurs. Maar waarom? Wat biedt het ons? Is Linq niet gewoon een trucje om de syntax makkelijker te maken zodat programmeurs niet meer iedere keer naar Sql server management studio toe moeten om daar code in een compleet andere taal in te moeten voeren?

Het antwoord is heel duidelijk nee. Het is niet alleen een syntactisch sausje over je C# of VB code. Linq is een hele andere manier van denken over code en programmeren. Het is een nieuw paradigma dat toegevoegd is aan het al sprankelende setje paradigma’s binnen C# en VB.NET. Dit nieuwe paradigma heet Functioneel.

Beschrijven of niet beschrijven

Mijn eerste aanraking met Functioneel programmeren was op de (toenmalige) KUN, de huidige RU. Ik studeerde daar wiskunde en volgde met veel plezier de vakken tot het moment dat we zomaar op een woensdag ochtend naar een compleet ander gedeelte van het gebouw moesten om van een compleet vreemde meneer een compleet vreemde manier van denken aan moesten leren. We kregen namelijk C++. Het eerste stukje code wat ik daar zag en welke zich op mijn netvlies heeft gebrand was grofweg het volgende:

(het volgende voorbeeld is in C# maar had net zo goed C++ kunnen zijn)

int[] intList = new int[10];
for (int i = 0; i < intList.Length; ++i) {
    intList[i] = i;
}
 
intx = 0;

Iedere programmeur ziet dit stukje code en denkt: niets mis mee, vul een lijstje van intergers, loop weer door het lijstje en tel het getal bij een locale variabele x op.

Mijn wereld stond op zijn kop, langzaam stak ik mijn vinger in de lucht en toen ik de beurt kreeg om te spreken zei ik: “ Maar meneer, er is toch nooit een x zodanig dat x gelijk is aan x plus iets anders, mits dat iets anders ongelijk aan 0 is?”

Hierna kwam een heel verhaal over geheugen en allocatie daarvan maar de conclusie was dat binnen een imperatieve programmeer taal je dingen kan doen die niet wiskundig zijn en dus niet meer zo makkelijk wiskundig te valideren.

In functionele programmeer talen is één van de criteria dat deze locale variabelen onveranderbaar zijn. Nu zijn C# en VB.NET niet pure functionele talen geworden, maar je kan nu op een veel beschrijvendere manier je code schrijven. En beschrijvend is altijd beter. Wat doen we in het vorige stukje. Je maakt een lijstje, vertelt de compiler precies hoe je deze gevuld wil hebben en daarna leg je de compiler stap voor stap uit hoe deze het lijstje moet sommeren. Hieronder volgt dezelfde code maar dan met behulp van Linq.

List<int> intList = new List<int>() { 1,2,3,4,5,6,7,8,9,10 };
Func<List<int>, int> sumFunc = list => list.Sum();
int resultInt = sumFunc(intList);

Ik gebruik hier een paar nieuwe dingen van C# 3.0, waar het om gaat is dat ik een lijst instantieer, een functie definieer en de functie loslaat op de lijst. Dit is vele malen beschrijvender dan het vorige voorbeeld. Het proces is duidelijk als ik naar de code kijk. Het is tevens minder code. En inderdaad, ik beschrijf niet wat optellen van een lijst is, dit kan nu asynchroon en parallel gaan dit kan op een cloud werken of in een computer farm. Dit hoef ik ook niet te weten.

Waarom Linq?

Linq komt niet alleen met handige tools zoals Linq to Sql en dadelijk Linq to Outlook waarmee we snel en effectief applicaties kunnen schrijven. Linq bied ons de mogelijkheid om op een nieuwe manier naar code en het proces van coden te kijken. De trends op dit moment zijn dat alles beter moet ‘scalen’ en alles veel beschrijvender moet zijn om het overzicht niet kwijt te raken. Linq is een stap in die richting.