Zie Scherp Scherper - Hoofdstuk 2
Na dit hoofdstuk kan je:
int, double, bool, char, string, …)Net als elke taal bestaat C# uit:
Een programma is een opeenvolging van statements, en elk statement eindigt op een puntkomma (;), zoals een zin op een punt.
Eén statement = één lijn in je recept, het algoritme.
Reinhardt en reinhardt zijn niet hetzelfde" "// voor één lijn, /* ... */ voor een blokMainTip
C# is een levende taal. Nieuwe woorden komen erbij als contextual keywords (bv. get, set, value, var); de lijst van 80 echte keywords verandert niet.
Step away from the keyboard!
goto is een officieel keyword, maar je ziet het in dit boek nooit.
gotoWaarschuwing
NEVER EVER USE GOTO. Enneuh, ik hou je in ’t oog hoor.
Een variabele is een geheugenplekje waarin we tijdelijk data bewaren (bv. gebruikersinput).
Bij het aanmaken geef je minstens twee zaken mee:
Jij spreekt dat plekje aan met de identifier, de computer met het geheugenadres (0x4234FE13EF1).
tim en Tim zijn verschillendgoto of string mag niet als naam_)Tip
Breek je deze regels, dan raakt VS volledig de kluts kwijt met een hele resem foutboodschappen.
| Identifier | Mag? |
|---|---|
werknemer |
ja |
kerst2018 |
ja |
pippo de clown |
nee (spaties) |
4dPlaats |
nee (start cijfer) |
_ILOVE2022 |
ja |
Tor+Bjorn |
nee (+) |
class |
nee (keyword) |
gewicht of leeftijd dan a of meuh// zet alles tot het einde van de lijn in commentaar/* ... */ zet een volledig blok in commentaarC# is een strongly typed language: je legt van bij de start vast welk soort data een variabele bevat.
In dit boek gebruiken we types voor:
sbyte, byte, short, ushort, int, uint, long, ulongdouble, float, decimalchar, stringboolTip
Anders dan in JavaScript kan data hier niet zomaar van vorm veranderen. Dat is soms strenger, maar bespaart je veel gevloek.
| Type | Geheugen | Bereik |
|---|---|---|
byte |
8 bits | 0 tot 255 |
short |
16 bits | -32 768 tot 32 767 |
int |
32 bits | ca. -2,1 tot +2,1 miljard |
long |
64 bits | ca. -9,2 tot +9,2 triljoen |
s = signed (1 bit voor het teken), u = unsigned (altijd positief)
short gaat het eerste bitje naar het teken.Tip
Dubbel zoveel bits verdubbelt het bereik niet, het kwadrateert het: 256 waarden bij een byte, 65 536 bij een short. Bij twijfel kies je gewoon int.
“Wow, moet ik al die datatypes vanbuiten kennen? Ik was al blij dat ik tekst op het scherm kon tonen.”
Nee. Onthoud de belangrijkste, en door veel te programmeren ontdek je vanzelf welk type waar past. Laat je niet afschrikken door de ellenlange tabellen: we gebruiken er maar een handvol.
| Type | Geheugen | Sterkte |
|---|---|---|
float |
32 bits | kleinst |
double |
64 bits | grootste bereik |
decimal |
128 bits | hoogste precisie (28-29 cijfers) |
Elk type wint op precies één van de drie criteria. Het rode balkje toont welk.
decimal vooral voor financiële en wetenschappelijke code2.2345 heeft precisie 5)Tip
Bij twijfel kies je voor kommagetallen double.
bool: het eenvoudigste type, enkel true of false (neemt 1 byte in)
if) vanaf een later hoofdstukchar: één enkel karakterstring: een stuk tekstWaarschuwing
Weet je dat een variabele maar twee waarden kan hebben? Gebruik dan een bool, geen int. Scheelt geheugen en is duidelijker.
Toekenning gaat van rechts naar links: het deel rechts van = gaat naar links.
Tip
Meerdere variabelen van hetzelfde type mogen op één lijn: string voornaam, achternaam, adres;
Een literal is een waarde die je letterlijk neerschrijft. De schrijfwijze bepaalt het type:
int, kommagetallen standaard doubleu (uint), L (long), f (float), m (decimal)Een lokale variabele (binnen Main) moet een waarde hebben voor je ze uitleest:
Een instantievariabele (bij een object, zie het hoofdstuk klassen) krijgt wel automatisch de standaardwaarde van haar type.
Belangrijk
Dit compileert niet eens. Het = 5 hoort enkel bij breedte, de laatste van het rijtje. lengte blijft zonder waarde: use of unassigned local variable. Wil je allebei 5, schrijf dan int lengte = 5, breedte = 5;
Een nieuwe waarde wist de oude onherroepelijk:
Heb je de oude waarde nog nodig, zet ze dan eerst in een tweede variabele.
Belangrijk
Declareer een variabele maar één keer. double kdRating = 2.1; gevolgd door double kdRating = 3.4; geeft already defined in this scope.
Je hebt twee variabelen. Hoe wissel je hun waarden om?
Belangrijk
a = b; b = a; werkt niet: na a = b is de oude waarde van a al weg.
Een expressie is een reeks bewerkingen die uitkomt op één resultaat met een type. 3 + 2 geeft 5 (type int).
Hoeveel zou je wegen op Mars?
Literals, variabelen en operators samen, met haakjes om de volgorde af te dwingen.
De %-operator geeft de gehele rest van een deling:
Tip
% 2 is dé manier om te testen of een getal even is: is de rest 0, dan is het even.
Compacter om te lezen, niet sneller. getal++ zie je overal (zeker in lussen), dus je moet het vlot kunnen lezen.
Belangrijk
som++ (achteraan): geef eerst de waarde terug, dan verhogen++som (vooraan): eerst verhogen, dan de nieuwe waarde teruggevenZet je helm op. Als je de volgende sectie goed begrijpt, heb je een grote stap gezet.
Variabelen zijn het hart van programmeren. Expressies zijn het bloedvatensysteem dat ze combineert tot iets nieuws.
De types die je in een expressie gebruikt, bepalen het type van het resultaat.
int + int geeft een int. Een double kan je niet zomaar aan een int toewijzen.
Waarschuwing
Op het scherm verschijnt 4, niet 4.5.
int / int geeft een int: C# kapt alles na de komma af (truncatie), het rondt niet af. Ook 4.9 wordt zo 4.
Meng je een int met een double, dan kiest C# het grootste type (hier double):
Wil je 9 / 2 als 4.5, zet dan minstens één operand op double:
Ik verdien 10 000 euro per maand (I wish) en geef je de helft:
Met const maak je een variabele onveranderlijk:
const in ALLCAPS met liggende streepjesVisual Studio organiseert je code in een hiërarchie:
Daarom raden we aan om “Place solution and project in the same directory” niet aan te vinken.
Waarschuwing
Een .sln-bestand bevat geen code. Wil je je werk delen, geef dan de hele folderstructuur mee.
;int en double als veilige standaardint / int: dat kapt afconst maakt waarden onveranderlijk; solutions bundelen projectenTip
Volgende halte: alles over tekst: char, string en hun trucjes.
Kennisclips
Dezelfde concepten uit dit hoofdstuk, maar dan in andere talen. Je hoeft die talen niet te kennen: het gaat om het herkennen van het patroon, ook al ziet de syntax er anders uit.
Belangrijk
Steeds vaker laat je een A.I. een eerste versie schrijven en moet je die daarna lezen, beoordelen en bijsturen. Zo’n A.I. spuwt even vlot Python, JavaScript of C++ uit als C#.
In Python geef je nooit een type op. Diezelfde variabele mag later zelfs een ander soort data bevatten:
In C# blijft een int een int: regel twee zou hier een compilatiefout geven.
Handig om te weten: zo’n stukje Python kan je nu al grotendeels lezen, ook al schrijf je het zelf nog niet.
Die hele waaier integer-types deelt C# met C en C++: ook daar kies je tussen short, int, long, … omdat geheugen telt.
JavaScript doet het omgekeerde: één enkel getaltype number, altijd een 64-bit kommagetal.
Handig, maar het verklaart waarom JS onnauwkeurig wordt bij heel grote gehele getallen.
bool overal?Niet vanzelfsprekend. De oude C-standaard had geen booleantype: men gebruikte een int, met 0 als false en al de rest als true.
C# (net als Java en Python) maakt van true en false echte, aparte waarden, zodat je geen getal per ongeluk als conditie gebruikt.
const in PythonPython kent geen echt const-keyword. Een naam in ALLCAPS is er enkel een afspraak, geen regel die de taal afdwingt.
In C# vangt de compiler die tweede regel meteen op: de taal dwingt de belofte af.
Een handige samenvattende poster (Opgelet: gemaakt m.b.v. ChatGPT Image Gen 2).