1. Plannen maken
Deze tekst gaat over het maken van een plan. Je ziet tussen de teksten door een klein aantal voorbeelden.
Het leren programmeren - in welke taal dan ook - kan het beste gedaan worden vanuit de intentie iets te willen doen. D.w.z. je moet een plan hebben, bestaande uit sub-plannen, waarna je probeert een oplossing te ontwerpen. Voorbeelden in volgorde van eenvoudig naar complexe plannen (of hier ook wel technieken, programmeertechnieken, methoden of programmeermethoden genoemd) zijn de volgende:
Algemene technieken
Initieren, etc.:
- een variabele een waarde geven;
- iets bij een variabele optellen;
- afdrukken van resultaten;
- invoer aan de gebruiker vragen;
- controleren van de invoer;
- geven van foutmeldingen;
- herhalen van een aantal statements.
Conditioneren, etc.:
- stoppen van een herhaling onder een bepaalde voorwaarde;
- stoppen als een lus een bepaald aantal keren herhaald is;
- iets onder speciale condities doen (iets voorwaardelijks doen) (if then);
- twee gevallen onderscheiden (if then else);
- meerdere gevallen onderscheiden (if then else if);
- een willekeurig getal kiezen;
Functies, etc.:
- gebruik van functies;
- een functie herhalen (recursie);
- het opvragen van een systeemvariabele e.d.
Presentatie-technieken (Output-technieken)
Passief
- de inhoud van een bestand (file) presenteren op het beeldscherm;
- een afbeelding presenteren (een extern grafisch bestand);
- een geluidsfragment presenteren (een extern geluids-bestand);
- een (1e orde) animatie presenteren (een shockwave-bestand);
- een videofragment presenteren (een extern video-bestand);
Dynamisch
- een applet (in het algemeen) presenteren;
- een model-driven animatie presenteren;
- een model-driven simulatie presenteren;
- het dynamisch (of interactief of intelligent) maken van beelden in het algemeen.
Acceptatie-technieken (Input-technieken)
- inlezen van een waarde (in algemeen);
- inlezen van een waarde (middels een slider);
- inlezen van een waarde (middels input-animatie-technieken).
Communicatie-technieken (I/O-technieken)
- lezen uit of schrijven naar web-page;
- lezen uit of schrijven en verzenden (per e-mail);
- lezen uit en/of schrijven naar files (in algemeen);
- lezen uit en/of schrijven naar 'een ander gedeelte van een programma';
- lezen uit en/of schrijven naar een object (applet) (via events).
- communiceren met een database en/of een file (in het algemeen);
- communiceren met een algebraïsch model of formule;
- communiceren met een (dynamisch) wiskundig model;
- communiceren met een expert systeem;
Hier volgen een groot aantal gedetailleerde beschrijvingen van een verscheidenheid aan plannen in javascript.
a. Een variabele initialiseren
Dit plan maakt het mogelijk om een variabele voor de eerste keer een waarde te geven. Je gebruikt dit plan als je een variabele, die nog geen waarde heeft, van een waarde wilt voorzien. Voordat je de waarde van een variabele kunt gebruiken, zul je eerst moeten zorgen dat hij een zinvolle waarde heeft. We noemen dat initialiseren. De waarde kan een getal zijn of de uitkomst van een berekening (expressie).
Voorbeeld.
var startprijs = 10.0;
b. Een variabele veranderen
Dit plan maakt het mogelijk de waarde van een variabele te veranderen. Je gebruikt dit plan als je een variabele, die al een waarde heeft, een nieuwe waarde wilt geven. De waarde kan een getal zijn of de uitkomst van een berekening (expressie). Als de expressie berekend is, dan wordt de uitkomst van de expressie aan de variabele toegekend. De oude waarde ervan is dan verdwenen.
Voorbeeld.
toeslag = 2.0 + 0.2
c. Twee variabelen omwisselen
Met dit plan kun je de waarde van twee variabelen omwisselen.
Je gebruikt dit plan als je een aantal variabelen wilt sorteren op bijv. grootte.
Je kunt twee variabelen alleen omwisselen door gebruik te maken van een hulpvariabele.
Voorbeeld:
waarde = 3;
prijs = 6;
hulp = waarde
waarde = prijs;
prijs = hulp
d. Een constante een naam geven
Met dit plan kun je een constante waarde aan een naam koppelen. Je gebruikt dit plan wanneer je in het programma een bepaalde constante vaak moet gebruiken. Je initialiseert een lokale variabele een keer en daarna wordt deze variabele nooit meer veranderd. Je kunt dan in de rest van het programma de naam van de variabele gebruiken i.p.v. de waarde. Het programma wordt hierdoor leesbaarder. Bovendien kun je later de waarde van de constante in een keer veranderen.
Voorbeeld.
CONST mess = "Output: ";
e. Een logische waarde aan een variabele toekennen
Dit plan maakt het mogelijk om aan een variabele de uitkomst van een logische expressie nl. true (waar) of false (niet-waar) toe te kennen.
Je gebruikt dit plan als je een variabele wilt gebruiken in een voorwaardelijk statement, zoals if then end if.
De variabele zal dan de waarde true of false moeten hebben.
Voorbeeld:
a = 'true';
if ( a = true ) {toeslag = 2.0 + 0.6};
of
a = 'true';
if ( a ) {toeslag = 2.0 + 0.6};
of
btw = 17.5;
if ( btw>15 ) {toeslag = 2.0 + 0.6};
f. Afdrukken van resultaten
Met dit plan kun je het resultaat van een berekening plus een begeleidende tekst aan de gebruiker mededelen. Dit kan in de message-box, in een dialoog of in een veld.
Je gebruikt dit plan als je wilt dat de gebruiker het resultaat van een berekening moet weten.
Druk niet zomaar getallen af, maar doe er een verhelderende tekst bij. Dit maakt het veel eenvoudiger om de uitvoer te begrijpen."
Voorbeeld:
window.document.writeln("De waarde is: ")
of
window.document.writeln("Output: ", getal, a)
g. Invoer aan de gebruiker vragen
Dit plan maakt het mogelijk om de gebruiker een vraag te stellen en een antwoord in te lezen.
Je gebruikt dit plan wanneer je de gebruiker om een willekeurige waarde wilt vragen.
Je gebruikt hiervoor de opdracht "...." of ".... ". De invoer komt in de speciale variabele "....". Zorg ervoor dat het programma een duidelijke beschrijving geeft van wat er precies moet worden ingetypt."
Voorbeeld:
xxxxxxxx
h. Controleren van de invoer
Met dit plan kun je nadat je de gebruiker om invoer hebt gevraagd, deze invoer controleren en indien de controle negatief uitvalt, dit melden aan de gebruiker en de gebruiker opnieuw om invoer vragen.
Je gebruikt dit plan wanneer de invoer die je aan de gebruiker wilt vragen aan een of meer voorwaarden moet voldoen.
Voorbeeld:
if ( (invoer<0) || (invoer>150) ) { window.alert('Foute leeftijd') }
i. Geven van foutmeldingen
Met dit plan kun je aan de gebruiker melden dat er ergens in het programma iets fout dreigt te gaan.
Je gebruikt dit plan als het programma iets moet uitrekenen en de berekening zou een 'crash' van het programma tot gevolg kunnen hebben.
Voorbeeld:
if ( c == 0 ) { window.alert('Delen door 0') }
a= b / c;
j. Stoppen wanneer de invoer onjuist is
Met dit plan kun je zorgen dat het programma stopt als gebruiker een onjuiste invoer intypt en dit melden aan de gebruiker. Je gebruikt dit plan om de invoer van de gebruiker te testen op de aan de invoer gestelde eisen en de gebruiker bij onjuiste invoer geen tweede kans te bieden. Als de invoer wel juist is gaat het programma verder."
Voorbeeld:
if ( (invoer<0) || (invoer>150) ) { exit() }
k. Lezen uit files
Met dit plan kun je ervoor zorgen dat het programma invoer haalt uit een extern bestand. Je gebruikt dit plan wanneer de invoer voor het programma bestaat uit waarden die opgeslagen zijn in een extern bestand.
Je kunt in principe in alle mogelijke en onmogelijke bestanden informatie of data lezen. Bijvoorbeeld:
- uit tekst bestanden
- uit grafische bestanden
- uit geluidsbestanden
- uit animatie bestanden
- uit video bestanden
- uit class-files bestanden
l. Schrijven naar files
Met dit plan kun je ervoor zorgen dat het programma uitvoer genereert in een extern bestand. Je gebruikt dit plan wanneer de uitvoer van het programma bestaat uit waarden die opgeslagen moeten worden in een extern bestand.
m. Herhalen van een aantal statements
Dit plan maakt het mogelijk om een lus een bepaald aantal keren te herhalen. Je gebruikt dit plan als je van te voren al weet hoe vaak een aantal statements uitgevoerd moeten worden.
voorbeelden:
for ( j=5; j>10; j++ ) y = y*j;
of
for ( j = n-1; j > 1; j-- ) y = y*j;
n. Een rij getallen afsluiten met een speciaal getal
Dit plan maakt het mogelijk om een willekeurig aantal getallen in te lezen. Je gebruikt dit plan als de gebruiker een reeks getallen moet invoeren, maar als van te voren niet bekend is om hoeveel getallen het gaat.
o. Tellen hoe vaak een lus wordt doorlopen
Dit plan maakt het mogelijk te tellen hoe vaak het programma een bepaalde lus doorloopt. Er zijn hier twee gevallen te onderscheidden: de lus kan wel of niet 0 maal worden doorlopen. Het onderscheid zit in de plaats van de EXIT. Staat de EXIT aan het begin van de lus dan is 0 maal mogelijk, staat de EXIT aan het eind van de lus dan wordt de lus ten minste 1 maal doorlopen. Je gebruikt dit plan als je nadat het programma een bepaalde lus heeft verlaten, en dus met de verdere uitvoering van het programma verder gaat, wilt weten hoe vaak die bepaalde lus door het programma is doorlopen.
Voorbeeld:
i = 3
while(i>4)
{
j = j + 1;
}
Voorbeeld:
i = 3
{
j = j + 1;
} while(i>4)
p. Stoppen van een herhaling onder een bepaalde voorwaarde
Dit plan maakt het mogelijk een lus zolang te herhalen totdat aan een bepaalde voorwaarde is voldaan.
Je gebruikt dit plan als het programma een of meerdere statements meerdere keren moet doorlopen, maar je weet niet hoe vaak. Je weet echter onder welke voorwaarde het herhalen beeindigd mag worden.
Voorbeeld:
for (i=0; i<10; i++)
{
j = j + 1;
if (j== 13) { exit() }
}
q. Recursie (iets zichzelf laten herhalen)
Dit plan maakt het mogelijk een functie aan te roepen binnen zijn eigen programma code.
Je gebruikt dit plan als je een probleem op niveau n wilt oplossen, waarbij de uitkomst van niveau n afhankelijk is van niveau n-1.
Bij de berekening van de faculteit van een getal gebruik je de formule: fac(n) = n * fac (n-1)
Voorbeeld:
function fac(n)
{ var y
if ( (n==0) || (n==1) ) return 1
else { y = (n*fac(n-1)); return y }
}
r. Iets onder speciale condities doen (iets voorwaardelijks doen) (if then)
Dit plan maakt het mogelijk een of meerdere statements wel of niet uit te voeren.
Je gebruikt dit plan als het programma, wanneer aan een bepaalde voorwaarde wordt voldaan, iets wel en anders niet moet uitvoeren.
Voorbeeld:
if (temp>100) { tekst='Koken'}
s. Twee gevallen onderscheiden (if then else)
Dit plan maakt het mogelijk om in het ene geval iets anders te laten uitvoeren dan in het andere geval, waarbij de gevallen elkaar uitsluiten.
Je gebruikt dit plan als het programma, wanneer aan een bepaalde voorwaarde wordt voldaan, een of meerdere statements moet uitvoeren, terwijl het, wanneer er aan die voorwaarde niet wordt voldaan, een of meer andere statements moet uitvoeren.
Voorbeeld:
if ( direction == 'bakboord' )
{
naar = 'Links';
}
else
{
naar = 'Rechts';
}
t. Meerdere gevallen onderscheiden (if then else if)
Dit plan maakt het mogelijk om in verschillende gevallen (3 of meer) op verschillende manieren te reageren. Je gebruikt dit plan als je onderscheid wilt maken tussen 3 of meer gevallen.
Voorbeeld:
if (hoogte>200) {soort ='reus';}
else { if (hoogte<100) {soort ="klein duimpje";}
else {soort = 'normaal';} }
u. Een willekeurig getal kiezen
Dit plan maakt het mogelijk een variabele een willekeurige waarde te geven, die tussen 0 en een gegeven waarde in ligt. Je gebruikt dit plan wanneer een programma elke keer dat het wordt aangeroepen, een bepaalde variabele een willekeurige waarde moet geven. Het enige wat van dit willekeurige getal bekend is, is dat het tussen 0 en een gegeven waarde in moet liggen.
Voorbeeld:
getal = Gmin + (Gmax-Gmin) * Random();
v. Gebruik van functies
Dit plan maak het mogelijk om een stuk programma een naam te geven, zodat je ergens anders in het programma d.m.v. een opdracht dit stuk programma kan uitvoeren. Je gebruikt dit plan in twee gevallen:
a. Om een groot programma overzichtelijk te maken. Grote problemen worden vaak opgesplitst in kleinere deelproblemen, die ieder voor zich een enkel proces inhouden. Van elk deelprobleem wordt dan een functie gemaakt.
b. Om een aantal opdrachten die op meerdere plaatsen in het programma moeten worden uitgevoerd te bundelen tot een functie zodat je in plaats van het intypen van die opdrachten dan kan volstaan met een opdracht nl. de naam van de functie.
Een functie begint altijd met een krom haakje ({) en eindigt met krom haakje (}). Daartussen staat de code van de functie. Een functie kan d.m.v. zijn naam aangeroepen worden. Omwille van de leesbaarheid van het programma moeten de statements in de functies inspringen."
Voorbeeld:
function invoer()
{
return (window.prompt("Invoer", ' '))
}
antwoord = invoer();
w. Idem, maar dan met of zonder het doorgeven van parameters
Dit plan maak het mogelijk om een stuk programma een naam te geven, zodat je ergens anders in het programma d.m.v. een opdracht dit stuk programma kan uitvoeren, waarbij waarden van variabelen uit het programma aan de procedure meegegeven kunnen worden
De functie ziet er als volgt uit: 'functie_naam (p1, p2, ... pn)'. Achter de naam staan dus een aantal parameters. Bij de aanroep van de functie moeten nu net zo veel variabelen of waarden meegeven worden - tussen haakjes - als er parameters zijn.
Voorbeeld:
function invoer(tekst)
{
return (window.prompt("tekst", ' '))
}
antwoord = invoer('Geef uw leeftijd');
x. Het opvragen van systeemvariabelen
Je kunt systeemvariabelen opvragen. Systeemvariabelenen zijn bijvoorbeeld het aantal seconden dat de computer aanstaat, een filenaam, de modificatiedatum van de file, etc.
Netscape en Internet Explorer maken dit mogelijk. Javascript kent een aantal ingebouwde functies, zoals tijd en datum functies etc. (Zie het boek.) Je kunt deze in je web-pagina krijgen via een 'document.write' of 'document.writeln'. (Zie elders.)
Voorbeeld:
zie elders
y. Het aanroepen van een applet
In HTML kun je voorgeprogrammeerde objecten (uit bijvoorbeeld een library) aanroepen. Dat doe je door in de HTML-source de applet-tag op de juiste manier op te nemen en aan te roepen.
Een gecompileerde file met java-code - zoals die door de java compiler wordt aangemaakt - is een applet. De 'client' laadt bij het runnen van de HTML-pagina die file en 'executeert' ('runt') hem; en presenteert de inhoud. De afmeting van de applet heeft de HTML-programmeur wel in de hand maar de inhoud niet. Hier ziet u de waterscheiding tussen de 'java-programmeur' en de 'HTML-programmeur'. Die file is van het type 'class'.
De class-file bevat geen informatie waaruit iemand kan afleiden hoe hij is opgebouwd. Dat is het voordeel van java-applets: de ontwerper raakt zijn geestelijke eigendommen niet kwijt. Voor de gebruiker is dat wellicht nadelig, maar voor een ontwerper meestal niet. Het is gewoon een kwestie van copyrights. Wil je de copyrights van je programma geheim houden dan programmeer je als je de keus hebt, in java; zo niet dan programmeer je in javascript.
Wat je ziet is als het ware een (interactief, intelligent) 'dynamisch plaatje'. We noemen dat ook wel een 'dynamische graphic'.
Enschede, 6 dec. 1999