Alweer geen Excel

Keuzes maken

Arnout van Kempen schrijft in deze rubriek over pret maken met computers. Hij gaat aan de slag met Pascal.

TP kent twee mogelijkheden voor het maken van keuzes. De eerste is de If...Then...Else-constructie. Variaties zijn hierin mogelijk door Else weg te laten en door het gebruik van programma-blokken. Bijvoorbeeld:

f X > 10 Then
     Writeln('X is groter dan 10')
Else
Begin
     Writeln('X is kleiner dan 10');
     Writeln('of X is 10')
End;

Een ; is hier niet nodig aan het einde van een programma-blok. Het mag wel, maar het voegt niets toe. Waar in C de ; een afsluiting van een statement is, is het in Pascal een scheiding tussen statements. 

Een tweede mogelijkheid die TP biedt is Case en dat ziet er zo uit:

Case A Of
     'a'..'z': Writeln('kleine letter');
     'A', 'B': Writeln('A of B');
     'C'..'Z': Writeln('hoofdletter')
Else
     Writeln('Geen letter')
End;

Hier zit een aardigheid in, die sterk afwijkt van C en meer lijkt op Rust. Ten eerste kent Pascal geen fall through zoals C. Een optie wordt afgehandeld en daarna is het Case-statement voorbij. In C worden volgende opties gewoon uitgevoerd, tenzij je uit het statement gaat via een break.

De compiler weigert in Pascal, net als in Rust, als meerdere opties overlappen. Dit kan dus wel in C, maar niet in Pascal:

 Case A of
     'a'..'z': Writeln('kleine letter');
     'A', 'B': Writeln('A of B');
     'A'..'Z': Writeln('hoofdletter')
Else
     Writeln('Geen letter')
End;

Maar Pascal is iets minder streng dan Rust. Als niet alle mogelijke opties zijn afgedekt, weigert Rust de compilatie. Pascal maakt er geen probleem van tijdens compileren en tijdens runtime evenmin. Dit kan niet in Rust, maar werkt in Pascal zonder probleem: 

Case A of
     'a'..'z': Writeln('kleine letter');
     'A', 'B': Writeln('A of B');
     'C'..'Z': Writeln('hoofdletter')
End;

Tot slot: Case werkt in Pascal op alle ordinale types, dus ook op integers, booleans et cetera.

Arnout van Kempen is naast computernerd ook directeur compliance & risk bij aaff. Hij schrijft op persoonlijke titel.

Gerelateerd

reacties

Reageer op dit artikel

Spelregels debat

    Aanmelden nieuwsbrief

    Ontvang elke werkdag (maandag t/m vrijdag) de laatste nieuwsberichten, opinies en artikelen in uw mailbox.

    Bent u NBA-lid? Dan kunt u zich ook aanmelden via uw ledenprofiel op MijnNBA.nl.