Les 8 - Functies
Hieronder de presentatie van de les over functies: Javascript-les-8-functies.pdf
Hieronder de code uit de tweede les, met commentaar.
//maak twee verschillende lijsten met midi-noten
let noten = [0,3,6,8,11];
let nogMeerNoten = [2,6,3,11,9];
//maak een counter-variabele om door de noten-lijst te lopen
let teller = 0;
//maak een lege lijst voor tijdsintervallen
let timeList;
//maak een couter-variabele om door de tijdsinterval-lijst te lopen
let lengthTeller = 0;
function setup() {
createCanvas(800,600);
background(255);
textSize(48);
//roep hier de onderaan de pagina aangemaakte generateTimes-functie aan
//het resultaat daarvan wordt in de variabele timeList opgeslagen.
timeList = generateTimes(1,100,200);
}
function draw() {
//plaats hier de code die continue herhaald moet worden.
background(255);
//roep de functie everyXFrames aan die onderaan de pagina is gemaakt
//deze functie geeft elke 500 frames een true.
//in dat geval wordt er ÊÊn opgeteld bij lengthTeller.
if (everyXFrames(500)) {
lengthTeller++;
}
//maak een variabele die aangeeft om de hoeveel frames
//de noot moeten worden afgespeeld.
//doe dit door uit de timeList een variabele te halen
//zorg daarbij dat de lengthTeller nooit groter wordt dan de timeList
let frameVar = timeList[lengthTeller%timeList.length];
//roep de functie everyXFrames aan die onderaan de pagina is gemaakt
//deze functie geeft elke x frames een true.
//x wordt bepaald door de timeList
if (everyXFrames(frameVar)) {
//speel een noot uit de lijst noten, tel daar 60 bij op.
makeNote(noten[teller%noten.length]+60,0.8,1000);
teller++;
}
//doe hetzelfde als hierboven bij frameVar, maar pak dan 1 element
//verder uit de lijst. dus als frameVar het 2e element uit de lijst is,
//dan wordt secondFrameVar het 3e element uit de lijst.
let secondFrameVar = timeList[lengthTeller+1%timeList.length]
if (everyXFrames (secondFrameVar)) {
//speel een noot uit de lijst nogMeerNoten, tel daar 48 bij op
makeNote(nogMeerNoten[teller%nogMeerNoten.length]+48,0.3,200);
teller++;
}
//laat de teller in het scherm zien.
text(teller,width/2,height/2);
}
//zelfgemaakte functie die een true teruggeeft elke keer als
//de modulo van de frameCount en het getal dat je als argument (frame)
//meegeeft gelijk is aan 0.
//anders geeft ie false terug.
function everyXFrames(frame) {
if (frameCount % frame === 0) {
return true;
}
return false;
}
//zelfgemaakte functie die een lijst met intervaltijden genereert
//verwachtte argumenten:
// - aantal, hoeveel waardes komen eruit
// - min, wat is de minimale waarde
// - max, wat is de maximale waarde
function generateTimes(aantal,min,max) {
//een tijdelijke, lege lijst om de waardes in op te slaan
let tempArray = [];
//bepaalde range van wat het getal mag zijn
let range = max - min;
//laat een for-loop zoveel keer loopen als er in aantal is ingevuld
for (let i = 0; i < aantal; i++) {
//voeg een getal aan de tijdelijke array toe
//dit getal is als volgt opgebouwd:
// - de range wordt gedeeld door het totale aantal
// - het getal dat daaruit komt wordt vermenigvuldigd met i
// - daarbij wordt de helft van de range / het aantal toegevoegd
// - dit om een offset te geven, zodat het evenredig verdeeld wordt
// - voeg daar de minimum-waarde aan toe.
tempArray.push((range/aantal * i) + (range/aantal)/2 + min);
}
//de tempArray wordt teruggegeven naar daar waar de functie werd
//aangeroepen in dit geval in de setup-functie.
return tempArray;
}