# Programmeren met &turtlelang;

Dit is een overzicht van &kturtle;'s &turtlelang;. In dit hoofdstuk bespreken we in het kort de verschillende instructietypen. Daarna leggen we één voor één de commando's uit. Daarna volgen de plaatshouders, rekenen, vragen en de programmastuurcommando's. Tot slot laten we je zien hoe je je eigen commando's kunt maken met het commando leer.

## Verschillende instructietypen

Zoals elke taal heeft &turtlelang; verschillende soorten woorden en symbolen. Hier worden de verschillen tussen deze soorten kort uitgelegd.

### Commando's

Met behulp van commando's vertel je de schildpad of &kturtle; om iets te doen. Sommige commando's vragen om een invoer, anderen geven een uitvoer.

    # vooruit is een commando dat invoer nodig heeft. In ons geval het getal 100:
    vooruit 100

Meer informatie over alle commando's die &kturtle; kent vind je hier.

### Getallen

Getallen ken je vast wel. De manier waarop getallen worden gebruikt in &kturtle; is niet veel anders dan in een spreektaal, of bij het rekenen.

We hebben de zogenaamde natuurlijke getallen: `0`, `1`, `2`, `3`, `4`, `5`, enz. De negatieve getallen: `-1`, `-2`, `-3`, enz. En de getallen met een komma: `0,1`, `3,14`, `33,3333`, `-5,05`, `-1,0`.

Getallen kunnen worden gebruikt in berekeningen en in vragen. Ze kunnen ook in plaatshouders worden geplaatst.

Getallen worden donkerrood geaccentueerd in de codebewerker.

### Tekenreeksen

Eerst een voorbeeld:

    schrijf "Hallo, ik ben een tekenreeks."

In dit voorbeeld is `schrijf` een commando en `"Hallo, ik ben een tekenreeks"` een tekenreeks. Een tekenreeks begint en eindigt met het teken `"`. Hierdoor "weet" &kturtle; dat dit een tekenreeks is.

Tekenreeksen kunnen in plaatshouders worden geplaatst. Maar je kunt ze niet gebruiken in berekeningen en vragen.

Tekenreeksen worden rood geaccentueerd in de codebewerker.

### Namen

When using the &turtlelang; programming language you create new things. If you write a program you will often need containers and in some cases you need learn to create new commands. When making a new command with learn you will have to specify a name.

You can choose any name, as long as it does not already have a meaning. For instance you cannot name a function forward, since that name is already used for an internal command.

    # here forward is used as a new command,
    # but it already has a meaning so
    # this will produce an error:
    learn forward {
      print "this is invalid"
    }

    # this works:
    learn myforward {
      print "this is ok"
    }

Names can contain only letters, numbers and underscores (_). Yet they have to start with a letter. Container names have to start with the container prefix ($).

    # here forward is used as a container,
    # starting with the $ prefix, so it does
    # not conflict with the forward command
    $forward = 20
    print $forward

Plaatshouders worden geaccentueerd met vet paars in de codebewerker.

Lees ook de documentatie over plaatshouders en het commando leer voor een betere uitleg en meer voorbeelden.

### Toewijzingen

Toewijzingen worden gedaan met het symbool `=`. In programmeertalen is het beter om een `=` niet te lezen als 'is', maar als 'wordt'. Het woordje 'is' past beter bij het teken `==`, dit is een vraag.

Toewijzingen worden meestal om twee redenen gebruikt: (1) om inhoud toe te voegen aan plaatshouders en (2) om de inhoud van een plaatshouder te veranderen. Bijvoorbeeld:

    $x = 10
    # de plaatshouder x bevat nu het getal 10
    $W = "Mijn leeftijd is: "
    # de plaatshouder W bevat nu de tekenreeks "Mijn leeftijd is:"
    # dit plaatst de inhoud van de plaatshouders 'W' en 'x' op het canvas
    schrijf $W + $x

Meer voorbeelden kun je vinden in het hoofdstuk waarin het begrip plaatshouders wordt uitgelegd.

### Rekensymbolen

&kturtle; supports all basic math symbols: add (`+`), subtract (`-`), multiply (`*`), divide (`/`) and the brackets `(` and `)`.

Een complete uitleg en meer voorbeelden vind je in het hoofdstuk over rekenen.

### Vragen

We kunnen eenvoudige vragen stellen waarop het antwoord alleen maar 'waar' of 'onwaar' zal zijn.

Het gebruik van vragen wordt uitgebreid uitgelegd in het hoofdstuk over vragen.

### Lijmwoorden voor vragen

Vragen kunnen aan elkaar worden gelijmd met zogenaamde 'lijmwoorden'. De lijmwoorden zijn `en`, `of` en een speciaal lijmwoord is: `niet`.

Het gebruiken van lijmwoorden wordt uitgelegd in het hoofdstuk Vragenlijm.

### Commentaar

Commentaarregels zijn regels die beginnen met een `#`. Bijvoorbeeld:

    # dit is commentaar!
    schrijf "dit is geen commentaar"
    # de vorige regel is geen commentaar, maar de volgende regel wel:
    # schrijf "dit is geen commentaar"

In commentaarregels kunnen we aantekeningen schrijven die iets vertellen over de programmacode, voor onszelf of voor iemand anders die deze code leest. Commentaar wordt gebruikt om : (1) een kleine beschrijving van het programma toe te voegen, (2) uit te leggen hoe een stukje code werkt als dit minder duidelijk is, en (3) om regels programmacode die (tijdelijk) niet gebruikt mogen worden over te slaan (zie de laatste regel in het voorbeeld).

Commentaarregels worden geaccentueerd met lichtgrijs in de codebewerker.

## Commando's

Met behulp van commando's vertel je de schildpad of &kturtle; om iets te doen. Sommige commando's vragen om een invoer, anderen geven een uitvoer. In deze sectie zullen we alle commando's die in &kturtle; kunnen worden gebruikt, aan je uitleggen. Onthoud dat alle ingebouwde commando's die we hier bespreken geaccentueerd worden met blauw in de codebewerker. Hiermee kun je ze onderscheiden van de rest.

### De schildpad voortbewegen

Er zijn verschillende commando's waarmee je de schildpad over het scherm kunt bewegen.

forward (fw)

      vooruit X

  `vooruit` verplaatst de schildpad X pixels vooruit. Als de pen neer is zal de schildpad een spoor achterlaten. `vooruit` kun je afkorten met `vt`

backward (bw)

      achteruit X

  `achteruit` verplaatst de schildpad X pixels achteruit. Als de pen neer is zal de schildpad een spoor achterlaten. `achteruit` kun je afkorten met `at`.

turnleft (tl)

      draailinks X

  `draailinks` laat de schildpad X graden naar links draaien. `draailinks` kun je afkorten met `dl`.

turnright (tr)

      draairechts X

  `turnright` the turtle to turn an amount of X degrees to the right. `turnright` can be abbreviated to `tr`.

direction (dir)

      richting X

  `richting` zet de richting van de schildpad op X graden, geteld vanaf 0. Dus niet vanuit de vorige positie van de schildpad. `richting` kun je afkorten met `rt`.

thuis

      thuis

  `thuis` zet de schildpad in het midden van het canvas.

ganaar

      ganaar X,Y

  `go` commands the turtle to go to a certain place on the canvas. This place is X pixels from the left of the canvas, and Y pixels form the top of the canvas.

ganaarx

      ganaarx X

  `ganaarx X` laat de schildpad naar een positie gaan die X pixels vanaf de linkerkant van het canvas ligt. De hoogte blijft hetzelfde. `ganaarx` kun je afkorten met `gx`.

ganaary

      ganaary Y

  `ganaary` laat de schildpad naar een positie gaan die Y pixels vanaf de bovenkant van het canvas ligt. De afstand vanaf de linkerkant van het canvas blijft hetzelfde. `ganaary` kun je afkorten met `gy`.

Using the commands `go`, `gox`, `goy` and `center` the turtle will not draw a line, no matter if the pen is up or down.

### Where is the turtle?

There are two commands which return the position of the turtle on the screen.

getx

  `getx` returns the number of pixels from the left of the canvas to the current position of the turtle.

gety

  `gety` returns the number of pixels from the top of the canvas to the current position of the turtle.

### De schildpad heeft een pen

De schildpad heeft een pen die een lijn tekent als de schildpad beweegt. Er zijn een aantal commando's die de pen bedienen. In deze sectie leggen we deze commando's uit.

penup (pu)

      penup

  `penop` tilt de pen van het canvas. Als de pen omhoog is, dan wordt er geen lijn getekend als de schildpad beweegt. Kijk ook bij `penneer`. `penop` kun je afkorten met `po`.

pendown (pd)

      pendown

  `penneer` zet de pen op het canvas. Als de pen op het canvas drukt, dan wordt er een lijn getekend als de schildpad beweegt. Zie ook `penop`. `penneer` kun je afkorten met `pn`.

penwidth (pw)

      pendikte X

  `pendikte` X stelt de dikte van de pen (de breedte van de lijn) op X pixels. `pendikte` kun je afkorten met `pd`.

pencolor (pc)

      penkleur R,G,B

  `penkleur` bepaalt de kleur van de pen. `penkleur` vraagt om een RGB-combinatie (drie getallen tussen 0 en 256) als invoer. `penkleur` kun je afkorten met `pk`.

### Commands to control the canvas

There are several commands to control the canvas.

canvassize (cs)

      canvassize X,Y

  With the `canvassize` command you can set the size of the canvas. It takes X and Y as input, where X is the new canvas width in pixels, and Y is the new height of the canvas in pixels. `canvassize` can be abbreviated to `cs`.

canvascolor (cc)

      canvascolor R,G,B

  `canvascolor` set the color of the canvas. `canvascolor` takes an RGB combination as input. `canvascolor` can be abbreviated to `cc`.

### Commando's om schoon te maken

Er zijn twee commando's waarmee je het canvas kunt schoonmaken nadat je er een bende van hebt gemaakt.

clear (ccl)

      clear

  Met `schoon` kun je alle tekeningen op het canvas wissen. De rest blijft staan, de positie en de hoek van de schildpad, de kleur van het canvas, de zichtbaarheid van de schildpad en de grootte van het canvas blijven zoals ze waren.

alsnieuw

      alsnieuw

  `reset` cleans much more thoroughly than the `clear` command. After a `reset` command everything is like is was when you had just started &kturtle;. The turtle is positioned at the middle of the screen, the canvas color is white, the turtle draws a black line on the canvas and the canvassize is set to 400 x 400 pixels.

### De schildpad is een sprite (zeg maar: sprait)

Eerst volgt hier een korte uitleg van wat sprites zijn: sprites zijn kleine plaatjes die je kunt rondbewegen op het scherm, zoals je vaak in computerspelletjes ziet. Onze schildpad is zo'n sprite. Voor meer info, zie de woordenlijst bij linkend="sprites" >sprites.

Noot vertaler: eigenlijk zijn sprites zoiets als geesten, feeën of kabouters.

Hierna volgt een volledig overzicht van alle commando's die je kunt gebruiken bij sprites.

[De huidige versie van &kturtle; heeft alleen een schildpad als sprite. Andere sprites zijn er dus niet. In toekomstige versies van het programma zul je de schildpad kunnen veranderen in je eigen ontwerp]

spriteshow (ss)

      spriteshow

  `spriteshow` makes the turtle visible again after it has been hidden. `spriteshow` can be abbreviated to `ss`.

spritehide (sh)

      spritehide

  `spritehide` hides the turtle. This can be used if the turtle does not fit in your drawing. `spritehide` can be abbreviated to `sh`.

### Can the turtle write?

Het antwoord is: ja. De schildpad kan schrijven. Hij schrijft zo'n beetje alles wat je hem opdraagt.

schrijf

      schrijf X

  Het commando `schrijf` kun je gebruiken om de schildpad iets op het canvas te laten schrijven. `schrijf` vraagt om letters en/of cijfers als invoer. Je kunt verschillende getallen en stukken tekst `laten schrijven` met behulp van het +-symbool. Hier is een klein voorbeeld:

      $jaar = 2003
      $auteur = "Cies"
      schrijf $auteur + " begon het KTurtle-project in " + $jaar + " en vindt het nog steeds leuk om er aan te werken!"

lettermaat

      lettermaat X

  `lettermaat` bepaalt de grootte van de letters die wordt gebruikt door het commando `schrijf`. `lettermaat` vraagt om een getal als invoer. De grootte geef je op in pixels.

### Een commando dat een dobbelsteen voor je gooit

Er is een commando dat dobbelstenen voor je gooit. Dit commando heet `gok`, en is erg handig als je wat onverwachte resultaten wilt hebben.

random (rnd)

      gok X,Y

  `random` is a command that takes input and gives output. As input are required two numbers, the first (X) sets the minimum output, the second (Y) sets the maximum. The output is a randomly chosen number that is equal or greater than the minimum and equal or smaller than the maximum. Here a small example:

      repeat 500 {
        $x = random 1,20
        forward $x
        turnleft 10 - $x
      }

  Using the `random` command you can add a bit of chaos to your program.

### Invoer en terugkoppeling met behulp van dialogen

A dialog is a small pop-up window that provides some feedback or asks for some input. &kturtle; has two commands for dialogs, namely: `message` and `ask`

bericht

      bericht X

  De opdracht `bericht` heeft als invoer een tekenreeks. Er wordt een venstertje getoond waarin een dialoog met de tekst van deze tekenreeks.

      bericht "Cies begon het KTurtle-project in 2003 en vindt het nog steeds leuk om er aan te werken!"

vraag

      vraag X

  `vraag` heeft als invoer een tekenreeks. Er wordt een venstertje getoond met de tekst van deze tekenreeks, net als bij het commando bericht. Maar in deze dialoog is ook een invoerveld. In dit invoerveld kan een gebruiker een getal of een tekenreeks invoeren die in een plaatshouder kan worden opgeslagen. Bijvoorbeeld

      $in = vraag "Hoe oud ben je?"
      $uit = 5 + $in
      schrijf "Over 5 jaar ben je " + $uit + " jaar."

  . Als de gebruiker de invoerdialoog annuleert of er niets in invult wordt de plaatshouder leeg gemaakt.

## Plaatshouders

Plaatshouders zijn letters of woorden die door de programmeur kunnen worden gebruikt om daarin een getal of tekst op te slaan. Plaatshouders die een getal bevatten heten variabelen, plaatshouders die tekst bevatten heten tekenreeksen. Plaatshouders kun je herkennen aan het $-teken dat ervoor wordt geplaatst.

Containers that are not used contain nothing. An example:

    print $N

This will print nothing and you get an error message.

### Variabelen: plaatshouders voor getallen

Laten we beginnen met een voorbeeld:

    $x = 3
    schrijf $x

Op de eerste regel wordt de letter `x` omgevormd tot een variabele (plaatshouder van een getal). Zoals je ziet wordt de waarde van de variabele `x` op 3 gesteld. Op de tweede regel wordt de waarde geschreven.

Merk op dat als we een x hadden willen schrijven, we het volgende zouden hebben geschreven

    schrijf "x"

Dat was gemakkelijk. Nu een wat moeilijker voorbeeld:

    $A = 2004
    $B = 25
    $C = $A + $B

    # het volgende commando schrijft "2029"
    schrijf $C
    achteruit 30
    # het volgende commando schrijft "2004 plus 25"
    schrijf $A + " plus " + $B
    achteruit 30
    # het volgende commando schrijft "1979"
    schrijf $A - $B

Op de eerste twee regels krijgen de variabelen `A` en `B` de waarden 2004 en 25 toegekend. Op de derde regel krijgt de variabele `C` de waarde `A + B`, en dat is 2029. De rest van het voorbeeld bestaat uit 3 `schrijf`-commando's met `achteruit 30` ertussen in. De `achteruit 30` staat er om er voor te zorgen dat elke uitvoer op een nieuwe regel komt. In dit voorbeeld zie je ook dat variabelen kunnen worden gebruikt om ermee te rekenen.

### Plaatshouders die tekst bevatten (tekenreeksen)

In programmacode begint en eindigt gewone tekst vaak met aanhalingstekens. Zoals we eerder al hebben gezien:

    schrijf "Hallo programmeur!"

De gewone tekst staat tussen aanhalingstekens. Dit soort stukjes tekst noemen we tekenreeksen.

Strings can also be stored in containers just like numbers Strings are a lot like variables. The biggest difference is that they contain text in stead of numbers. For this reason strings cannot be used in mathematical calculations and questions. An example of the use of strings:

    $x = "Hello "
    $name = ask "Please enter your name..."
    print $x + $name + ", how are you?"

On the first line the string `x` is set to Hello . On the second line the string `name` is set to the output of the `ask` command. On the third line the program prints a composition of three strings on the canvas.

Dit programma vraagt je je naam in te voeren. Als je bijvoorbeeld de naam Paul invoert, dan schrijft het programma Hallo Paul, hoe gaat het met je?. Houd er rekening mee dat de plus (+) het enige rekenkundige teken is dat je kunt gebruiken met tekenreeksen. Hierdoor worden tekenreeksen als het ware aan elkaar geplakt.

## Kan de schildpad rekenen?

Yes, &kturtle; will do your math. You can add (+), subtract (-), multiply (*), and divide (/). Here is an example in which we use all of them:

    $a = 20 - 5
    $b = 15 * 2
    $c = 30 / 30
    $d = 1 + 1
    print "a: "+$a+", b: "+$b+", c: "+$c+", d: "+$d

Do you know what value a, b, c and d have? Please note the use of the assignment symbol `=`.

Als je een eenvoudige rekensom wilt laten doen, dan kan dat bijvoorbeeld zo:

    schrijf 2004-12

Nu een voorbeeld met haakjes:

    schrijf ( ( 20 - 5 ) * 2 / 30 ) + 1

Het gedeelte tussen de binnenste haakjes zal als eerste worden uitgerekend. In dit voorbeeld wordt 20 - 5 berekend, dan wordt de uitkomst vermenigvuldigd met 2, en daarna wordt er gedeeld door 30. Tot slot wordt er 1 bij opgeteld (het antwoord is 2).

&kturtle; has advanced mathematical features. It knows the number `pi` and trigonometrical functions like `sin`, `cos`, `tan`, `arcsin`, `arccos`, `arctan` and the functions `sqrt` and `exp`.

### Let the turtle round your numbers

If you need integers in calculations, use this function.

round

      round(x)

  `round` the given number to the nearest integer.

      print round(10.8)
      forward 20
      print round(10.3)
      forward 20

  With this code the turtle will print the numbers 11 and 10.

## Stel vragen en krijg antwoorden...

`als` en `terwijl` zijn programmastuurcommando's die we in de volgende sectie zullen bespreken. In deze sectie gaan we het commando `als` gebruiken om vragen uit te leggen.

### Vragen

Een voorbeeld van een vraag:

    $x = 6
    als $x > 5 {
     schrijf "hallo"
    }

In dit voorbeeld is de vraag het gedeelte `x > 5`. Als het antwoord op deze vraag 'waar' is, dan wordt de programmacode tussen de accolades uitgevoerd. Vragen zijn een belangrijk onderdeel van het programmeren en worden vaak gebruikt in combinatie met programmastuurcommando's, zoals `als`. Alle getallen en variabelen (getalplaatshouders) kunnen met elkaar worden vergeleken met behulp van vragen.

Hier zijn alle mogelijke vragen:

#### Soorten van vragen

`a == b` | gelijk aan | het antwoord is waar als `a` gelijk is aan `b`
`a != b` | ongelijk aan | het antwoord is waar als `a` niet gelijk is aan `b`
`a > b` | groter dan | het antwoord is waar als `a` groter is dan `b`
`a < b` | kleiner dan | het antwoord is waar als `a` kleiner is dan `b`
`a >= b` | groter dan of gelijk aan | het antwoord is waar als `a` groter is dan of gelijk aan `b`
`a <= b` | kleiner dan of gelijk aan | het antwoord is waar als `a` kleiner is dan of gelijk aan `b`

### Vragenlijm

Question glue-words enable us to glue questions into one big question.

    $a = 1
    $b = 5
    if ($a < $b) and ($b == 5) {
      print "hello"
    }

In this example the glue-word `and` is used to glue 2 questions (`a < 5`, `b == 5`) together. If one side of the `and` would answer false the whole question would answer false, because with the glue-word `and` both sides need to be true in order to answer true. Please do not forget to use the brackets around the questions!

Hier is een schematisch overzicht, een meer gedetailleerde uitleg volgt hieronder:

#### Lijmwoorden voor vragen

`en` | beide zijden moeten 'waar' zijn voor het antwoord 'waar'
`of` | als een van de, of beide, zijden 'waar' is, dan is het antwoord 'waar'
`niet` | Een speciaal geval: werkt alleen op één vraag! Verandert 'waar' in 'onwaar' en 'onwaar' in 'waar'.

#### en

Als twee vragen aan elkaar zijn gelijmd met `en`, dan moeten beide zijden van de `en` 'waar' zijn om 'waar' als resultaat te krijgen. Een voorbeeld:

    $a = 1
    $b = 5
    als (($a < 10) en ($b == 5)) en ($a < $b) {
     schrijf "hallo"
    }

In dit voorbeeld zie je een gelijmde vraag vastgelijmd aan nog een andere vraag.

#### of

Als één van de, of beide, vragen die aan elkaar zijn geplakt met `of` 'waar' is, dan is het antwoord 'waar'. Een voorbeeld:

    $a = 1
    $b = 5
    als (($a < 10) of ($b == 10)) of ($a == 0) {
     schrijf "hallo"
    }

In dit voorbeeld zie je een gelijmde vraag vastgelijmd aan nog een andere vraag.

#### niet

`niet` is een speciaal lijmwoord omdat het alleen met één vraag tegelijk werkt. `niet` verandert 'waar' in 'onwaar' en 'onwaar' in 'waar'. Voorbeeld:

    $a = 1
    $b = 5
     als niet (($a < 10) en ($b == 5)) {
     schrijf "hallo"
    }
    anders
    {
     schrijf "niet hallo ;-)"
    }

In dit voorbeeld is de gelijmde vraag 'waar', maar de `niet` verandert dit in 'onwaar`. Dus uiteindelijk wordt` "niet hallo ;-)" afgedrukt op het canvas.

## Sturen van het programma

De programmastuurcommando's maken het mogelijk, —zoals de naam al zegt— het verloop van een programma te sturen.

Execution controlling commands are highlighted with dark green in a bold font type. The brackets are mostly used together with execution controllers and they are highlighted with bolded black.

### De schildpad laten wachten

Als je al wat hebt geprogrammeerd in &kturtle;, dan heb je vast gemerkt dat de schildpad erg snel is met tekenen. Dit commando laat de schildpad steeds een opgegeven tijdsduur te wachten.

wait

      wacht X

  `wacht` X laat de schildpad steeds X seconden wachten.

      herhaal 36{
       vooruit 5
       draairechts 10
       wacht 0,5
      }

  Deze programmacode tekent een cirkel, maar de schildpad zal na elke stap een halve seconde wachten. Hier door lijkt het net of de schildpad kruipt.

### Doe "als"

als

      als vraag { ... }

  De programmacode die tussen de accolades staat wordt alleen uitgevoerd `als` het antwoord op de vraag waar is. Lees voor meer informatie over vragen het gedeelte over vragen.

      $x = 6
      als $x > 5 {
       schrijf "x is groter dan vijf!"
      }

  Op de eerste regel krijgt `x` de waarde 6. Op de tweede regel wordt de vraag `x > 5` gesteld. Omdat het antwoord op deze vraag waar is zal door het programmastuurcommando `als` de programmacodecode tussen de haakjes worden uitgevoerd

### Als niet, of in andere woorden: "anders"

else

      als vraag { ... } anders { ... }

  `anders` kan worden gebruikt als aanvulling op het programmastuurcommando `als`. De programmacode tussen de accolades na `anders` wordt alleen uitgevoerd als het antwoord op de gestelde vraag 'onwaar' is.

      alsnieuw$x = 4
      als $x > 5 {
        schrijf "x is groter dan vijf!"
      }
      anders
      {
        schrijf "x is kleiner dan zes!"
      }

  Met de vraag wordt gevraagd of `x` groter is dan 5. Omdat `x` op op de eerste regel de waarde 4 krijgt is het antwoord onwaar. Dit betekent dat de code tussen de accolades achter `anders` zal worden uitgevoerd.

### De lus "terwijl"

while

      terwijl vraag { ... }

  The execution controller `while` is a lot like `if`. The difference is that `while` keeps repeating (looping) the code between the brackets until the answer to the question is false.

      $x = 1
      while $x < 5 {
        forward 10
        wait 1
        $x = $x + 1
      }

  On the first line `x` is set to 1. On the second line the question `x < 5` is asked. Since the answer to this question is true the execution controller `while` starts executing the code between the brackets until the answer to the question is false. In this case the code between the brackets will be executed 4 times, because every time the fifth line is executed `x` increases by 1.

### The "repeat" loop

repeat

      repeat number { ... }

  The execution controller `repeat` is a lot like `while`. The difference is that `repeat` keeps repeating (looping) the code between the brackets for the given number.

### De lus "voor", een tellende lus

voor

      for start point to end point { ... }

  De lus `voor` is een tellende lus, dus die houdt de telling voor je bij.

      voor $x = 1 tot 10 {
       schrijf $x * 7
       vooruit 15
      }

  Telkens als de programmacode tussen de accolades wordt uitgevoerd wordt de waarde `x` met 1 vermeerderd (dit gaat dus van zelf), totdat `x` de waarde 10 heeft bereikt. De code tussen de accolades schrijft de waarde van `x` vermenigvuldigd met 7. Nadat deze commando's zijn uitgevoerd zie je de tafel van 7 op het canvas staan.

  The default step size of a loop is 1, you can use an other value with

      for start point to end point step step size { ... }

### Leave a loop

break

      break

  Terminates the current loop immediately and transfers control to the statement immediately following that loop

### Stop the turtle

exit

      exit

  Finishes the execution of the code.

## Maak je eigen commando's met leer

`learn`
is a very special command, because it is used to create your own commands. The command you create can take input and return output. Let us take a look at how a new command is created:

    learn circle $x {
      repeat 36 {
        forward $x
        turnleft 10
      }
    }

The new command is called `circle`. `circle` takes one input, a number, to set the size of the circle. `circle` returns no output. The `circle` command can now be used like a normal command in the rest of the code. See this example:

    learn circle $X {
      repeat 36 {
        forward $X
        turnleft 10
      }
    }

    go 200,200
    circle 20

    go 300,200
    circle 40

In the next example, a command with a return value is created.

    reset

    learn multiplyBySelf $n {
      $r = $n * $n
      return $r
    }
    $i = ask "Please enter a number and press OK"
    print $i + " multiplied by itself is: " + multiplyBySelf $i

In this example a new command called `multiplyBySelf` is created. The input of this command is multiplied by itself and then returned, using the `return` command. The `return` command is the way to output a value from a function you have created.

Commands can have more than one input. In the next example, a command that draws a rectangle is created.

    learn box $X, $Y {
      forward $Y
      turnright 90
      forward $X
      turnright 90
      forward $Y
      turnright 90
      forward $X
      turnright 90
    }

Now you can run `box 50, 100` and the turtle will draw a rectangle on the canvas.