<!--Dear translator: please NEVER translate the id or anything inside the tags as they are needed in english by the application
     Thanks a lot in advance.-->
<chapter id="reference">
<title
>Programmeren met &turtlelang;</title>
<para
>Dit is een overzicht van &kturtle;'s &turtlelang;. In dit hoofdstuk bespreken we in het kort de <link linkend="different-instructions"
>verschillende instructietypen</link
>. Daarna leggen we één voor één de <link linkend="commands"
>commando's</link
> uit. Daarna volgen de <link linkend="containers"
>plaatshouders</link
>, <link linkend="math"
>rekenen</link
>, <link linkend="questions"
>vragen</link
> en de <link linkend="controlling-execution"
>programmastuurcommando's</link
>. Tot slot laten we je zien hoe je je eigen commando's kunt maken met het commando <link linkend="learn"
>leer</link
>.</para>

<sect1 id="different-instructions">
<title
>Verschillende instructietypen</title>
<para
>Zoals elke taal heeft &turtlelang; verschillende soorten woorden en symbolen. Hier worden de verschillen tussen deze soorten kort uitgelegd.</para>

<sect2 id="command">
<title
>Commando's</title>
<para
>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. <screen
># vooruit is een commando dat invoer nodig heeft. In ons geval het getal 100:
vooruit 100
</screen>
</para>
<para
>Meer informatie over alle commando's die &kturtle; kent vind je <link linkend="commands"
>hier</link
>.</para>
</sect2>

<sect2 id="number">
<title
>Getallen</title>
<para
>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. </para>
<para
>We hebben de zogenaamde natuurlijke getallen: <userinput
>0</userinput
>, <userinput
>1</userinput
>, <userinput
>2</userinput
>, <userinput
>3</userinput
>, <userinput
>4</userinput
>, <userinput
>5</userinput
>, enz. De negatieve getallen: <userinput
>-1</userinput
>, <userinput
>-2</userinput
>, <userinput
>-3</userinput
>, enz. En de getallen met een komma: <userinput
> 0,1</userinput
>, <userinput
> 3,14</userinput
>, <userinput
> 33,3333</userinput
>, <userinput
> -5,05</userinput
>, <userinput
>-1,0</userinput
>. </para>
<para
>Getallen kunnen worden gebruikt in <link linkend="math"
>berekeningen</link
> en in <link linkend="questions"
>vragen</link
>. Ze kunnen ook in <link linkend="containers"
>plaatshouders</link
> worden geplaatst.</para>
<para
>Getallen worden donkerrood <glossterm
>geaccentueerd</glossterm
> in de <link linkend="the-code-editor"
>codebewerker</link
>.</para>
</sect2>

<sect2 id="string">
<title
>Tekenreeksen</title>
<para
>Eerst een voorbeeld:<screen>
schrijf "Hallo, ik ben een tekenreeks."
</screen
> In dit voorbeeld is <userinput
>schrijf</userinput
> een commando en <userinput
>"Hallo, ik ben een tekenreeks"</userinput
> een tekenreeks. Een tekenreeks begint en eindigt met het teken <userinput
>"</userinput
>. Hierdoor "weet" &kturtle; dat dit een tekenreeks is.</para>
<para
>Tekenreeksen kunnen in <link linkend="containers"
>plaatshouders</link
> worden geplaatst. Maar je kunt ze niet gebruiken in <link linkend="math"
>berekeningen</link
> en <link linkend="questions"
>vragen</link
>.</para>
<para
>Tekenreeksen worden rood <glossterm
>geaccentueerd</glossterm
> in de <link linkend="the-code-editor"
>codebewerker</link
>.</para>
</sect2>


<sect2 id="name">
<title
>Namen</title>
<para
>Je kunt met de programmeertaal &turtlelang; nieuwe dingen maken. Als je een programma schrijft zul je vaak <link linkend="containers"
>plaatshouders</link
> nodig hebben, en in sommige gevallen heb je het commando <link linkend="learn"
>leer</link
> nodig om nieuwe commando's te maken. Als je een <link linkend="containers"
>plaatshouder</link
> of een nieuw commando met behulp van <link linkend="learn"
>leer</link
> maakt, dan moet je er een naam aan geven.</para>
<para
>Je kunt een willekeurige naam kiezen, als die maar niet al wordt gebruikt. Bijvoorbeeld, je kunt een plaatshouder niet <link linkend="forward"
>vooruit</link
> noemen, omdat die naam al wordt gebruikt voor een commando, en dus al een betekenis heeft. <screen>
# hier wordt vooruit gebruikt als een plaatshouder, maar die heeft al een betekenis
# dus komt er een foutmelding:
$vooruit = 20

# dit werkt echter wel (is een commando):
vooruit 20
</screen
> Namen mogen alleen letters, cijfers en onderstreepjes (_) bevatten. Ze moeten altijd met een letter beginnen. </para>
<para
>Plaatshouders worden <glossterm
>geaccentueerd</glossterm
> met vet paars in de <link linkend="the-code-editor"
>codebewerker</link
>.</para>
<para
>Lees ook de documentatie over <link linkend="containers"
>plaatshouders</link
> en het commando <link linkend="learn"
>leer</link
> voor een betere uitleg en meer voorbeelden. </para>
</sect2>

<sect2 id="assignment">
<title
>Toewijzingen</title>
<para
>Toewijzingen worden gedaan met het symbool <userinput
>=</userinput
>. In programmeertalen is het beter om een <userinput
>=</userinput
> niet te lezen als 'is', maar als 'wordt'. Het woordje 'is' past beter bij het teken <userinput
>==</userinput
>, dit is een <link linkend="questions"
>vraag</link
>.</para>
<para
>Toewijzingen worden meestal om twee redenen gebruikt: (1) om inhoud toe te voegen aan <link linkend="containers"
>plaatshouders</link
> en (2) om de inhoud van een plaatshouder te veranderen. Bijvoorbeeld: <screen
>$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
</screen>
</para>
<para
>Meer voorbeelden kun je vinden in het hoofdstuk waarin het begrip <link linkend="containers"
>plaatshouders</link
> wordt uitgelegd.</para>
</sect2>

<sect2 id="math-symbols">
<title
>Rekensymbolen</title>
<para
>&kturtle; kent alle basissymbolen van het rekenen: optellen (<userinput
>+</userinput
>), aftrekken (<userinput
>-</userinput
>), vermenigvuldigen (<userinput
>*</userinput
>), delen <userinput
>/</userinput
>) en de haakjes <userinput
>(</userinput
> en <userinput
>)</userinput
>.</para>
<para
>Een complete uitleg en meer voorbeelden vind je in het hoofdstuk over <link linkend="math"
>rekenen</link
>.</para>
</sect2>

<sect2 id="question">
<title
>Vragen</title>
<para
>We kunnen eenvoudige vragen stellen waarop het antwoord alleen maar 'waar' of 'onwaar' zal zijn.</para>
<para
>Het gebruik van vragen wordt uitgebreid uitgelegd in het hoofdstuk over <link linkend="questions"
>vragen</link
>.</para>
</sect2>

<sect2 id="questions-glue">
<title
>Lijmwoorden voor vragen</title>
<para
>Vragen kunnen aan elkaar worden gelijmd met zogenaamde 'lijmwoorden'. De lijmwoorden zijn <userinput
>en</userinput
>, <userinput
>of</userinput
> en een speciaal lijmwoord is: <userinput
>niet</userinput
>.</para>
<para
>Het gebruiken van lijmwoorden wordt uitgelegd in het hoofdstuk <link linkend="question-glue"
>Vragenlijm</link
>.</para>
</sect2>


<sect2 id="comment">
<title
>Commentaar</title>
<para
>Commentaarregels zijn regels die beginnen met een <userinput
>#</userinput
>. Bijvoorbeeld: <screen>
# dit is commentaar!
schrijf "dit is geen commentaar"
# de vorige regel is geen commentaar, maar de volgende regel wel:
# schrijf "dit is geen commentaar"
</screen
> 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).</para>
<para
>Commentaarregels worden <glossterm
>geaccentueerd</glossterm
> met lichtgrijs in de <link linkend="the-code-editor"
>codebewerker</link
>.</para>
</sect2>

</sect1>


<sect1 id="commands">
<title
>Commando's</title>
<para
>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 <glossterm
>geaccentueerd</glossterm
> worden met blauw in de <link linkend="the-code-editor"
>codebewerker</link
>. Hiermee kun je ze onderscheiden van de rest.</para>

<sect2 id="moving-the-turtle">
<title
>De schildpad voortbewegen</title>
<para
>Er zijn verschillende commando's waarmee je de schildpad over het scherm kunt bewegen.</para>
  
<sect3 id="forward">
  <title
>vooruit (vt)</title>
  <variablelist>
    <varlistentry
> 
      <term
>vooruit</term>
      <listitem
><para
><screen
>vooruit X</screen>
<userinput
>vooruit</userinput
> verplaatst de schildpad X pixels vooruit. Als de pen neer is zal de schildpad een spoor achterlaten. <userinput
>vooruit</userinput
> kun je afkorten met <userinput
>vt</userinput
></para
></listitem>
    </varlistentry>
  </variablelist>
</sect3>
<sect3 id="backward">
  <title
>achteruit (at)</title>
  <variablelist>
    <varlistentry
>  
      <term
>achteruit</term>
      <listitem
><para
><screen
>achteruit X</screen>
<userinput
>achteruit</userinput
> verplaatst de schildpad X pixels achteruit. Als de pen neer is zal de schildpad een spoor achterlaten. <userinput
>achteruit</userinput
> kun je afkorten met <userinput
>at</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect3>
<sect3 id="turnleft">
  <title
>draailinks (dl)</title>
  <variablelist>
    <varlistentry
> 
      <term
>draailinks</term>
      <listitem
><para
><screen
>draailinks X</screen>
<userinput
>draailinks</userinput
> laat de schildpad X graden naar links draaien. <userinput
>draailinks</userinput
> kun je afkorten met <userinput
>dl</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect3>
<sect3 id="turnright">
  <title
>draairechts (dr)</title>
  <variablelist>
    <varlistentry
> 
      <term
>draairechts</term>
      <listitem
><para
><screen
>draairechts X</screen>
<userinput
>draairechts</userinput
> laat de schildpad X graden naar rechts draaien. <userinput
>draairechts</userinput
> kun je afkorten met <userinput
>dr</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect3>
<sect3 id="direction">
  <title
>richting (rt)</title>
  <variablelist>
    <varlistentry
> 
      <term
>richting</term>
      <listitem
><para
><screen
>richting X</screen>
<userinput
>richting</userinput
> zet de richting van de schildpad op X graden, geteld vanaf 0. Dus niet vanuit de vorige positie van de schildpad. <userinput
>richting</userinput
> kun je afkorten met <userinput
>rt</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect3>
<sect3 id="center">
  <title
>thuis</title>
  <variablelist>
    <varlistentry
> 
      <term
>thuis</term>
      <listitem
><para
><screen
>thuis</screen>
<userinput
>thuis</userinput
> zet de schildpad in het midden van het canvas.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect3>
<sect3 id="go">
  <title
>ganaar</title>
  <variablelist>
    <varlistentry
> 
      <term
>ganaar</term>
      <listitem
><para
><screen
>ganaar X,Y</screen>
<userinput
>ganaar X,Y</userinput
> laat de schildpad naar een bepaalde plaats op het canvas gaan. De plaats is op X <glossterm linkend="pixels"
>pixels</glossterm
> vanaf de linkerkant en Y <glossterm linkend="pixels"
>pixels</glossterm
> vanaf de bovenkant van het canvas. Opmerking: de schildpad tekent met het commando <userinput
>ganaar</userinput
> geen lijn.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect3>
<sect3 id="gox">
  <title
>ganaarx</title>
  <variablelist>
    <varlistentry
> 
      <term
>ganaarx</term>
      <listitem
><para
><screen
>ganaarx X</screen>
<userinput
>ganaarx X</userinput
> laat de schildpad naar een positie gaan die X <glossterm linkend="pixels"
>pixels</glossterm
> vanaf de linkerkant van het canvas ligt. De hoogte blijft hetzelfde. <userinput
>ganaarx</userinput
> kun je afkorten met <userinput
>gx</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect3>
<sect3 id="goy">
  <title
>ganaary</title>
  <variablelist>
    <varlistentry
> 
      <term
>ganaary</term>
      <listitem
><para
><screen
>ganaary Y</screen>
<userinput
>ganaary</userinput
> laat de schildpad naar een positie gaan die Y <glossterm linkend="pixels"
>pixels</glossterm
> vanaf de bovenkant van het canvas ligt. De afstand vanaf de linkerkant van het canvas blijft hetzelfde. <userinput
>ganaary</userinput
> kun je afkorten met <userinput
>gy</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect3>
</sect2>

<sect2 id="pen">
<title
>De schildpad heeft een pen</title>
<para
>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.</para>
<sect3 id="penup">
  <title
>penop (po)</title>
  <variablelist>
    <varlistentry
> 
      <term
>penop</term>
      <listitem
><para
><screen
>penop</screen>
<userinput
>penop</userinput
> tilt de pen van het canvas. Als de pen <quote
>omhoog</quote
> is, dan wordt er geen lijn getekend als de schildpad beweegt. Kijk ook bij <userinput
>penneer</userinput
>. <userinput
>penop</userinput
> kun je afkorten met <userinput
>po</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect3>
<sect3 id="pendown">
  <title
>penneer (pn)</title>
  <variablelist>
    <varlistentry
> 
      <term
>penneer</term>
      <listitem
><para
><screen
>penneer</screen>
<userinput
>penneer</userinput
> zet de pen op het canvas. Als de pen op het canvas <quote
>drukt</quote
>, dan wordt er een lijn getekend als de schildpad beweegt. Zie ook <userinput
>penop</userinput
>. <userinput
>penneer</userinput
> kun je afkorten met <userinput
>pn</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect3>
<sect3 id="setpenwidth">
  <title
>pendikte (pd)</title>
  <variablelist>
    <varlistentry
> 
      <term
>pendikte</term>
      <listitem
><para
><screen
>pendikte X</screen>
<userinput
>pendikte</userinput
> X stelt de dikte van de pen (de breedte van de lijn) op X <glossterm linkend="pixels"
>pixels</glossterm
>. <userinput
>pendikte</userinput
> kun je afkorten met <userinput
>pd</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect3>
<sect3 id="setfgcolor">
  <title
>penkleur (pk)</title>
  <variablelist>
    <varlistentry
> 
      <term
>penkleur</term>
      <listitem
><para
><screen
>penkleur R,G,B</screen>
<userinput
>penkleur</userinput
> bepaalt de kleur van de pen. <userinput
>penkleur</userinput
> vraagt om een <glossterm linkend="rgb"
>RGB-combinatie (drie getallen tussen 0 en 256) </glossterm
> als invoer. <userinput
>penkleur</userinput
> kun je afkorten met <userinput
>pk</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect3>
</sect2>

<!--<sect2 id="canvas">
<title
>Commands to control the canvas</title>
<para
>There are several commands to control the canvas.</para>
<sect3 id="resizecanvas">
  <title
>canvassize (cs)</title>
  <variablelist>
    <varlistentry>
      <term
>canvassize</term>
      <listitem
><para
><screen
>canvassize X,Y</screen>
      With the <userinput
>canvassize</userinput
> command you can set the size of the canvas. It takes X and Y as input, where X is the new canvas width in <glossterm linkend="pixels"
>pixels</glossterm
>, and Y is the new height of the canvas in <glossterm linkend="pixels"
>pixels</glossterm
>. <userinput
>canvassize</userinput
> can be abbreviated to <userinput
>cs</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect3>
<sect3 id="setbgcolor">
  <title
>canvascolor (cc)</title>
  <variablelist>
    <varlistentry
> 
      <term
>canvascolor</term>
      <listitem
><para
><screen
>canvascolor R,G,B</screen>
      <userinput
>canvascolor</userinput
> set the color of the canvas. <userinput
>canvascolor</userinput
> takes an <glossterm linkend="rgb"
>RGB combination</glossterm
> as input. <userinput
>canvascolor</userinput
> can be abbreviated to <userinput
>cc</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect3
> -->
<!-- <sect3 id="wrapon">
  <title
>wrapon</title>
  <variablelist>
    <varlistentry
> 
      <term
>wrapon</term>
      <listitem
><para
><screen
>wrapon</screen>
      With the <userinput
>wrapon</userinput
> command you can set <glossterm linkend="wrapping"
>wrapping</glossterm
> <quote
>on</quote
> for the canvas. Please see the glossary if you want to know what <glossterm linkend="wrapping"
>wrapping</glossterm
> is.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect3>
<sect3 id="wrapoff">
  <title
>wrapoff</title>
  <variablelist>
    <varlistentry
> 
      <term
>wrapoff</term>
      <listitem
><para
><screen
>wrapoff</screen>
      With the <userinput
>wrapoff</userinput
> command you can set <glossterm linkend="wrapping"
>wrapping</glossterm
> <quote
>off</quote
> for the canvas: this means the turtle can move off the canvas and can get <quote
>lost</quote
>. Please see the glossary if you want to know what <glossterm linkend="wrapping"
>wrapping</glossterm
> is.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect3>
</sect2
> -->

<sect2 id="clean">
<title
>Commando's om schoon te maken</title>
<para
>Er zijn twee commando's waarmee je het canvas kunt schoonmaken nadat je er een bende van hebt gemaakt.</para>
<sect3 id="clear">
  <title
>schoon</title>
  <variablelist>
    <varlistentry
> 
      <term
>schoon</term>
      <listitem
><para
><screen
>schoon</screen>
Met <userinput
>schoon</userinput
> 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.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect3>
<sect3 id="reset">
  <title
>alsnieuw</title>
  <variablelist>
    <varlistentry
> 
      <term
>alsnieuw</term>
      <listitem
><para
><screen
>alsnieuw</screen>
<userinput
>alsnieuw</userinput
> maakt nog meer schoon dan het commando <userinput
>schoon</userinput
>. Na het commando <userinput
>alsnieuw</userinput
> is alles zoals het was toen je &kturtle; net had opgestart. De schildpad wordt in het midden van het scherm gezet, de canvaskleur is wit en de schildpad tekent een zwarte lijn op het canvas.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect3>
</sect2>

<sect2 id="sprites">
<title
>De schildpad is een sprite  (zeg maar: sprait)</title>
<para
>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 <glossterm
>linkend="sprites"
>sprites</glossterm
>. </para
> <para
>Noot vertaler: eigenlijk zijn sprites zoiets als geesten, feeën of kabouters. </para>
<para
>Hierna volgt een volledig overzicht van alle commando's die je kunt gebruiken bij sprites.</para>
<para
>[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]</para>
<sect3 id="spriteshow">
  <title
>toon</title>
  <variablelist>
    <varlistentry
> 
      <term
>toon (ts)</term>
      <listitem
><para
><screen
>toon</screen>
<userinput
>toon</userinput
> maakt de schilpad weer zichtbaar nadat hij is verborgen. <userinput
>toon</userinput
> kun je afkorten met <userinput
>ts</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect3>
<sect3 id="spritehide">
  <title
>verberg (vs)</title>
  <variablelist>
    <varlistentry
> 
      <term
>verberg</term>
      <listitem
><para
><screen
>verberg</screen>
<userinput
>verberg</userinput
> verbergt de schildpad. Dit is handig als je de schildpad niet in je tekening wilt zien. <userinput
>verberg</userinput
> kun je afkorten met <userinput
>vs</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect3>
</sect2>

<sect2 id="writing">
<title
>Kan de schildpad schrijven?</title>
<para
>Het antwoord is: <quote
>ja</quote
>. De schildpad kan schrijven. Hij schrijft zo'n beetje alles wat je hem opdraagt.</para>
<sect3 id="print">
  <title
>schrijf</title>
  <variablelist>
    <varlistentry
> 
      <term
>schrijf</term>
      <listitem
><para
><screen
>schrijf X</screen>
Het commando <userinput
>schrijf</userinput
> kun je gebruiken om de schildpad iets op het canvas te laten schrijven. <userinput
>schrijf</userinput
> vraagt om letters en/of cijfers als invoer. Je kunt verschillende getallen en stukken tekst <userinput
>laten schrijven</userinput
> met behulp van het <quote
>+</quote
>-symbool. Hier is een klein voorbeeld: <screen
>$jaar = 2003
$auteur = "Cies"
schrijf $auteur + " begon het KTurtle-project in " + $jaar + " en vindt het nog steeds leuk om er aan te werken!"
</screen>
      </para
></listitem>
    </varlistentry>
  </variablelist>
</sect3>
<sect3 id="fontsize">
  <title
>lettermaat</title>
  <variablelist>
    <varlistentry
> 
      <term
>lettermaat</term>
      <listitem
><para
><screen
>lettermaat X</screen>
<userinput
>lettermaat</userinput
> bepaalt de grootte van de letters die wordt gebruikt door het commando <userinput
>schrijf</userinput
>. <userinput
>lettermaat</userinput
> vraagt om een getal als invoer. De grootte geef je op in <glossterm linkend="pixels"
>pixels</glossterm
>.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect3>
</sect2>

<sect2 id="random">
<title
>Een commando dat een dobbelsteen voor je gooit</title>
<para
>Er is een commando dat dobbelstenen voor je gooit. Dit commando heet <userinput
>gok</userinput
>, en is erg handig als je wat onverwachte resultaten wilt hebben.</para>
  <variablelist>
    <varlistentry
> 
      <term
>gok</term>
      <listitem
><para
><screen
>gok X,Y</screen>
<userinput
>gok</userinput
> is een commando dat invoer vraagt en uitvoer geeft. Als invoer vraagt het commando twee cijfers, het eerste cijfer (X) zet de minimum uitvoer, en het tweede (Y) zet de maximum. De uitvoer is een willekeurig gekozen getal dat gelijk is aan of groter dan het minimum en gelijk aan of kleiner dan het maximum. Hier is een klein voorbeeld:<screen>
herhaal 500 [
 $x = gok 1,20
 vooruit $x
 draailinks 10 - $x
]
</screen
> Met het commando <userinput
>gok</userinput
> kun je wat chaos aan je programma toevoegen.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>

<sect2 id="dialogs">
<title
>Invoer en terugkoppeling met behulp van dialogen</title>
<para
>Een dialoog is een klein venstertje waarmee enige terugkoppeling wordt verkregen of waarin om enige invoer wordt gevraagd aan de gebruiker. &kturtle; kent twee opdrachten voor een dialoog, namelijk <userinput
>bericht</userinput
> en <userinput
>invoervenster</userinput
></para>
<sect3 id="message">
  <title
>bericht</title>
  <variablelist>
    <varlistentry
> 
      <term
>bericht</term>
      <listitem
><para
><screen
>bericht X</screen>
De opdracht <userinput
>bericht</userinput
> heeft als invoer een <link linkend="string"
>tekenreeks</link
>. Er wordt een venstertje getoond waarin een dialoog met de tekst van deze <link linkend="string"
>tekenreeks</link
>. <screen
>bericht "Cies begon het KTurtle-project in 2003 en vindt het nog steeds leuk om er aan te werken!"
</screen>
      </para
></listitem>
    </varlistentry>
  </variablelist>
</sect3>
<sect3 id="ask">
  <title
>vraag</title>
  <variablelist>
    <varlistentry
> 
      <term
>vraag</term>
      <listitem
><para
><screen
>vraag X</screen>
<userinput
>vraag</userinput
> heeft als invoer een <link linkend="string"
>tekenreeks</link
>. Er wordt een venstertje getoond met de tekst van deze tekenreeks, net als bij het commando <link linkend="message"
>bericht</link
>. Maar in deze dialoog is ook een invoerveld. In dit invoerveld kan een gebruiker een <link linkend="number"
>getal</link
> of een <link linkend="string"
>tekenreeks</link
> invoeren die in een <link linkend="containers"
>plaatshouder</link
> kan worden opgeslagen. Bijvoorbeeld <screen>
$in = vraag "Hoe oud ben je?"
$uit = 5 + $in
schrijf "Over 5 jaar ben je " + $uit + " jaar."
</screen
>. Als de gebruiker de invoerdialoog annuleert of er niets in invult wordt de <link linkend="containers"
>plaatshouder</link
> leeg gemaakt.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect3>
</sect2>

</sect1>



<sect1 id="containers">
<title
>Plaatshouders</title>
<para
>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 <link linkend="variables"
>variabelen</link
>, plaatshouders die tekst bevatten heten <link linkend="strings"
>tekenreeksen</link
>. Plaatshouders kun je herkennen aan het <quote
>$</quote
>-teken dat ervoor wordt geplaatst.</para>

<para
>Plaatshouders die niet worden gebruikt zijn leeg. Een voorbeeld: <screen>
schrijf $N
</screen>
 Er wordt niets op het canvas geschreven. Als we proberen met lege plaatshouders te <link linkend="math"
>rekenen</link
> krijgen we foutmeldingen. </para>

<sect2 id="variables">
<title
>Variabelen: plaatshouders voor getallen</title>
<para
>Laten we beginnen met een voorbeeld: <screen>
$x = 3
schrijf $x
</screen
> Op de eerste regel wordt de letter <userinput
>x</userinput
> omgevormd tot een variabele (plaatshouder van een getal). Zoals je ziet wordt de waarde van de variabele <userinput
>x</userinput
> op 3 gesteld. Op de tweede regel wordt de waarde geschreven.</para>
<para
>Merk op dat als we een <quote
>x</quote
> hadden willen schrijven, we het volgende zouden hebben geschreven <screen
>schrijf "x"
</screen>
</para>
<para
>Dat was gemakkelijk. Nu een wat moeilijker voorbeeld:<screen>
$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
</screen
> Op de eerste twee regels krijgen de variabelen <userinput
>A</userinput
> en <userinput
>B</userinput
> de waarden 2004 en 25 toegekend. Op de derde regel krijgt de variabele <userinput
>C</userinput
> de waarde <userinput
>A + B</userinput
>, en dat is 2029. De rest van het voorbeeld bestaat uit 3 <userinput
>schrijf</userinput
>-commando's met <userinput
>achteruit 30</userinput
> ertussen in. De <userinput
>achteruit 30</userinput
> 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 <link linkend="math"
>rekenen</link
>.</para>
</sect2>

<sect2 id="strings">
<title
>Plaatshouders die tekst bevatten (tekenreeksen)</title>
<para
>In programmacode begint en eindigt gewone tekst vaak met aanhalingstekens. Zoals we eerder al hebben gezien: <screen>
schrijf "Hallo programmeur!"
</screen
> De gewone tekst staat tussen aanhalingstekens. Dit soort stukjes tekst noemen we <link linkend="strings"
>tekenreeksen</link
>.</para>
<para
>Ook tekenreeksen kunnen worden opgeslagen in <link linkend="containers"
>plaatshouders</link
>, net zoals <link linkend="number"
>getallen</link
>. Tekenreeksen lijken veel op variabelen. Het grootste verschil met getallen is dat je met tekenreeksen niet kunt <link linkend="math"
>rekenen</link
>. Een voorbeeld van het gebruik van tekenreeksen: <screen>
$x = "Hallo "
$naam = vraag "Voer je naam in..."
schrijf $x + $naam + ", hoe gaat het met je?"
</screen
> Op de eerste regel wordt <userinput
>x</userinput
> gesteld op <quote
>Hallo </quote
>. Op de tweede regel wordt de tekenreeks <userinput
>naam</userinput
> gesteld op de uitvoer van de opdracht <userinput
>vraag</userinput
>. Op de derde regel schrijft het programma een samenstelling van de drie tekenreeksen op het canvas.</para>
<para
>Dit programma vraagt je je naam in te voeren. Als je bijvoorbeeld de naam <quote
>Paul</quote
> invoert, dan schrijft het programma <quote
>Hallo Paul, hoe gaat het met je?</quote
>. 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.</para>
</sect2>
</sect1>

<sect1 id="math">
<title
>Kan de schildpad rekenen?</title>
<para
>Ja, &kturtle; kan voor jou rekenen, namelijk optellen (+), aftrekken (-), vermenigvuldigen (*) en delen (/). Dit is een voorbeeld waarin dit alles wordt gebruikt: <screen>
$a = 20 - 5
$b = 15 * 2
$c = 30 / 30
$d = 1 + 1
schrijf "a: "+$a+", b: "+$b+", c: "+$c+", d: "+$d 
</screen
> Weet je welke waarden a, b, c, en d hebben? Merk in het voorbeeld het gebruik op van het <link linkend="assignment"
>toewijs</link
>-symbool <screen
>=</screen
>.</para>
<para
>Als je een eenvoudige rekensom wilt laten doen, dan kan dat bijvoorbeeld zo: <screen
>schrijf 2004-12
</screen
></para>
<para
>Nu een voorbeeld met haakjes: <screen>
schrijf ( ( 20 - 5 ) * 2 / 30 ) + 1
</screen
> 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).</para>
</sect1>

<sect1 id="questions">
<title
>Stel vragen en krijg antwoorden...</title>
<para
><link linkend="if"
><userinput
>als</userinput
></link
> en <link linkend="while"
><userinput
>terwijl</userinput
></link
> zijn <link linkend="controlling-execution"
>programmastuurcommando's</link
> die we in de volgende sectie zullen bespreken. In deze sectie gaan we het commando <link linkend="if"
><userinput
>als</userinput
></link
> gebruiken om vragen uit te leggen.</para>
<sect2 id="q">
<title
>Vragen</title>
<para
>Een voorbeeld van een vraag: <screen>
$x = 6
als $x &gt; 5 {
 schrijf "hallo"
}
</screen
> In dit voorbeeld is de vraag het gedeelte <userinput
>x &gt; 5</userinput
>. 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 <link linkend="controlling-execution"
>programmastuurcommando's</link
>, zoals <link linkend="if"
><userinput
>als</userinput
></link
>. Alle getallen en <link linkend="variables"
>variabelen</link
> (getalplaatshouders) kunnen met elkaar worden vergeleken met behulp van vragen.</para>
<para
>Hier zijn alle mogelijke vragen: <table>
<title
>Soorten van vragen</title>
<tgroup cols="3">
<tbody>
<row>
<entry
><userinput
>a == b</userinput
></entry>
<entry
>gelijk aan</entry>
<entry
>het antwoord is <quote
>waar</quote
> als <userinput
>a</userinput
> gelijk is aan <userinput
>b</userinput
></entry>
</row>
<row>
<entry
><userinput
>a != b</userinput
></entry>
<entry
>ongelijk aan</entry>
<entry
>het antwoord is <quote
>waar</quote
> als <userinput
>a</userinput
> niet gelijk is aan <userinput
>b</userinput
></entry>
</row>
<row>
<entry
><userinput
>a &gt; b</userinput
></entry>
<entry
>groter dan</entry>
<entry
>het antwoord is <quote
>waar</quote
> als <userinput
>a</userinput
> groter is dan <userinput
>b</userinput
></entry>
</row>
<row>
<entry
><userinput
>a &lt; b</userinput
></entry>
<entry
>kleiner dan</entry>
<entry
>het antwoord is <quote
>waar</quote
> als <userinput
>a</userinput
> kleiner is dan <userinput
>b</userinput
></entry>
</row>
<row>
<entry
><userinput
>a &gt;= b</userinput
></entry>
<entry
>groter dan of gelijk aan</entry>
<entry
>het antwoord is <quote
>waar</quote
> als <userinput
>a</userinput
> groter is dan of gelijk aan <userinput
>b</userinput
></entry>
</row>
<row>
<entry
><userinput
>a &lt;= b</userinput
></entry>
<entry
>kleiner dan of gelijk aan</entry>
<entry
>het antwoord is <quote
>waar</quote
> als <userinput
>a</userinput
> kleiner is dan of gelijk aan <userinput
>b</userinput
></entry>
</row>
</tbody>
</tgroup>
</table>
</para>
</sect2>

<sect2 id="question-glue">
<title
>Vragenlijm</title>
<para
>Vragen kunnen aan elkaar geplakt worden met <quote
>vragenlijm</quote
>. Zo kun je van een paar kleine vragen een grote vraag maken. <screen>
$a = 1
$b = 5
als ($a &lt; 5) en ($b == 5) {
 schrijf "hallo"
}
</screen
> In dit voorbeeld is het lijmwoord <userinput
>en</userinput
> gebruikt om twee vragen (<userinput
>a &lt; 5</userinput
>, <userinput
> b == 5</userinput
>) aan elkaar te plakken. Als een zijde van de <userinput
>en</userinput
> <quote
>onwaar</quote
> als antwoord heeft, dan zal de hele vraag <quote
>onwaar</quote
> zijn, omdat bij het lijmwoord <userinput
>en</userinput
> beide zijden <quote
>waar</quote
> moeten zijn om het antwoord <quote
>waar</quote
> te krijgen. Vergeet de haakjes om de vragen niet!</para>

<para
>Hier is een schematisch overzicht, een meer gedetailleerde uitleg volgt hieronder: <table>
<title
>Lijmwoorden voor vragen</title>
<tgroup cols="2">
<tbody>
<row>
<entry
><userinput
>en</userinput
></entry>
<entry
>beide zijden moeten 'waar' zijn voor het antwoord 'waar'</entry>
</row>
<row>
<entry
><userinput
>of</userinput
></entry>
<entry
>als een van de, of beide, zijden 'waar' is, dan is het antwoord 'waar'</entry>
</row>
<row>
<entry
><userinput
>niet</userinput
></entry>
<entry
>Een speciaal geval: werkt alleen op één vraag! Verandert 'waar' in 'onwaar' en 'onwaar' in 'waar'.</entry>
</row>
</tbody>
</tgroup>
</table>
</para>

<sect3 id="and">
<title
>en</title>
<para
>Als twee vragen aan elkaar zijn gelijmd met <userinput
>en</userinput
>, dan moeten beide zijden van de <userinput
>en</userinput
> 'waar' zijn om 'waar' als resultaat te krijgen. Een voorbeeld: <screen>
$a = 1
$b = 5
als (($a &lt; 10) en ($b == 5)) en ($a &lt; $b) {
 schrijf "hallo"
}
</screen
> In dit voorbeeld zie je een gelijmde vraag vastgelijmd aan nog een andere vraag.</para>
</sect3>

<sect3 id="or">
<title
>of</title>
<para
>Als één van de, of beide, vragen die aan elkaar zijn geplakt met <userinput
>of</userinput
> 'waar' is, dan is het antwoord 'waar'. Een voorbeeld: <screen>
$a = 1
$b = 5
als (($a &lt; 10) of ($b == 10)) of ($a == 0) {
 schrijf "hallo"
}
</screen
> In dit voorbeeld zie je een gelijmde vraag vastgelijmd aan nog een andere vraag.</para>
</sect3>

<sect3 id="not">
<title
>niet</title>
<para
><userinput
>niet</userinput
> is een speciaal lijmwoord omdat het alleen met één vraag tegelijk werkt. <userinput
>niet</userinput
> verandert 'waar' in 'onwaar' en 'onwaar' in 'waar'. Voorbeeld: <screen>
$a = 1
$b = 5
 als niet (($a &lt; 10) en ($b == 5)) {
 schrijf "hallo"
}
anders
{
 schrijf "niet hallo ;-)"
}
</screen
> In dit voorbeeld is de gelijmde vraag 'waar', maar de <userinput
>niet</userinput
> verandert dit in 'onwaar<userinput
>. Dus uiteindelijk wordt </userinput
>"niet hallo ;-)" afgedrukt op het <link linkend="the-canvas"
>canvas</link
>.</para>
</sect3>

</sect2>

</sect1>

<sect1 id="controlling-execution">
<title
>Sturen van het programma</title>
<para
>De programmastuurcommando's maken het mogelijk, &mdash;zoals de naam al zegt&mdash; het verloop van een programma te sturen.</para>
<para
>Commando's die het programmaverloop sturen worden <glossterm
>geaccentueerd </glossterm
> met donkergroen in een vet lettertype. De accolades worden meestal samen met de programmastuurcommando's gebruikt en worden <glossterm
>geaccentueerd</glossterm
> met vet zwart.</para>

<sect2 id="wait">
<title
>De schildpad laten wachten</title>
<para
>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.</para>
  <variablelist>
    <varlistentry>
      <term
>wacht</term>
      <listitem
><para
><screen
>wacht X</screen>
<userinput
>wacht</userinput
> X laat de schildpad steeds X seconden wachten. <screen>
herhaal 36{
 vooruit 5
 draairechts 10
 wacht 0,5
}
</screen
> 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.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>

<sect2 id="if">
<title
>Doe "als"</title>
  <variablelist>
    <varlistentry>
      <term
>als</term>
      <listitem
><para
><screen
>als <link linkend="questions"
>vraag</link
> { ... }</screen>
De programmacode die tussen de accolades staat wordt alleen uitgevoerd <userinput
>als</userinput
> het antwoord op de <link linkend="questions"
>vraag</link
> <quote
>waar</quote
> is. Lees voor meer informatie over <link linkend="questions"
>vragen</link
> het <link linkend="questions"
>gedeelte over vragen</link
>. <screen>
$x = 6
als $x &gt; 5 {
 schrijf "x is groter dan vijf!"
}
</screen
> Op de eerste regel krijgt <userinput
>x</userinput
> de waarde 6. Op de tweede regel wordt de <link linkend="questions"
>vraag</link
> <userinput
>x &gt; 5</userinput
> gesteld. Omdat het antwoord op deze vraag <quote
>waar</quote
> is zal door het programmastuurcommando <userinput
>als</userinput
> de programmacodecode tussen de haakjes worden uitgevoerd</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>

<sect2 id="while">
<title
>De lus "terwijl"</title>
  <variablelist>
    <varlistentry>
      <term
>terwijl</term>
      <listitem
><para
><screen
>terwijl <link linkend="questions"
>vraag</link
> { ... }</screen>
Het programmastuurcommando <userinput
>terwijl</userinput
> lijkt veel op <link linkend="if"
>als<userinput
></userinput
></link
>. Het verschil is dat <userinput
>terwijl</userinput
> de programmacode tussen de accolades blijft herhalen totdat het antwoord op de <link linkend="questions"
>vraag</link
> <quote
>onwaar</quote
> wordt. <screen>
$x = 1
terwijl $x &lt; 5 {
  vooruit 10
  wacht 1
  $x = $x + 1
}
</screen
> Op de eerste regel krijgt <userinput
>x</userinput
> de waarde 1. Op de tweede regel wordt de <link linkend="questions"
>vraag</link
> <userinput
>x &lt; 5</userinput
> gesteld. Omdat het antwoord op deze vraag <quote
>waar</quote
> is start de programmabesturing <userinput
>terwijl</userinput
> het uitvoeren van de code tussen de accolades totdat het antwoord op de <link linkend="questions"
>vraag</link
> <quote
>onwaar</quote
> is geworden. In dit voorbeeld wordt de code tussen de accolades 4 keer uitgevoerd, omdat telkens als de vijfde regel wordt uitgevoerd de waarde <userinput
>x</userinput
> met 1 wordt vermeerderd.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>

<sect2 id="else">
<title
>Als niet, of in andere woorden: "anders"</title>
  <variablelist>
    <varlistentry>
      <term
>anders</term>
      <listitem
><para
><screen
>als vraag { ... } anders { ... }</screen>
<userinput
>anders</userinput
> kan worden gebruikt als aanvulling op het programmastuurcommando <link linkend="if"
><userinput
>als</userinput
></link
>. De programmacode tussen de accolades na <userinput
>anders</userinput
> wordt alleen uitgevoerd als het antwoord op de gestelde <link linkend="questions"
>vraag</link
> 'onwaar' is. <screen>
alsnieuw$x = 4
als $x &gt; 5 {
  schrijf "x is groter dan vijf!"
}
anders
{
  schrijf "x is kleiner dan zes!"
}
</screen
> Met de <link linkend="questions"
>vraag</link
> wordt gevraagd of <userinput
>x</userinput
> groter is dan 5. Omdat <userinput
>x</userinput
> op op de eerste regel de waarde 4 krijgt is het antwoord <quote
>onwaar</quote
>. Dit betekent dat de code tussen de accolades achter <userinput
>anders</userinput
> zal worden uitgevoerd.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>

<sect2 id="for">
<title
>De lus "voor", een tellende lus</title>
  <variablelist>
    <varlistentry>
      <term
>voor</term>
      <listitem
><para
><screen
>voor <userinput
>startpunt</userinput
> tot <userinput
>eindpunt</userinput
> { ... }</screen>
De lus <userinput
>voor</userinput
> is een <quote
>tellende lus</quote
>, dus die houdt de telling voor je bij. <screen>
voor $x = 1 tot 10 {
 schrijf $x * 7
 vooruit 15
}
</screen
> Telkens als de programmacode tussen de accolades wordt uitgevoerd wordt de waarde <userinput
>x</userinput
> met 1 vermeerderd (dit gaat dus van zelf), totdat <userinput
>x</userinput
> de waarde 10 heeft bereikt. De code tussen de accolades schrijft de waarde van <userinput
>x</userinput
> vermenigvuldigd met 7. Nadat deze commando's zijn uitgevoerd zie je de tafel van 7 op het canvas staan.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>

</sect1>


<sect1 id="learn">
<title
>Maak je eigen commando's met <quote
>leer</quote
></title>
<para
><userinput
>leer</userinput
> is een nogal apart commando, omdat die kan worden gebruikt om je eigen commando's te maken. Het commando dat je maakt kan om <glossterm linkend="input-output"
>invoer</glossterm
> vragen en <glossterm linkend="input-output"
>uitvoer</glossterm
> geven. Laten we eens kijken hoe je een nieuw commando kunt maken: <screen>
leer cirkel $x {
 herhaal 36 {
   vooruit $x
   draailinks 10
 }
}
</screen
> Het nieuwe commando heet <userinput
>cirkel</userinput
>. <userinput
>cirkel</userinput
> vraagt om een <glossterm linkend="input-output"
>invoer</glossterm
>, een getal, om de grootte van de cirkel te bepalen. <userinput
>cirkel</userinput
> geeft geen <glossterm linkend="input-output"
>uitvoer</glossterm
>. Het commando <userinput
>cirkel</userinput
> kan nu worden gebruikt als een normaal commando in de rest van de programmacode. Hier een voorbeeld: <screen
>leer cirkel $x {
  herhaal 36 { 
    vooruit $x 
    draailinks 10 
  } 
} 

ganaar 30,30 
cirkel 20

ganaar 40,40 
cirkel 50  
</screen>
</para>
<para
>In het volgende voorbeeld maken we een commando met een uitvoerwaarde. <screen>
alsnieuw

leer vermenigvuldigMetZichzelf $n {
  $r = $n * 1
 $r = $n * $n
  geefdoor $r
]
$i = vraag "Voer een getal in en klik op OK"
schrijf $i + " vermenigvuldigd met zichzelf is " + vermenigvuldigMetZichzelf  $i
</screen
> In dit voorbeeld wordt een nieuw commando met de naam <userinput
>vermenigvuldigMetZichzelf</userinput
> gemaakt. De invoer van dit commando wordt vermenigvuldigd met zichzelf en daarna doorgegeven met behulp van het commando <anchor id="return"/><userinput
>geefdoor</userinput
>. Het commando <userinput
>geefdoor</userinput
> is een manier om de waarde van een functie die je hebt gemaakt als antwoord te geven. </para>
<para
>Commando's kunnen meer dan een <glossterm linkend="input-output"
>invoer</glossterm
> nodig hebben. In het volgende voorbeeld wordt een commando gemaakt dat een rechthoek tekent. <screen
>leer rechthoek $X, $Y {
  vooruit $Y
  draairechts 90
  vooruit $X
  draairechts 90
  vooruit $Y
  draairechts 90
  vooruit $X
  draairechts 90
}
</screen>
</para>
  
</sect1>

</chapter>
