n00b pro

01. basis

Dit hoofdstuk is onderdeel van de cursus C#. Andere cursussen in dezelfde reeks: HTML, CSS, Javascript, Ontwikkelomgeving.

Programmeren in Notepad++

Over wat programmeren is, en hoe je praktisch C# consoleprogramma's maakt in Notepad++ lees je in https://rogiervdl.github.io/DEVENV-course/05_npp.html

Console

Met de klasse Console is het mogelijk om tekst naar de console te schrijven en invoer van de gebruiker uit de console uit te lezen (basis I/O).

Waarde schrijven

op één regel

Console.Write("a");
Console.Write("b");
Console.Write("c");
abc
Write(): schrijf en blijf op dezelfde regel

op aparte regels

Console.WriteLine("a");
Console.WriteLine("b");
Console.WriteLine("c");
a
b
c
WriteLine(): schrijf en ga naar de volgende regel

Waarde inlezen

Tekst inlezen

Console.Write("Voer je naam in: "); // vraag om de naam van de gebruiker (blijf op zelfde lijn)
string naam = Console.ReadLine();   // lees de naam in en sla deze op in een variabele

Console.WriteLine($"Hallo, {naam}"); // schrijf een boodschap naar de console
regel inlezen en weergeven
resultaat in de console

Getal inlezen

Console.ReadLine() geeft altijd een tekst terug; als je een getal wil, moet je het converteren met Convert.ToInt32() (gehele getallen) of Convert.ToDouble() (kommagetallen):

Console.Write("Geef een aantal in: ");
int aantal = Convert.ToInt32(Console.ReadLine());   // zet de tekst om naar een geheel getal met Convert.ToInt32()
Console.Write("Geef een prijs in: ");
double prijs = Convert.ToDouble(Console.ReadLine());   // zet de tekst om naar een kommagetal met Convert.ToInt32()

Karakter inlezen

met weergave
Console.Write("Wil je verder gaan? [j/n]: ");
char keuze = Console.ReadKey().KeyChar;
Console.WriteLine($"\nJe koos: {keuze}");
resultaat in de console: het ingetikte karakter wordt weergegeven
zonder weergave
Console.Write("Wil je verder gaan? [j/n]: ");
char keuze = Console.ReadKey(true).KeyChar; // true → karakter wordt niet weergegeven in console
Console.WriteLine($"\nJe koos: {keuze}");
resultaat in de console het ingetikte karakter wordt niet weergegeven

Soms wordt dit ook gebruikt om met het vervolg van het programma te wachten tot de gebruiker een toets indrukt:

Console.WriteLine("druk een toets om verder te gaan...");
Console.ReadKey(true); 

Tekstkleuren

Met de properties ForegroundColor en BackgroundColor kan je de tekstkleur, respectievelijk de achtergrondkleur van de uitvoer in de console instellen.

Console.ForegroundColor = ConsoleColor.Red; // rode tekstkleur
Console.BackgroundColor = ConsoleColor.White; // witte achtergrond

Console.WriteLine("Hello, World!");
uitvoer console kleuren
resultaat console kleuren

Om opnieuw de oorspronkelijke tekst- en achtergrondkleur in te stellen, maak je gebruik van de methode ResetColor():

Console.ResetColor();

Console wissen

Om het console-venster leeg te maken, maak je gebruik van de Clear()-methode:

Console.Clear(); // wis de inhoud van het console-venster

UTF-8 karakters

Standaard kan je in de console alleen de eerste 127 ASCII karakters gebruiken (zie b.v. asciitable.com ). Andere karakters worden fout weergegeven:

Console.WriteLine("A 1 +"); // gewone ASCII karakters worden correct weergegeven
Console.WriteLine("∑ → ◈"); // andere karakters worden fout weergegeven
A 1 +
S ⸮ ?
speciale karakters worden fout weergegeven

Om speciale karakters correct weer te geven, moet je Console.OutputEncoding instellen:

Console.OutputEncoding = Encoding.UTF8; // stel utf-8 karakterset in
Console.WriteLine("A 1 +");
Console.WriteLine("∑ → ◈"); // andere karakters worden nu ook correct weergegeven
A 1 +
∑ → ◈
speciale karakters worden nu correct weergegeven

Merk op: zelfs dan kunnen karakters soms verkeerd of anders weergegeven worden, afhankelijk van de beschikbare lettertypes, en zeker bij emoji's.

Console.OutputEncoding = Encoding.UTF8;
Console.WriteLine("✂ ✍ ✈ ☀");
emoji's worden soms anders of verkeerd weergegeven

Samenvatting properties en methodes

Overzicht van alle properties en methodes gebruikt in dit hoofdstuk:

Property Omschrijving
BackgroundColor De achtergrondkleur die achter de tekst in de console wordt weergegeven
ForegroundColor De tekstkleur voor het weergeven van tekst in de console
OutputEncoding Het karakterset gebruikt in de console
Methode Omschrijving
Clear() Wist de inhoud van het console-venster
Read() Lees één karakter uit, uit de console
ReadKey() Leest één karakter uit, uit de console. Biedt de mogelijkheid om de ingetypte toets niet weer te geven
ReadLine() Leest een volledige regel uit, uit de console
ResetColor() Herstelt de voor- en achtergrondkleur naar de oorspronkelijke kleuren
Write() Schrijft de waarde naar de console
WriteLine() Schrijft de waarde naar de console en eindigt de regel met een newline-karakter

Strings

Een string is een datatype dat een reeks van karakters (letters, cijfers, ...) kan bevatten. String's worden altijd tussen dubbele quotes geplaatst.

string boodschap = "Hello, World!";
Console.WriteLine(boodschap);
Hello, World!
resultaat in de console

Karakters escapen

De volgende karakters moeten ge-escaped worden d.m.v. een backslash (\):

Console.WriteLine("Simon says: \"jump\"");
Console.WriteLine("C:\\users\\john.doe\\documents");
Simon says: "jump"
C:\users\john.doe\documents
resultaat in de console

Concatenatie

Om meerdere strings samen te voegen tot één string (concatenatie), maak je gebruik van de +-operator:

// voorbeeld 1
string begroeting = "Hallo, ";
string naam = "John";

string boodschap = begroeting + naam;
Console.WriteLine(boodschap);

// voorbeeld 2
Console.WriteLine("Mijn naam is: " + naam);
Hallo, John
Mijn naam is: John
resultaat in de console

Newlines

Je kunt op twee manieren het begin van een nieuwe regel markeren:

  1. met behulp van het \n-karakter
  2. met Environment.NewLine (aanbevolen)
Console.WriteLine("Regel 1\nRegel 2"); // optie 1
Console.WriteLine($"Regel 1{Environment.NewLine}Regel 2"); // optie 2
Regel 1
Regel 2
Regel 1
Regel 2
resultaat in de console

De notatie met Environment.NewLine krijgt de voorkeur, omdat op sommige besturingssystemen \r\n verwacht wordt in plaats van \n.

Multiline strings

Om een string over meerdere regels te spreiden, kan je gebruik maken van multiline strings. Om een multiline string te maken, zet je een @-karakter vóór de openings-quote:

Console.WriteLine(@"Regel 1
Regel 2
Regel 3");
Regel 1
Regel 2
Regel 3
resultaat in de console

Multiline strings hebben aparte regels voor escapes: \-karakters hoef niet te escapen, en een dubbele quote (") moet je verdubbelen:

Console.WriteLine(@"C:\users\john.doe\documents"); // backslash NIET escapen
Console.WriteLine(@"Simon says: ""jump!"""); // quotes verdubbelen

Als je dat allemaal wat veel vindt om te onthouden, vermijd dan multiline strings als je karakters moet escapen.

String interpolatie

Via string-interpolatie kan je eenvoudig strings samenstellen. Dit kan op twee verschillende manieren:

string naam = "John";
int leeftijd = 35;

Console.WriteLine("Mijn naam is " + naam + ", ik ben " + leeftijd + " jaar oud."); // zonder interpolatie
Console.WriteLine("Mijn naam is {0}, ik ben {1} jaar oud.", naam, leeftijd); // interpolatie met parameters
Console.WriteLine($"Mijn naam is {naam}, ik ben {leeftijd} jaar oud."); // interpolatie met $ → gebruik bij voorkeur deze notatie
Mijn naam is John, ik ben 35 jaar oud.
Mijn naam is John, ik ben 35 jaar oud.
Mijn naam is John, ik ben 35 jaar oud.
resultaat in de console

Je kan niet alleen variabelen, maar ook expressies interpoleren, b.v.:

int getal = 17;

Console.WriteLine($"Het getal {getal} is {(getal % 2 == 0 ? "even" : "oneven")}."); // let op: expressie moet tussen haakjes () staan
Het getal 17 is oneven.
resultaat in de console

Je kan $ interpolatie tenslotte combineren met @ multiline:

string name = "Bozo";
int year = 2024;
string header = $@"******************************
** {name} for president in {year}
******************************";
Console.WriteLine(header);
******************************
** Bozo for president in 2024
******************************
resultaat in de console

Properties en methodes

.NET biedt een aantal extra properties en methodes die je kan gebruiken op strings via de String wrapper class, zie appendix: .NET - String klasse

Commentaar

Met commentaar voeg je extra informatie toe aan je code. Commentaar is vrije tekst die niet uitgevoerd wordt.

Commentaar op één regel

// Eerste regel
// Tweede regel

Commentaar over meerdere regels

/* Eerste regel
   Tweede regel */

Vuistregels voor goede commentaar

Enkele tips/vuistregels voor een zo leesbare commentaar:

/// <summary>
/// Theorie hoofdstuk 03 – commentaar voorbeeld
/// Auteur: Rogier van der Linde
/// </summary>
static void Main(string[] args)
{
   // vraag een antwoord
   Console.Write("Geef een geheel getal: ");
   string antwoord = Console.ReadLine();

   // converteer naar getal
   int getal1 = Convert.ToInt32(antwoord);

   // resultaat teruggeven
   Console.WriteLine($"Het kwadraat is: {getal1 * getal1}");
   Console.ReadLine();
}