03: Commentaar en aanhalingstekens

Een computerprogramma beschrijft eenduidig de opeenvolgende elementaire berekeningen die we de computer willen laten doen. Voor een computer is dat voldoende; die stelt zich daar verder geen vragen bij. Een menselijke lezer van een computerprogramma wil echter ook het waarom van het programma begrijpen: hij of zij wilt begrijpen wat het doel is van elk stuk van het programma, wilt kunnen inzien dat dat stuk zijn doel inderdaad altijd correct bereikt, en wilt kunnen inzien hoe de verschillende stukken in elkaar passen en samen het overkoepelende doel van het programma realiseren. Bij het schrijven van een programma is het onze taak ervoor te zorgen dat het voor een lezer duidelijk is wat de antwoorden zijn op deze vragen. Dat doen we in de eerste plaats door middel van een doelmatige naamgeving van onze variabelen en functies, en een logische structurering van ons programma. Maar als dat niet volstaat, laat de programmeertaal ons toe commentaar in te voegen in ons programma. Dit zijn stukken tekst die door de computer genegeerd worden, en waarin we bijkomende verduidelijkingen kunnen geven bij ons programma.

In Python is, in elke regel van een programma waar het symbool # (hekje) in voorkomt, het hekje het begin van commentaar. De rest van de regel wordt genegeerd wanneer het programma wordt uitgevoerd. Hier volgt een voorbeeld.

Voorbeeld
Het effect van commentaar.

Omdat de tweede regel start met het #-teken, zal Python die regel in zijn geheel negeren, en zoals je kunt zien werd nummer 2 niet afgedrukt. Normaal gebruik van commentaar omvat onder meer:

  • uitleg over delen van het programma, voor jezelf en anderen om later nog eens door te nemen;
  • TODO-aantekeningen, die aangeven dat je later nog iets moet doen met betrekking tot die plaats in het programma;
  • een regel van het programma tijdelijk buiten werking zetten ("uitcommentariëren") zonder de regel te wissen. Je kunt de regel later dan weer gemakkelijk invoegen in het programma.

Hier volgt een oefening om dit te illustreren. Wanneer je teveel veranderd hebt en terug wilt keren naar de beginsituatie, klik dan op Reset code to default.

Programmeeroefening: Seconden raden
Verbeter (debug) dit programma zodanig dat het het aantal seconden in een week afdrukt.

Tekenreeksen

Tekenreeksen (Eng.: strings) zijn rijen van tekens (letters, cijfers, spaties, leestekens, enz., ook karakters genoemd), of met andere woorden stukjes tekst. Je kan een Python-programma in zijn geheel zien als één grote tekenreeks. Als je echter een rij tekens in een programma wilt laten behandelen door dat programma als een waarde die je bv. wilt toekennen aan een variabele of meegeven als argument aan een functie-oproep, dan moet je de tekens omsluiten met aanhalingstekens. Zo'n uitdrukking noemen we een tekenreeks-citaat (Eng.: string literal); ze "citeert" een tekenreeks. Bijvoorbeeld: in Les 0 was "Hello, World!" van ons allereerste programma een tekenreeks-citaat.

Wanneer het hekje (#) verschijnt in een tekenreeks-citaat, dan wordt het niet behandeld als commentaar:

Voorbeeld
Een tekenreeks-citaat dat het #-teken bevat.

Precies zo zal print("3 + 4") niet het getal 7 afdrukken, maar alleen maar de tekenreeks 3 + 4.

Ontsnapsequenties

Wat als je de aanhalingstekens (") in een tekenreeks wilt opnemen? Wanneer je print("Ik zei "Wow!" tegen hem.") wilt uitvoeren, zal dat een foutmelding tot gevolg hebben: het probleem is dat Python het citaat "Ik zei " ziet, gevolgd door Wow!, wat niet tot het citaat behoort en niets betekent in Python. Dat is niet wat we willen!

Er zijn in Python twee eenvoudige manieren om aanhalingstekens in een tekenreeks op te nemen.

  • Het is toegestaan om een citaat te laten beginnen en eindigen met een enkelvoudig aanhalingsteken (ook wel apostrof genoemd), zoals in 'bla bla'. Dan is het toegestaan, om in het citaat dubbele aanhalingstekens op te nemen, zoals in 'Ik zei "Wow!" tegen hem.'
  • Je kunt een backslash (\) gebruiken gevolgd door een aanhalingsteken (\" of \'). Dit wordt een ontsnapsequentie (Eng.: escape sequence) genoemd, omdat je zo het aanhalingsteken kunt laten ontsnappen aan haar gewoonlijke betekenis. We zeggen dat we het aanhalingsteken escapen. Python zal de backslash weghalen, en alleen het aanhalingsteken opnemen in de tekenreeks. Hier volgt een voorbeeld.
    Voorbeeld
    De backslashes beschermen de aanhalingstekens, maar worden niet opgenomen in de tekenreeks.

De aanhalingstekens zijn niet de enige tekens die je moet escapen in een citaat om ze letterlijk in de tekenreeks op te nemen. Dat geldt ook voor de backslash zelf: als je die wilt opnemen in een tekenreeks moet je haar escapen door middel van een tweede backslash:

Meerkeuze-opgave: Ontsnapsequenties
Wat is de uitvoer van de opdracht print("Backslashes \\ en apostroffen \' en aanhalingstekens \" en hekjes # zijn geweldig!")
Correct!

Programmeeroefening: The Great Escape
Schrijf een programma dat afdrukt:

Escape 't aanhalingsteken met 'n backslash: \"
Opmerking: er is (zoals gewoonlijk) meer dan één manier om dit te doen! Bijvoorbeeld kun je de tekenreeks insluiten in enkelvoudige aanhalingstekens, of in dubbele aanhalingstekens. In beide gevallen is gebruik van een ontsnapsequentie noodzakelijk. Los, als extra oefening, het probleem op de ene manier op en daarna op de andere. Kun je het ook nog op een derde manier oplossen?

Er zijn nog meer ontsnapsequenties, zoals om een regeleinde in de tekenreeks op te nemen; die zullen we nu niet behandelen. Op naar de volgende les!