Zie Scherp Scherper - Hoofdstuk 3
Na dit hoofdstuk kan je:
char en string uitleggen\n, \t, \", …) gebruiken en weten waarom een Enter uit twee tekens bestaat@ of met een raw string literal (""")$)Environment en je programma afsluiten met een exitcodecharVoor we tekst inlezen, moeten we begrijpen hoe een computer al die tekens voorstelt.
string intern als UTF-16Tip
De eerste 32 tekens zijn “onzichtbare” stuurtekens uit het Telex-tijdperk (line feed, bell, …).
')Belangrijk
char eenGetal = '7'; bewaart het teken 7, niet het getal 7. Wil je ermee rekenen, dan moet je eerst converteren (hoofdstuk 4).
Een
stringis een reeks van 0, 1 of meerchar-elementen.
")char gebruikt een apostrof, een string aanhalingstekensDe string "Hallo" bestaat uit vijf char-elementen na elkaar.
Tip
In hoofdstuk 8 ontdek je dat een string eigenlijk een array van chars is.
Driemaal een 1 onder elkaar, maar telkens een ander type. Boeiend programma, hoor.
Niet de boeiendste materie (geen opvolger van Prison Break), maar wie ze beheerst, tovert mooiere tekst op het scherm.
Sommige tekens hebben een speciale functie (bv. " begrenst een string). Met een backslash (\) zeg je: behandel het volgende teken letterlijk.
Niet vanbuiten leren: in de praktijk grijp je vooral naar \n, \t, \" en \\. De rest zoek je op.
Opmerking
\a laat de computer biepen. In Windows Terminal en standaard ook op Linux en Mac hoor je niets: het teken wordt genegeerd. Je code is dus niet stuk.
Code op het scherm tonen wordt al snel Inception:
Uitvoer:
Uitvoer:
Tip
\t springt naar de volgende vaste tabstop, handig om data uitgelijnd in een tabel te zetten.
\n en \rDuw je op Enter, dan gebeuren er historisch twee dingen. De termen komen van de typemachine:
\r (carriage return): terug naar het begin van de regel\n (line feed): één regel naar beneden\r\n of \n?\r\n\nDaarom staat een tekstbestand van Windows elders soms op één lange lijn, of vol ^M-tekens.
Tip
Environment.NewLine kiest zelf het juiste teken voor het systeem waarop je code draait. In je console volstaat \n; zodra je naar een bestand schrijft of over het netwerk verstuurt, begint het verschil te tellen.
Het apenstaartje @ voor een string zegt: behandel alles letterlijk, escape characters worden genegeerd.
Opmerking
Aanhalingstekens moet je nog steeds escapen. Heb je een " in je tekst, dan kan @ niet helpen.
Zet een $ voor de string en alles tussen { } wordt als code uitgevoerd:
Je kende dit al uit hoofdstuk 1: op de plek van {naam} komt de inhoud van de variabele.
De accolades zijn lege vakjes in de zin.
Tussen de accolades mag elke expressie:
De expressie wordt eerst berekend, dan in de tekst geplaatst.
Op het scherm staat letterlijk Hallo {naam}, welkom!, mét de accolades. Het $ vooraan ontbreekt.
Plaats een dubbelpunt na de expressie om de weergave te sturen:
F2: kommagetal met 2 cijfers na de kommaD5: geheel getal met minstens 5 cijfers (123 wordt 00123)E2: wetenschappelijke notatie (12000000 wordt 1,20E+007)C: geldbedrag volgens de landinstellingenWaarschuwing
Komma of punt hangt van de computer af. Op een Belgisch systeem zie je 12,30, op een Engels 12.30. Dat maakt je uitvoer machine-afhankelijk. Wil je dat vastzetten, dan leer je later CultureInfo kennen.
+ plakt strings aan elkaar (concatenatie):
Zelfde resultaat, maar je let zelf op de spaties en de zin valt in stukken. Voor zulke zinnen: interpolatie.
Lange tekst over meerdere lijnen, met + op het lijneinde:
Belangrijk
Elk stuk met accolades heeft zijn eigen $ nodig. Een $ op de eerste lijn geldt niet voor de rest.
Tekst stap voor stap opbouwen met tekst += stuk; (komt terug bij herhalingen, H6).
Bij + met strings en getallen door elkaar, van links naar rechts:
De linkse operand bepaalt het resultaat bij twijfel: "1" + 1 wordt "11", en dat stuk is dan de linkse operand voor de volgende stap.
Zodra een string meedoet, is het resultaat een string. Haakjes gaan voor.
Op het scherm: 131, niet “AB”.
Een char bewaart een getal: A = 65, B = 66. De +-operator bestaat niet voor char, dus C# rekent met int: 65 + 66 = 131.
Zet als allereerste lijn in Main, nog voor je iets naar het scherm stuurt:
Zet je die lijn later, dan kan tekst die je daarvoor al toonde verkeerd verschijnen.
Tip
Ook het euroteken bij {bedrag:C} heeft die lijn nodig. Een consolevenster op Windows werkt standaard met 256 tekens (code page 850, uit de MS-DOS-tijd) en daar zit de € niet in.
Zoek de hexadecimale waarde op in een UNICODE-tabel (symbl.cc), voor © is dat 00A9:
Een char gaat maar tot 0xFFFF, en \u verwacht exact vier cijfers. Emoji zitten daarboven:
Opmerking
.NET bewaart zo’n teken als twee 16-bit stukjes (een surrogate pair). Eén emoji telt daardoor als 2 in string.Length. Die .Length is dus niet altijd het aantal zichtbare tekens.
Multiline ASCII-art toon je met een verbatim string @:
Tip
$ en @ mogen samen: zowel $@"..." als @$"..." werkt en doet hetzelfde.
Nadeel van @: ook de spaties waarmee je je code inspringt horen bij de string. Sinds C# 11 kan het netter, met drie aanhalingstekens:
""" bepaalt welke inspringing weggeknipt wordt\t blijven letterlijk, net als bij @$ ervoor mag ook: $"""..."""Opmerking
@"..." blijft gewoon werken. Je ziet het nog volop in bestaande code en in wat AI-tools genereren.
Console is maar één bibliotheek. Environment vertelt iets over de machine waarop je programma nú draait:
Belangrijk
Hetzelfde programma geeft op elke machine een andere uitvoer. Test zulke code op meer dan één systeem.
Typ in Visual Studio Environment. en kijk wat IntelliSense voorstelt: OSVersion, CurrentDirectory, … Niemand kent élke bibliotheek: het is aan jou om te ontdekken welke nuttig zijn voor jouw probleem.
WorkingSet is het geheugen dat Windows aan je programma toewees. Dat getal verschilt per pc, en zelfs bij elke run.
Stopt je programma onmiddellijk. Alles wat erna staat, wordt niet meer uitgevoerd.
exited with code 0Deze regel wil tonen waar een bestand bewaard werd, maar de uitvoer ziet er raar uit:
char is één teken (een 16-bit getal), een string is een reeks chars\n, \t, \") sturen hoe tekst geïnterpreteerd wordt; @ en """ schakelen ze uit$"...{expressie}...") is de standaardmanier om variabelen in tekst te plaatsen; + vooral om lange tekst over meerdere lijnen te splitsen'A' + 'B' = 131) en op machine-afhankelijke formatteringEnvironment geeft info over de machine (UserName, MachineName, NewLine) en Exit(0) stopt je programma met een exitcodeTip
Volgende halte: werken met data: converteren, casten en rekenen.
Kennisclips
Dezelfde concepten uit dit hoofdstuk, maar dan in andere talen. Handig om later code in Python of JavaScript te leren lezen.
In C bestaat er geen echt string-type. Tekst is daar letterlijk een array van char, afgesloten met een null-karakter \0:
In C# is string een volwaardig type met handige methodes. Het idee “een string is een reeks chars” zie je in C dus heel letterlijk terug.
Python kent net hetzelfde, daar heet het een raw string. Je plaatst een r voor de string in plaats van een @:
Backslashes worden gewoon als tekst behandeld, niet als escape character. Handig voor bestandspaden en reguliere expressies.
Python (f-string) en JavaScript (template literal) doen exact hetzelfde, met een ander tekentje vooraan:
Een handige samenvattende poster (Opgelet: gemaakt m.b.v. ChatGPT Image Gen 2).