Zie verder
Even terugblikken
In dit hoofdstuk leerde je niet langer met losse objecten werken, maar met hele verzamelingen ervan. Je zag arrays van objecten, de handigere
List, deforeach-loop om over een collectie te gaan, en de collectie-klassenQueue,StackenDictionary.
De kern op een rij:
- Een array van objecten bevat na
newenkel referenties die nognullzijn; je moet de objecten zelf nog aanmaken. - Een
Listgroeit en krimpt mee en geeft je methoden zoalsAddenRemove; let op: ze werkt metCount, niet metLength. - Een
foreachdoorloopt alle elementen, maar de iteration variabele is read-only: je kan ze niet vervangen. - Een
Dictionaryzoekt razendsnel op een unieke key; eenQueueis FIFO, eenStackis LIFO.
- Een object uit een array benaderen dat nog
nullis geeft eenNullReferenceException. Maak het object eerst aan. - Een collectie wijzigen (toevoegen of verwijderen) tijdens een
foreachcrasht met “Collection was modified”. Gebruik dan eenfor-loop van achter naar voor. IndexOfenContainsvergelijken op referentie: twee aparte objecten met dezelfde inhoud gelden als verschillend.
In andere talen
List elders
In Python bestaat zoiets als List<> niet apart: een list is ingebouwd in de taal en groeit gewoon mee. Je hoeft er ook geen type bij te zetten, want Python is dynamisch getypeerd:
namen = ["Tim", "An"]
namen.append("Jan")In Java lijkt het sterk op C#: daar gebruik je ArrayList<String> met .add(...). Zelfde idee, ander jasje.
Foreach elders
De foreach-loop is helemaal niet uniek voor C#. In Python schrijf je net hetzelfde idee, maar zonder type en zonder accolades:
for meting in metingen:
print(meting)In JavaScript heet dit for...of:
for (const meting of metingen) {
console.log(meting);
}Dictionary elders
Een Dictionary heet in Python een dict en zit ingebouwd in de taal met een handige {}-syntax. Geen types opgeven, gewoon sleutel-waarde-paren:
klanten = {123: "Tim Dams", 6463: "James Bond"}
print(klanten[123])In JavaScript gebruik je hiervoor een Map (of een gewoon object), met aparte set- en get-methoden:
const klanten = new Map();
klanten.set(123, "Tim Dams");
console.log(klanten.get(123));Zoek de fout
Onderstaande C#-code wil alle minderjarige studenten uit een lijst verwijderen, maar het programma crasht. Wat loopt er mis?
foreach (var student in deKlas)
{
if (student.Geboortejaar > 2010)
deKlas.Remove(student);
}Je mag een collectie niet wijzigen terwijl je er met foreach over itereert. Deze code gooit een InvalidOperationException met de boodschap “Collection was modified; enumeration operation may not execute”. Gebruik in plaats daarvan een gewone for-loop die je van achter naar voor doorloopt, of werk op een kopie van de lijst.
In dit hoofdstuk leerde je niet langer met losse objecten werken, maar met hele verzamelingen ervan. Je zag arrays van objecten, de handigere