Les 4: Parameters

Hieronder twee functies waarmee je een klein huisje kan maken met zijden van 50 pixels en aan de een functie waarmee je een groter huisje kan maken met zijden van 75 pixels:

def tekenhuis_50pix ():
  for i in range(4):
    turtle.forward(50)
    turtle.left(90)
  
  turtle.left(90)
  turtle.forward(50)
  turtle.right(30)
  turtle.forward(50)
  turtle.right(120)
  turtle.forward(50)
  turtle.right(30)
  turtle.forward(50)
  turtle.left(90)
  
  def tekenhuis_75pix ():
  for i in range(4):
    turtle.forward(75)
    turtle.left(90)
  
  turtle.left(90)
  turtle.forward(75)
  turtle.right(30)
  turtle.forward(75)
  turtle.right(120)
  turtle.forward(75)
  turtle.right(30)
  turtle.forward(75)
  turtle.left(90)

Als je kijkt naar het verschil tussen de twee bovenstaande functies, dan merk je dat er haast geen verschil is; het enige dat anders is, is het getal waarmee je aangeeft hoeveel pixels de turtle vooruit moet gaan! Waarom zouden we dan zoveel code moeten schrijven? Kan het niet korter?

Het antwoord is: JA!

Als je functies zoals forward, backward, right, left, goto en shape aanroept, dan moet je tussen de haakjes iets opschrijven. Bij forward bijvoorbeeld, moet je aangeven hoeveel de turtle vooruit moet gaan. Je zegt daarom turtle.forward(100) om aan te geven, dat hij 100 pixels vooruit moet gaan. Zou het nou niet makkelijker zijn om ook onze tekenhuis functie zo slim te maken, dat we slechts tekenhuis(100) hoeven te zeggen, om een groter huis met zijden van 100 pixels te maken? En als we tekenhuis(50) zeggen, dat hij dan een kleiner huis maakt, et cetera. Dit doen we als volgt:

Stap 1:

In de def zetten we eerst het woordje lengte tussen de haakjes (je mag ook een ander woord kiezen). Zie rechts. Het gedeelte dat nu met geel gemarkeerd is, is dus veranderd.

Wat je tussen de haakjes zet noem je een parameter of argument.

def tekenhuis (lengte):
  for i in range(4):
    turtle.forward(50)
    turtle.left(90)
  
  turtle.left(90)
  turtle.forward(50)
  turtle.right(30)
  turtle.forward(50)
  turtle.right(120)
  turtle.forward(50)
  turtle.right(30)
  turtle.forward(50)
  turtle.left(90)

Stap 2:

Vervolgens vervangen we het getal dat we tussen forward hebben gezet door het woordje lengte.

Dus overal waar de turtle 50 vooruit moet, gaat de turtle nu lengte vooruit.

def tekenhuis (lengte):
  for i in range(4):
    turtle.forward(lengte)
    turtle.left(90)
  
  turtle.left(90)
  turtle.forward(lengte)
  turtle.right(30)
  turtle.forward(lengte)
  turtle.right(120)
  turtle.forward(lengte)
  turtle.right(30)
  turtle.forward(lengte)
  turtle.left(90)

Stap 3:

Roep nu de functie aan met de gewenste lengte.

Wat er nu gebeurt: Als je tekenhuis(100) opgeeft, dan wordt het woordje lengte gelijkgemaakt aan het getal 100. Overal waar lengte staat wordt dan 100 ingevuld.

def tekenhuis (lengte):
  for i in range(4):
    turtle.forward(lengte)
    turtle.left(90)
  
  turtle.left(90)
  turtle.forward(lengte)
  turtle.right(30)
  turtle.forward(lengte)
  turtle.right(120)
  turtle.forward(lengte)
  turtle.right(30)
  turtle.forward(lengte)
  turtle.left(90)

tekenhuis(100)
tekenhuis(50)

Opdracht 1:

Maak een functie vierkant waarin je tussen de haakjes kan aangeven hoe groot het vierkant moet zijn. Je moet de functie dus als het volgt kunnen gebruiken:

vierkant(20) vierkant(50) vierkant(100) et cetera.

Maak de volgende tekening:

Opdracht 2:

Maak een functie driehoek() die driehoeken van verschillende lengtes kan tekenen. Uiteindelijk moet je drie driehoeken tekenen. Één met zijden van 20 pixels, één met zijden van 40 pixels en één met zijden van 60 pixels. Het moet er als volgt uitzien:

Opdracht 3:

Maak een programma dat het volgende tekent:

Opdracht 4:

Maak een functie envelop() die de parameter lengte moet meekrijgen. De aanroep envelop(50) zal dan het volgende plaatje tekenen:

Pas je programma zo aan, dat er drie enveloppen worden getekend. De enveloppen moeten van links naar rechts steeds groter worden. De groottes mag je zelf bepalen.

Meer dan 1 parameter meegeven

Nu gaan we een stukje verder met de uitleg … Als je een functie maakt, waar je een getal (of iets anders) aan kan meegeven, dan noem je dat een functie met een parameter. Dus de functie tekenhuis uit het hierboven gegeven voorbeeld heeft een parameter genaamd lengte. Nu heb je ook al kennisgemaakt met functies die meer dan één parameter hebben. Denk maar aan de turtle.goto functie. Daar moest je namelijk de x èn de y aan meegeven. Voorbeeld: turtle.goto(120,30) Hoe kun je er nou voor zorgen dat jouw functie ook meer dan één parameter kan gebruiken? Het antwoord is vrij eenvoudig: door voor de tweede een andere naam te verzinnen en dat vervolgens te gebruiken.

def tekenlijn(lengte, kleur):
  turtle.color(kleur)
  turtle.forward(lengte)

tekenlijn(10, "red")
tekenlijn(40, "green")

Kun je ook functies hebben met meer dan twee parameters? Ja! Zoveel als je wilt. Maar voor de functies die we in deze module moeten maken komt dat niet zo vaak voor…

Opdracht 5:

Breid de tekenhuis functie uit met een extra parameter waarmee je, naast de kleur, ook de lengte van de zijden van het huisje kan meegeven.

Opdracht 6:

Maak nu zelf een functie genaamd rechthoek die twee parameters meekrijgt: lengte en breedte. Roep ten slotte de functie als volgt aan:

rechthoek(10, 30)
rechthoek(15, 40)

Last updated