MS certificering: 70-483, deel 4

Ingediend door Dirk Hornstra op 20-mrt-2018 21:02

Hoewel de video's een "dag" behandelen en dus "maar" een uur duurt, moet je toch zien dat je dat uur ergens kunt pakken. Gisteren voor het werk aan de slag, migratie, dus geen tijd hiervoor gehad. Vanavond, 20 maart, dus door met het derde deel, manipulating types and strings. Zoals ik de vorige keer al zei klinkt dat niet heel moeilijk, eens zien of deze ongeveer drie kwartier durende video inderdaad mee valt. Voor degene die midden in mijn certificering-posts valt, het gaat om de C# Jump Start video.

We beginnen. Overzicht is dat we de flow van het programma gaan doen en types en strings manipuleren. Selection Statements, if, else, switch. Iteration Statements: do, for, foreach, in, while. Jump statements: break, continue, default, goto, return, yield. Mijn voormalig collega Peter Kiers was in het verleden lovend over "yield", eerlijk gezegd heb ik die (nog) niet gebruikt. Wordt nu eigenlijk wel tijd. 

We zien een stukje code met een if-statement. Bekende kost. Hierna zien we de ternary operator, de short-hand versie. Sommige mensen haten het, ik niet en gebruik het regelmatig. Console.WriteLine(value == 1 ? "One" : "Not One");

We krijgen de while en do-while. While voert het statement 0 of meer keren uit,  do-while wordt minimaal 1 keer uitgevoerd. Hierna de for-loop. Is vergelijkbaar met het while-statement. for (int i=0; i < length; i++) ... Je kunt ook meerdere variabelen initialiseren. for (int i=0, int j=0; i < 10; i++,j++). Je hebt dan nog de foreach: var list = new[] {0,1,2,3} ; foreach (var item in list). Dit is voor enumerable variabelen/collecties. Er wordt een controle op "even getallen" toegevoegd, met een continue; Dat zorgt dat alle oneven getallen wat gaan doen (je gaat door met de volgende). We zien hierna de return (spring uit de hele functie) en de break (stop met de items in het foreach-statement). We zien nog even een "goto label: en verderop label: ..." staan. Dat is legacy, je wilt zulke willekeurige sprongen in je code niet hebben. Je kunt in een switch-statement wel met een goto naar een ander case-statement gaan. Ook nog een throw new Exception(); om te laten zien dat je helemaal je applicatie kunt stoppen (maar niet op een nette manier).  

Hierna gaan we naar het switch-statement. Er wordt een enum Dogs { Lassie, Snoopy, Yeller } gedeclareerd. switch (Dogs), hier wordt automatisch case Dogs.Lassie: ...  case Dogs.Snoopy ingevuld, de intellisense snapt dit doordat je de class-name ingevoerd hebt.  We maken een var snoopy = Dogs.Snoopy; aan en vullen deze in de switch(snoopy). Als je bij een case geen "break" hebt en geen implementatie, dan val je door naar de volgende optie. We zien de default: break; Deze wordt alleen uitgevoerd als de bovenstaande case-checks niet overeen komen. Wil je die afdwingen, dan kun je alsnog een throw new NotSupportedException() instellen. 

Hierna krijgen we een stuk code te zien. De class Animal, Dog die hiervan erft en hierna de Poodle die van Dog erft. Er wordt een class gemaakt, die een functie TakeAnimal krijgt met parameter Animal a. Hierna wordt gekeken met welke variabelen / classes je deze aan kunt roepen. Omdat dog een animal is, kun je een variabele van type Dog ook aanmaken. Elke class krijgt een eigenschap (animal: temperature, dog: name, poodle: groomer). In TakeAnimal stellen we de temperature in op 10. Dat werkt. 
Hierna 2 types casting: var dog = (Dog) a; Je krijgt een invalid cast exceptie als je deze met een animal aanroept.Hierna doen we een var dog = a as Dog; dog.Name = "Piet". Gebruik je de eigenschap .Name, dan moet het een Dog zijn. Je kunt dan if (dog != null) dan weet je dat het een Dog is. We willen die check eerder. Aan het begin kun je nu bovenin checken met: if (a is Dog), die geeft true of false of het type juist is. Wel moet je dan nog die != null check binnen je loop hebben, een null is namelijk ook een "Dog".

Hierna gaan we door met strings. Een string is onveranderlijk. Als je er wat mee doet, wordt er een nieuwe string gemaakt. Daarom gebruik je de StringBuilder class. We krijgen een demo van de StringBuilder. De gewone appendline. Ook de sb.AppendFormat(.., parameters) om de string.Format(..,..) uit te voeren. sb.Replace(..., ...) om teksten te vervangen. AppendLine() voegt een carriage-return toe, appendformat(..) doet dat niet, dus die moet je zelf in je tekst toevoegen.  Met een sb.Insert(..) kun je een op een bepaalde plaats tekst invoegen. We zien een aantal voorbeelden met string-variabelen. Je krijgt dus bij Concat(..), Substring(...) een nieuw object terug. 

Hierna volgt nog de Reguliere Expressies. Regex.Match en Regex.Matches. Met de Match(..).Groups krijg je in je eerste resultaat de volledige match op je expressie. Daarna krijg je als losse resultaten de lossen matches terug. Reguliere Expressies zijn supersnel. 

Er werd al gezegd dat er wat overgeslagen is in de sessie, omdat de mannen code in Visual Studio wilden laten zien. Zo zie ik nu dat de "yield"-actie niet besproken is. Daarom nog maar even de Microsoft Documentatie bekeken wat het nu precies inhoudt. Het is een class die een iterator teruggeeft en zelf bijhoudt op welke positie je gebleven bent. Erg krachtig, binnenkort toch maar eens kijken of ik code kan vinden of voor mezelf kan maken die het gebruikt. Want net als met andere code is het: als je het gebruikt, ga je snappen hoe het werkt.