video 12: boek en datatypes

Deze video bestaat uit twee delen:

deel 1: ints en floats in Arduino 

deel 2: meer over getallen, en over Javascript


Video 12: het boek “Eloquent Javascript” van Marijn Haverbeke

We gaan toch wat lezen: Een paar hoofdstukken uit het (geweldige) boek van Marijn Haverbeke: “Eloquent Javascript” (eloquent betekent “welbespraakt”).

Ik adviseer je de online versie te lezen, die heeft namelijk leuke interactieve gimmicks waarin je meteen kunt oefenen met de code en oefeningen die de auteur bespreekt.
Mocht je liever uitprinten, of een wat leesbaardere typografie prefereren, dan is er ook deze PDF van het boek.
De opdrachten geven aan wat je precies moet lezen.


Vraag 12.1: jouw recensie van hoofdstuk 1

Lees hoofdstuk 1 van “Eloquent Javascript”.

Wat vond je ervan (schrijfstijl, Engels, maar vooral ook inhoud)?

[ mail je antwoord… ]

Opdracht 12.2: Drie. Niet meer, en niet minder. Drie.

Lees de eerste helft van hoofdstuk 2 van “Eloquent Javascript”. Ongeveer tot het moment dat-ie over de while-loop begint (pagina 14 van de PDF). Je kunt, om vooruit te lopen op video 14  natuurlijk die tweede helft wel lezen.

Formuleer, tijdens het lezen, drie (3!) vragen/discussiepunten/grappen over de inhoud. Die vragen gaan we in de les bespreken. Ook als het allemaal helder is, verzin dan toch vragen/discussiepunten.

Er is altijd wel iets te vinden waarover je meer wilt weten, of wat je raar vindt (ook als snap je het wel), ofwat je wilt vergelijken met Arduino of een andere taal (of zelfs Excel).

[ mail je drie vragen… ]

Vraag 12.3 t/m 12.8: Experimenten met datatypes

Voer de volgende experimenten uit op Arduino (je hebt geen dangershield nodig), en Javascript.

Wat zijn de resultaten, wat zijn de waarden van de variabelen? Hoe verschillen de uitkomsten tussen Arduino en Javascript? Stel jezelf dat soort vragen; stuur je antwoorden, ideeën of vermoedens in.

Gebruik in Arduino steeds Serial.println() en de seriële monitor om een resultaat te bekijken. In javascript is Firebug je vriend.
Als iets anders werkt dan jij zou verwachten, probeer dan een verklaring te bedenken en te posten.
Als een experiment vragen bij je oproept, neem die vragen mee de les in, en geef ze aan de docent.

Niet alles van wat je doet en waarneemt zal onmiddelijk duidelijk en logisch voor je zijn. Maar ieder van deze experimenten vertegenwoordigt een familie van programmeerfouten waar je tegenaan kunt lopen. Het is dus de moeite waard om deze zaken nu tegen te komen. In de les worden de rare zaken verklaard.

arduino javascript
int a = 2/3
float b = 2/3
var a = 2/3

[ mail je antwoord… ]

float a = 2 / 3.0
int b = 2/3.0
var a = 2 / 3.0

[ mail je antwoord… ]

float b() {
   return 3;
}

void setup() {
   float a = 2 / b();
   .....   // eigen code hier
}
In JavaScript is dit niet een interessant experiment. Waarom niet?[ mail je antwoord… ]
boolean‘ is (in heel veel talen) het datatype dat true en false als waarden heeft. Het wordt vooral gebruikt in if-else en while constructies (zie de volgende video’s). Arduino kent het datatype ‘een beetje’, maar in Javascript zijn booleans ‘beter’:
boolean a = true
boolean b = false
var a = true
var b = false

[ mail je antwoord… ]

Serial.println("Bugs "+"Bunny");
console.log("Bugs "+"Bunny")

[ mail je antwoord… ]

Serial.println( 10203 * 2 );
Serial.println( "10203" * 2 );
Serial.println( "10203" + 2 );
console.log( 10203 * 2 );
console.log( "10203" * 2 );
console.log( "10203" + 2 );

[ mail je antwoord… ]


Vraag 12.9: bug in arduino?

Alle getallen in Javascript worden opgeslagen als floating-point getallen, net zoals de floatgetallen in Arduino. We gaan iets geks ontdekken over die ‘floating point’ getallen.
Maar probeer eerst even het volgende uit in Arduino:

Serial.println( 0.1234567 );
Serial.println( 0.1234567, 16);

Wat is het effect van de tweede parameter? Dit hebben we nodig om nu een interessante waarneming te doen:

Probeer het volgende: (kort niet af tot 0.2, 0.3,… of 0.8, en gebruik uiteindelijk minstens acht optellingen van 0.1)

Serial.println( 0.1, 16);
Serial.println( 0.1 + 0.1, 16);
Serial.println( 0.1 + 0.1 + 0.1, 16);
Serial.println( 0.1 + 0.1 + 0.1 + 0.1, 16);
Serial.println( 0.1 + 0.1 + 0.1 + 0.1 + 0.1, 16);
Serial.println( 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1, 16);
Serial.println( 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1, 16);
Serial.println( 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1+ 0.1, 16);

Noteer wat je ziet.

[ mail je antwoord… ]

Vraag 12.10: bug in Javascript?

Probeer vervolgens iets vergelijkbaars (als in 12.9) in Javascript: meerdere optellingen van 0.1 achter elkaar.

Hoeveel optellingen heb je nodig om een soortgelijk effect te scoren?

(Je hoeft in Javascript geen speciale maatregelen te nemen om getallen met grote nauwkeurigheid uitgeprint te krijgen)

[ mail je antwoord… ]