3.1 De basis van Elm#

De code cellen in dit hoofdstuk bevatten Elm commando’s die op de Elm command line (de zogenaamde ‘elm REPL’) uitgevoerd kunnen worden.

Uitvoeren van de Elm code-cellen

Er zijn twee manieren om de Elm code-cellen op deze pagina uit te voeren:

  • in Jupyter Book: gebruik de “Live Code” button onder het raketje bovenin;

  • of, start de Jupyter Notebook interface op via de “Binder” button onder het raketje.

In beide gevallen moet je even wachten totdat je privé Virtuele Machine aangemaakt en opgestart is: in het begin soms een minuut, later meestal veel korter. Zie voor een uitgebreidere uitleg: Elm in Jupyter Book.

In Jupyter Book heeft elke “live” code-cel een eigen run-button. Voor het uitvoeren van een code-cel in Jupyter Notebook plaats je de cursor in de code-cel; vervolgens druk je op de “run” button (pijltje naar rechts) bovenin; of je gebruikt Shift-Enter.

Waarschuwing

De code-cellen op deze pagina zijn bedoeld om uitgevoerd te worden met Elm-REPL (de interpreter). Deze kun je niet gebruiken in https://elm-lang.org/try !

We kunnen nu Elm expressies intypen die dan direct geëvalueerd worden.

42
42 : number

Even later verschijnt de reactie: 42 : number ofwel REPL heeft de expressie uitgerekend, met het getal (number) 42 als resultaat.

Je kunt de voorbeelden uit dit hoofdstuk ook in de zogenaamde ‘elm REPL’ uitvoeren. Vanuit de command line (onder MS-windows of MacOS), typ: ‘elm repl’ om de REPL te starten. REPL staat voor … (google hier eens op). Daar kun je dan een commando intypen en op de enter-toets drukken om het uit te voeren. In dit hoofdstuk heb je dat niet nodig en kun je alles vanuit dit Jupyter-notebook doen.

Je kunt de inhoud van een code-cell zelf aanpassen en de berekening opnieuw uitvoeren (Run). Probeer dit!

Iets spannender (denk even na of je het antwoord van deze vermenigvuldiging makkelijk zelf zou kunnen berekenen): bereken 42 maal 38

Selecteer de regel hieronder en druk op Shift-Enter (of gebruik weer Run).

42 * 38
1596 : number

Hee, je kunt het dus als rekenmachine gebruiken… Enfin, je bent waarschijnlijk niet heel erg verbaasd. Inderdaad kun je met +, -, * en / optellen, aftrekken, vermenigvuldigen en delen. Wat denk je dat er uitkomt als je 12 + 3 * 2 berekent?

12 + 3 * 2
18 : number

Houdt Elm rekening met de volgorde van berekening? Wordt eerst de + of eerst * uitgevoerd? Ofwel: is dit gelijk aan ( 12 + 3 ) * 2 of juist aan 12 + ( 3 * 2) ?

Als je zelf de volgorde wil aangeven kun je met behulp van haakjes zelf de volgorde van berekening kiezen:

12 + ( 3 * 2 )
18 : number

of:

( 12 + 3 ) * 2
30 : number

Als je een uitkomst wilt bewaren kun je die opslaan in een variabele:

x = ( 12 +  3 ) * 2
30 : number

Elm Repl vertelt je dat er 30 uitkomt en dat dat een number is. Dit lijkt op wat een variabele in de wiskunde betekent, maar is niet helemaal hetzelfde: de waarde van een variabele (bijvoorbeeld x) is een vaste waarde die je wilt gaan ontdekken. Bij functioneel programmeren geef je zelf de variabele een waarde.

Er zijn echter ook verschillen met wiskunde: De naam van een variabele kan in elm ook uit meerdere letters bestaan: Als je in elm opschrijft: xy bedoel je een variabele met de twee-letter lange naam xy, terwijl in de wiskunde dan (meestal) bedoeld wordt: ‘(waarde van) x vermenigvuldigd met (waarde van) y’. Door langere betekenisvolle namen te gebruiken wordt de code leesbaarder.

Als mijn (rechthoekige) tuin bijvoorbeeld 6 meter lang is en 4 meter breed en ik wil de oppervlakte laten berekenen, dan kan dat op een leesbare manier worden opgeschreven als:

lengte = 6
breedte = 4
oppervlakte = lengte * breedte
6 : number
4 : number
24 : number

Het type String#

Run eens:

String.fromInt( 42 * 38 )
"1596" : String

en vergelijk het resultaat eens met de uitkomst die je eerder kreeg met 42 * 38. Wat valt je op? Juist: er staat nu String achter in plaats van number. Dat komt omdat de uitkomst van de vermenigvuldiging in de functie ‘String.fromInt’ wordt gestopt, en die maakt er een string van. Een string is een ketting van characters (zeg maar letters, maar bijvoorbeeld een spatie, een komma, een punt en een tab tellen dan ook als character, dus het zijn niet alleen maar de letters uit het alfabet).

Het woord functie is gevallen. In Elm struikel je al heel snel over de functies: bijna alles wordt met functies gedaan. Je kunt bestaande functies aanroepen, maar ook eigen functies definiëren. In het volgende hoofdstuk gaan we verder in op functies.