- Herhaling vorige les
- Project beoordelingsformulier staat op Blackboard
- Toets: kijk naar de lesdoelen
- Ook bij code in C# wordt versiebeheer vaak ondergebracht bij GIT
- GIT is geen GitHub
- In
wordt GIT wordt standaard ondersteund in de Team Explorer
- In
wordt GIT wordt standaard ondersteund in de Source Control
- Alternatief: GIT via de terminal of via een tool zoals SourceTree
- Voordeel van geintegreerd GIT gebruik: GIT Ignore goed ingesteld
- GIT verplicht tijdens project
- Kies zelf een GIT branching strategie (Git flow, GitHub flow, ...)
Literatuur:
- Github is van Microsoft
- Mercurial
- Syntax: Func<int, int> func = (int x) => x + 1;
- Lambda expressies vs anonieme functies
- Wat is functioneel programmeren?
- Closures
String tekst = "grote knop";
groteKnop.setOnAction((ActionEvent e) ->
System.out.println("Je klikte op de " + tekst));
tekst = "kleine knop";
kleineKnop.setOnAction((ActionEvent e) ->
System.out.println("Je klikte op de " + tekst));
String tekst = "grote knop";
groteKnop.Click += (sender, args) =>
Console.WriteLine("Je klikte op de " + tekst);
tekst = "kleine knop";
kleineKnop.Click += (sender, args) =>
Console.WriteLine("Je klikte op de " + tekst);
Makkelijk variabelen initialiseren
Student std = new Student()
{
StudentID = 1,
StudentName = "Famke"
};
List-initializers:
List<int> cijfers = new List<int> { 0, 1, 2, 3 };
Wat gebeurt er nu als je niet alle properties een waarde geeft?
Antwoord op de vraag: dan krijgt die property de default waarde. Voor value types (int: 0, decimal: 0.0… etc); voor reference types (String: null, List<T>: null… etc)
Literatuur
- Hiermee kun je ook value types een waarde null toekennen.
- Let op: int? is niet hetzelfde type als int, maar gedraagt zich bijna gelijk.
- Lifed operatoren
- A?.B?.Do(C); en A?.B?[C]; en ??=
-
Wat wordt er op het scherm geschreven, als volgende code wordt uitgevoerd?
int? i = null;
int j = i ?? 5;
i = j;
Console.WriteLine(i);
Zie de docs.
-
Expression bodied members:
public (double Circumference, double Area) Stats => (2, 5);
- Pattern matching:
if (input is int count)
sum += count;
- using
- Discards: var (_, _, _, pop1, _, pop2) = QueryCityDataForYears("New York City", 1960, 2010);
- String interpolation:
Console.WriteLine($"|{"Left",-7}|{"Right",7}|");
message = $"The speed of light is {speedOfLight:N3} km/s.";
C# kent net als Java ook verschillende datastructuren:
- List
- Queue
- Stack
- Dictionary (C# voor HashMap)
- Etc.
Zie algoritmen en datastructuren semester 4...
Literatuur: lees dit en dit.
- C# leidt zelf af wat het type is van de variabele op basis van de waarde rechts van de =-operator.
-
Wat is type inference? Herinner:
public void func<T, S>(T arg1, T arg2, S arg3) { }
public void func<T, S>(T arg1, S arg2, S arg3) { }
Bestaat de diamond operator?
- Als je het datatype niet correct gebruikt, krijg je dus gewoon een compile-error
- Omdat de compiler het datatype kent, werkt IntelliSense dus ook gewoon.
- Is var langzamer?
- LET OP: Een methode kan geen variabele van het type var teruggeven
- LET OP: var in C# betekent echt iets anders dan var in JavaScript of PHP
Literatuur: lees dit.
IList<Leerling> leerlingen = new List<Leerling>() {
new Leerling("Famke", 5),
new Leerling("Bill", 3),
new Leerling("Pipi", 3),
new Leerling("Mohammed", 4),
new Leerling("John", 6)
};
var query =
from student in leerlingen
where student.groep > 4
select student;
- Je kunt filteren met Where
- Je kunt ook alfabetisch sorteren of de lengte van strings bepalen
- LINQ lijkt qua taal veel op SQL
- Dan weet je meteen waar de Q van LINQ en SQL voor staat: Query
- Wees je bewust van de Query-syntax, maar we gebruiken deze niet
Literatuur: lees dit en dit.
- Het Where-statement is een normale methode
- LET OP : alleen beschikbaar na using System.Linq
- Het argument is nogal bijzonder: dat noem je een lambda-expressie
- Een lambda-expressie is niets meer dan een verkorte schrijfwijze voor een (anonymous) method
Literatuur: lees dit en dit
- LINQ = Language INtegrated Query
- Je query-achtige operaties om in C# een query te schrijven
- De data mag uit verschillende bronnen komen
- De data kan worden opgehaald uit een database
- Maar die data kan ook worden gecombineerd met data uit een Collection
- Vergelijk LINQ met Java streams
- LINQ kun je ook gebruiken als je geen gebruik maakt van Entity Framework
We gebruiken LINQ-methods in semester 3, omdat dit in de praktijk de meest gebruikte syntax is.
Naast de Where zijn er ook andere methodes die veel worden gebruikt:
- OrderBy
- ToList
- First(OrDefault), Last(OrDefault), ElementAt en Single
- Count, Average, Sum, Max en Min
- All, Any, Contains
- Select
Wat is een IEnumerable?
De returntypen van LINQ methoden zijn:
- Soms: collectie in collectie uit
- Soms: collectie in element uit
Soms geven methoden een exceptie, soms een null
- FirstOrDefault: null als leeg
- First: exceptie als leeg
- Single: exceptie als niet precies 1
IList<Leerling> leerlingen = new List<Leerling>() {
new Leerling("Famke", 5),
new Leerling("Bill", 3),
new Leerling("Pipi", 3),
new Leerling("Mohammed", 4),
new Leerling("John", 6)
};
var query =
from student in leerlingen
let naamlengte = student.naam.Length
group student by (naamlengte, student.groep) into g
where g.Count() > 1
orderby g.Key.naamlengte
select g;
Lees dit.
- Deferred execution betekent dat de evaluatie van een LINQ-expressive wordt uitgesteld totdat de uitkomst van de evaluatie echt nodig is.
- Deferred execution levert performance op.
- Deferred execution levert op dat de evaluatie altijd plaatsvindt op de meest recente data
- Meestal merk je weinig van deferred execution maar het kan zijn dat in je datasource (vaak de database) tussentijds (buiten jouw programma) iets is veranderd
- Op basis van deferred execution begrijp je dan waarom er soms meer (of minder) rows voorkomen in de Collection waarop jij je LINQ-methode uitvoert
- Als je bijv. de methode .ToList() gebruikt in je LINQ-query, dwingt dat wel directe execution af
- Ook de foreach-lus zorgt dat deferred execution op dat moment wordt uitgevoerd.
Bedenk in 5 minuten:
- een klasse met een aantal properties, en
- in het Nederlands, een query op een lijst van objecten van deze klasse.
Deel dit met je maatje. Programmeer in 5 minuten: de query in LINQ.