Eigen Functies Verdieping

Let op: log eerst in bij repl.it, en druk in je browser of 'F5' (verversen)
Terug naar de eerste uitleg over Eigen Functies
Terug naar de cursus pagina

In hoofdstuk 8 Eigen Functies heb je geleerd over wat functies zijn en hoe je ze kunt gebruiken. Functies gebruik je voor.:

Omdat ze zo ontzettend belangrijk zijn, gaan we er nog wat mee oefenen.

Verschillende soorten functies - met en zonder parameters en retourwaarden

Een functie bij het programmeren is net als een functie die iemand heeft in een bedrijf: ze moeten iets doen. Soms moet die persoon informatie van je hebben om zijn werk goed te doen (invoer). Soms levert het een concreet product op (iemand maakt iets voor je), en soms een dienst op (iemand doet iets voor je). Neem de bakker bijvoorbeeld:

Je hebt verschillende soorten functies:
  1. Geef je geen informatie aan (dus zonder parameters), en geeft niets terug (dus levert geen retourwaarde op): Soms kan iemand iets doen zonder dat hij of zij daar specifiek informatie voor nodig heeft, en zonder dat het echt een tastbare retourwaarde (of resultaat) oplevert. Bijvoorbeeld de buschauffeuse: ze rijdt rondjes en stopt op vaste locaties, je stapt in de bus, je hoeft haar niet te vertellen waar ze heen (geen parameters) moet rijden en ze geeft jou ook niets (levert geen concrete resultaat op).
  2. Geef je wel informatie aan (dus met parameters), maar geeft niets terug (dus levert geen retourwaarde op): Soms heeft iemand specifiek informatie om iets te doen, maar het hoeft niet per se een tastbare retourwaarde (of resultaat) op te leveren. Bijvoorbeeld de bibliothecaresse die boeken inneemt, je geeft haar jouw boeken, zei registreert dat je ze in hebt geleverd en zet op de juiste plek terug in de bibliotheek.
  3. Geef je wel informatie aan (dus met parameters), en geeft je iets terug (dus levert met return een concrete retourwaarde op): Soms heeft iemand specifiek informatie om iets te doen, en geeft je ook iets terug (een resultaat) waar je daarna iets mee kan doen. Bijvoorbeeld de loketmedewerker bij een geldwisselkantoor: je geeft haar Euro’s omdat je Dollars nodig hebt voor je vakantie in Amerika, ze berekent hoeveel Dollars die Euro’s waard zijn, en geeft je Dollars terug.
  4. Geef je geen informatie aan (dus zonder parameters), maar geeft je wel iets terug (dus levert met return een concrete retourwaarde): Soms heeft iemand geen specifiek informatie nodig om iets te doen, maar geeft je wel iets terug (een resultaat) waar je daarna iets mee kan doen. Bijvoorbeeld een verkeersregelaar, die geeft aanwijzingen wat je moet doen.
We gaan nu oefenen met ieder van deze soorten functies.

I. Functies zonder parameters, zonder retourwaarde

Soms gebruik je functies zonder parameters (zonder dat je het specifieke informatie hoeft te geven) en zonder dat het een retourwaarde (of resultaat) teruggeeft. Dan gebruik je het om je code te structureren en op te ruimen. Heb je code dat bij elkaar hoort of code dat je vaker gebruikt? Daar kun je dan een functie van maken.

Opgave 8b.1 Spirograaf

Klik hier voor een uitwerking.

II. Functies met parameters, zonder retourwaarde

Soms geef je specifieke informatie aan een functie mee (parameter) zodat het precies doet wat jij in die situatie wil. We bekijken nu een voorbeeld zonder dat de functie een retourwaarde (of resultaat) teruggeeft. Heb je code dat je vaker gebruikt, maar er telkens iets anders uit ziet? Daar kun je dan een functie van maken. In het programma hieronder wordt een kunstwerk gemaakt. Je ziet een functie tekenVierkant die als extra informatie (parameter) meekrijgt met welke kleur dat moet gebeuren. In het hoofdprogramma wordt telkens een nieuwe kleur gekozen, de functie aangeroepen om de vierkant te tekenen, en dan een klein stukje gedraaid.

III. Functies met parameters, met retourwaarde

Voor de meeste berekeningen heb je informatie (parameters) nodig, en lever je ook een retourwaarde (resultaat) op. In je programma kun je later met dat resultaat verder werken. Merk op dat:

Een grote voordeel van met functies werken is dat je elk brok los van elkaar kunt bedenken, schrijven en testen. Zo is het makkelijker, als je een fout maakt, er achter te komen waar het zit en te bedenken hoe je het moet oplossen. In de code hierboven kan ik dus, als ik de kosten ga berekenen, me alleen daarmee bezig houden. Met veel print kan ik waarden naar het scherm afdrukken om te controleren of er ook echt gebeurt wat ik verwacht dat er gebeurt: dat heet testen. Als ik een fout vind kan ik diezelfde printjes gebruiken om te achterhalen waar de fout zit: dat heet debuggen.

Opgave 8b.4 Korting berekenen

Klik hier voor een uitwerking.

Opgave 8b.3 Gevoelstemperatuur

Klik hier voor een uitwerking.

IV. Functies zonder parameters, met retourwaarde

Een functie kan informatie opleveren, zonder dat het per se informatie nodig heeft. In het geval hieronder is een compliment de retourwaarde. De functie zelf heeft geen informatie nodig, en heeft dus ook geen parameters.

Opgave 8b.4 Wachtwoord Generator

Klik hier voor een uitwerking.

Globale variabelen

Zoals in Hoofdstuk Functies met parameters, met retourwaarde werd uitgelegd, bestaat een variabele dat binnen een functie wordt aangemaakt alleen binnen dat functie. Dit heet een lokale variabele. Wil je hem daarna gebruiken, dan moet je het retourneren met een return.

Maar hoe zit het dan met globale variabelen? Een globale variabele is een variabele dat je bovenaan je code aanmaakt en gedurende je hele programma wilt gebruiken en deze eventueel wilt aanpassen. Let op: Het is beter om met return te werken dan met global. We kijken even terug naar de code voor het geven van een willekeurige compliment:

In de functie kiesWillekeurigeCompliment() wordt de globale variabele complimenten_lijst gebruikt. Zoals je ziet werkt het programma nog gewoon. Geen probleem dus.

Of toch wel? Nou, dit werkt wel, maar alleen als je het lijst niet aanpast. Wil je binnen een functie een globale variabele gaan aanpassen, dan werkt het niet.

We proberen nu in de functie de lijst aan te passen:

Wat zie je? De functie retourneert compliment_van_de_dag, en daarom heeft deze in het hoofdprogramma de willekeurige waarde dat in de functie gegeven is.

Maar, als je de code runt zie je dat de functie de lijst helemaal niet aanpast. Na afloop van de functie heeft het zijn oude waardes weer.

Wil je in je functie een variabele gebruiken dat buiten de functie is aangemaakt, gebruik dan global. Binnen de functie geeft global complimenten_lijst aan dat het om de globale variabele complimenten_lijst gaat.

Opgave 8b.5 Global omzetten naar parameters en retourwaarden

Klik hier voor een uitwerking.

Leesbaarheid van je code

Onderzoek met eye-trackers heeft aangetoond dat terwijl je programmeert je telkens je eigen code opnieuw aan het lezen bent. Ook als je op zoek gaat naar fouten, of aan de slag wil met uitbreidingen, ga je weer code lezen dat je al geschreven hebt. Je maakt het jezelf makkelijker door je code overzichtelijk te maken. Dat scheelt tijd en daardoor maak je minder fouten. Hier volgen een paar tips:

Commentaar

Als je een boek leest hebben de letters van een woord een betekenis. De woorden in een zin hebben een bepaalde betekenis. De zinnen in een paragraaf samen maken dat je glimlacht, lacht of huilt. Als je een samenvatting geeft van een boek, of een hoofdstuk van een boek, dan leg je niet regel-voor-regel uit wat er staat, maar ga je op zoek naar de betekenis en geef je dat in eigen woorden weer.

Op dezelfde manier hebben meerdere regels code samen een betekenis. Als je code leest (en dat doe je elke keer als je een programma schrijft), dan ben je in je hoofd bezig met de betekenis van de code dat er staat, want daar bouw je op verder. Ook moet je daar wel eens foutjes uit halen. Het is daarom handig om korte 'samenvattingen' te schrijven bij elke brok code. Een brok code is een aantal regels dat samen iets voor elkaar krijgt. Vaak is het de code dat bij een loop hoort, of bij een if-then-else. Het is een goede gewoonte om daar commentaar bij te schrijven: een regel commentaar dat in eigen woorden samenvat wat een brok code doet. Ook bij een functie zet je commentaar dat uitlegt wat het doet en wat de parameters en retourwaarden zijn.

Het is echt niet nodig om per regel commentaar te geven. Van een enkele regel code kan je ook zelf wel lezen wat er staat. Wel moet je bij een regel commentaar zetten als je iets nieuws gebruikt (bijvoorbeeld, je hebt een functie op internet gevonden), of omdat je een keuze hebt gemaakt om een probleem op een bepaalde manier op te lossen. Dit leg je dan kort uit met commentaar.

Als je een groter programma maakt, zoals een spel, dan is het handig om:

Afsluitende Opgaven

Afsluitende opgave 8b.2 Talendetector

Klik hier om je eigen oplossing te vergelijken met een model oplossing.

Afsluitende opgave 8b.3 Vat samen

Deze opdracht wordt nog niet automatisch gecontroleerd. Klik hier om je eigen oplossing te vergelijken met een model oplossing.

Afsluitende opgave 8b.4 Vat samen

Klik hier om je eigen oplossing te vergelijken met een model oplossing.

Afsluitende opgave 8b.5 Valide wachtwoord

Deze opdracht wordt nog niet automatisch gecontroleerd. Klik hier om je eigen oplossing te vergelijken met een model oplossing.

Wat je geleerd hebt over Eigen Functies

In dit hoofdstuk is het volgende besproken:


Terug naar de cursus pagina