1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
|
---
title: Een eerste duik in JavaScript
slug: Learn/JavaScript/First_steps/A_first_splash
translation_of: Learn/JavaScript/First_steps/A_first_splash
---
<div>{{LearnSidebar}}</div>
<div>{{PreviousMenuNext("Learn/JavaScript/First_steps/What_is_JavaScript", "Learn/JavaScript/First_steps/What_went_wrong", "Learn/JavaScript/First_steps")}}</div>
<p class="summary">Nu heb je iets geleerd over de theorie van JavaScript en wat je ermee kunt doen, we geven je nu een spoedcursus in de basisfuncties van JavaScript via een volledig praktische zelfstudie. Hier bouw je stap voor stap een eenvoudig spel "Raad het nummer".</p>
<table class="learn-box standard-table">
<tbody>
<tr>
<th scope="row">Voorwaarden:</th>
<td>Elementaire computerkennis, een basiskennis van HTML en CSS, een goed begrip van wat JavaScript is.</td>
</tr>
<tr>
<th scope="row">Doelstelling:</th>
<td>Om het eerste beetje ervaring te krijgen met het schrijven van JavaScript, en op zijn minst een basiskennis te verwerven van wat het schrijven van een JavaScript-programma inhoudt.</td>
</tr>
</tbody>
</table>
<p>Er wordt van je niet verwacht dat je de code meteen volledig begrijpt. We willen je eerst kennis laten maken met de concepten op hoog niveau en je een idee geven van hoe JavaScript (en andere programmeertalen) werken. In volgende artikelen zal je al deze functies nog veel gedetailleerder gaan bekijken!</p>
<div class="note">
<p>Opmerking: Veel van de codefuncties die je in JavaScript ziet, zijn hetzelfde als in andere programmeertaal - functies, loops, enz. De codesyntax ziet er anders uit, maar de concepten zijn nog steeds grotendeels hetzelfde.</p>
</div>
<h2 id="Denken_als_een_programmeur">Denken als een programmeur</h2>
<p>Een van de moeilijkste dingen om te leren tijdens het programmeren, is niet de manier van opschrijven (syntax) die je moet leren, die je moet leren, maar hoe je deze kunt toepassen om problemen in de echte wereld op te lossen. Je moet gaan denken als een programmeur - meestal gaat het om beschrijvingen van wat je programma moet doen en uitzoeken welke codefuncties nodig zijn om die dingen te bereiken en hoe ze samen kunnen werken.</p>
<p>Dit vereist een combinatie van hard werken, ervaring met de syntax van de programmeertaal, oefenen - en een beetje creativiteit. Hoe meer je codeert, hoe beter je erin zult worden. We kunnen niet beloven dat je "programmeurshersenen" in 5 minuten zult ontwikkelen, maar we zullen je voldoende gelegenheid geven om tijdens de cursus te denken als een programmeur.</p>
<p>Laten we met dat in gedachten eens kijken naar het voorbeeld dat we in dit artikel gaan opbouwen, en het algemene proces bekijken om het te ontleden in tastbare taken.</p>
<h2 id="Voorbeeld_-_Raad_het_nummerspel">Voorbeeld - Raad het nummerspel</h2>
<p>In dit artikel laten we je zien hoe je het eenvoudige spel opbouwt dat je hieronder kunt zien:</p>
<div class="hidden">
<h6 id="Top_hidden_code">Top hidden code</h6>
<p> </p>
<pre class="brush: html"><!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Raad het nummerspel</title>
<style>
html {
font-family: sans-serif;
}
body {
width: 50%;
max-width: 800px;
min-width: 480px;
margin: 0 auto;
}
.lastResult {
color: white;
padding: 3px;
}
</style>
</head>
<body>
<h1>Raad het nummerspel</h1>
<p>We hebben een willekeurig getal tussen 1 en 100 gekozen. Kijk of je het in 10 beurten of minder kunt raden. We zullen je vertellen of je gok te hoog of te laag was.</p>
<div class="form"> <label for="guessField">Voer je gok in: </label><input type="text" id="guessField" class="guessField"> <input type="submit" value="Doe een gok" class="guessSubmit"> </div>
<div class="resultParas">
<p class="guesses"></p>
<p class="lastResult"></p>
<p class="lowOrHi"></p>
</div>
</body>
<script>
// Je JavaScript start hier
var randomNumber = Math.floor(Math.random() * 100) + 1;
var guesses = document.querySelector('.guesses');
var lastResult = document.querySelector('.lastResult');
var lowOrHi = document.querySelector('.lowOrHi');
var guessSubmit = document.querySelector('.guessSubmit');
var guessField = document.querySelector('.guessField');
var guessCount = 1;
var resetButton;
function checkGuess() {
var userGuess = Number(guessField.value);
if (guessCount === 1) {
guesses.textContent = 'Vorige gok: ';
}
guesses.textContent += userGuess + ' ';
if (userGuess === randomNumber) {
lastResult.textContent = 'Hartelijk gefeliciteerd! Je hebt het goed!';
lastResult.style.backgroundColor = 'green';
lowOrHi.textContent = '';
setGameOver();
} else if (guessCount === 10) {
lastResult.textContent = '!!!GAME OVER!!!';
lowOrHi.textContent = '';
setGameOver();
} else {
lastResult.textContent = 'Fout!';
lastResult.style.backgroundColor = 'red';
if(userGuess < randomNumber) {
lowOrHi.textContent='Laatste gok was te laag!' ;
} else if(userGuess > randomNumber) {
lowOrHi.textContent = 'Laatste gok was te hoog!';
}
}
guessCount++;
guessField.value = '';
}
guessSubmit.addEventListener('click', checkGuess);
function setGameOver() {
guessField.disabled = true;
guessSubmit.disabled = true;
resetButton = document.createElement('button');
resetButton.textContent = 'Start nieuw spel';
document.body.appendChild(resetButton);
resetButton.addEventListener('click', resetGame);
}
function resetGame() {
guessCount = 1;
var resetParas = document.querySelectorAll('.resultParas p');
for(var i = 0 ; i < resetParas.length ; i++) {
resetParas[i].textContent='';
}
resetButton.parentNode.removeChild(resetButton);
guessField.disabled = false;
guessSubmit.disabled = false;
guessField.value='';
guessField.focus();
lastResult.style.backgroundColor='white';
randomNumber=Math.floor(Math.random() * 100) + 1;
}
</script>
</html></pre>
<p> </p>
</div>
<p>{{ EmbedLiveSample('Top_hidden_code', '100%', 320) }}</p>
<p>Probeer het te spelen - maak jezelf vertrouwd met het spel voordat je verder gaat.</p>
<p>Stel je voor dat iemand je de volgende opdracht heeft gegeven voor het maken van dit spel:</p>
<blockquote>
<p>Ik wil dat je een eenvoudig raad het nummer type spel maakt. Het moet een willekeurig getal tussen 1 en 100 kiezen en vervolgens de speler uitdagen om het getal in 10 beurten te raden. Na elke beurt moet aan de speler worden verteld of deze gelijk of ongelijk heeft, of de gok te laag of te hoog was. Het moet de speler ook vertellen welke nummers hij eerder geraden had. Het spel wordt beëindigd als de speler het cijfer correct raadt of als het aantal beurten op is. Wanneer het spel is afgelopen, moet de speler een optie krijgen om opnieuw te spelen.</p>
</blockquote>
<p>Bij het bekijken van deze beschrijving is het eerste dat we kunnen doen is het beginnen met het opsplitsen in eenvoudige, bruikbare taken, in zo veel mogelijk programmeur-denkwijze als mogelijk:</p>
<ol>
<li>Genereer een willekeurig getal tussen 1 en 100.</li>
<li>Noteer het gekozen waar de speler mee speelt. Start op 1.</li>
<li>Geef de speler een manier om te raden wat het nummer is.</li>
<li>Nadat een gok is ingediend, noteer je deze eerst ergens zodat de gebruiker zijn eerdere gerade gokbeurten kan zien.</li>
<li>Controleer vervolgens of dit het juiste nummer is.</li>
<li>Als het antwoord goed is:
<ol>
<li>Toon gefeliciteerd bericht.</li>
<li>Stop de mogelijkheid speler om meer getallen in te kunnen voeren (dit zou het spel in de war kunnen maken).</li>
<li>Schermbediening waarmee de speler het spel opnieuw kan starten.</li>
</ol>
</li>
<li>Als het antwoord verkeerd is en de speler heeft nog beurten over:
<ol>
<li>Vertel de speler dat deze ongelijk heeft.</li>
<li>Laat ze een nieuwe gok in te voeren.</li>
<li>Hoog het aantal gedane beurten op met 1.</li>
</ol>
</li>
<li>Als het antwoord verkeerd is en de speler geen beurten meer heeft:
<ol>
<li>Vertel de speler dat het spel klaar is.</li>
<li>Stop de speler om meer getallen in te kunnen voeren (dit zou het spel in de war maken).</li>
<li>Schermbediening waarmee de speler het spel opnieuw kan starten.</li>
</ol>
</li>
<li>Nadat het spel opnieuw is gestart, controleer je of de spellogica en UI volledig opnieuw zijn gestart en gaat het aantal beurten terug naar 1.</li>
</ol>
<p>Laten we nu verder gaan en bekijken hoe we deze stappen kunnen omzetten in code, het spel opbouwen en de JavaScript-functies gaandeweg verkennen.</p>
<h3 id="Eerste_opzet">Eerste opzet</h3>
<p>Om deze beschrijving te beginnen, willen we graag dat je een lokale kopie maakt van het <a href="https://github.com/mdn/learning-area/blob/master/javascript/introduction-to-js-1/first-splash/number-guessing-game-start.html">nummer-guessing-game-start.html</a> bestand (zie het hier <a href="http://mdn.github.io/learning-area/javascript/introduction-to-js-1/first-splash/number-guessing-game-start.html">live</a>). Open het in zowel je teksteditor als in je webbrowser. Op dit moment zie je een eenvoudige kop, alinea met instructies en een formulier voor het invoeren van een gok, maar het formulier zal op dit moment niets doen.</p>
<p>De plaats waar we al onze code zullen toevoegen, bevindt zich in het element {{htmlelement ("script")}} onder aan de HTML:</p>
<pre class="brush: html"><script>
// Your JavaScript goes here
</script>
</pre>
<h3 id="Variabelen_toevoegen_om_onze_gegevens_op_te_slaan">Variabelen toevoegen om onze gegevens op te slaan</h3>
<p>Laten we beginnen. Voeg eerst de volgende regels toe in het {{htmlelement("script")}} element:</p>
<pre class="brush: js">var randomNumber = Math.floor(Math.random() * 100) + 1;
var guesses = document.querySelector('.guesses');
var lastResult = document.querySelector('.lastResult');
var lowOrHi = document.querySelector('.lowOrHi');
var guessSubmit = document.querySelector('.guessSubmit');
var guessField = document.querySelector('.guessField');
var guessCount = 1;
var resetButton;</pre>
<p>Dit gedeelte van de code stelt de variabelen in die we nodig hebben om de gegevens op te slaan die ons programma zal gebruiken. Variabelen zijn in feite bakjes voor waarden (zoals getallen of tekenreeksen). Je maakt een variabele met het sleutelwoord var gevolgd door de naam van je variabele. Je kunt een waarde toewijzen aan je variabele met een gelijkteken (=) gevolgd door de waarde die je eraan wilt geven.</p>
<p>In ons voorbeeld:</p>
<ul>
<li>De eerste variable — <code>randomNumber</code> — krijgt een willekeurig getal tussen 1 en 100 toegewezen, berekend met een wiskundig algoritme.</li>
<li>De volgende drie variabelen worden elk gemaakt om een verwijzing naar de resultatenparagrafen (resultaatonderdelen) in onze HTML op te slaan en worden gebruikt om waarden in de alinea's later in de code in te voegen:
<pre class="brush: html"><p class="guesses"></p>
<p class="lastResult"></p>
<p class="lowOrHi"></p></pre>
</li>
<li>De volgende twee variabelen slaan verwijzingen op naar de formuliertekstinvoer en verzendknop en worden gebruikt om het invoeren van de gok later in te stellen.
<pre class="brush: html"><label for="guessField">Enter a guess: </label><input type="text" id="guessField" class="guessField">
<input type="submit" value="Submit guess" class="guessSubmit"></pre>
</li>
<li>Onze laatste twee variabelen bevatten het aantal gokbeurten van 1 (gebruikt om bij te houden hoeveel gokbeurten de speler heeft gehad) en een verwijzing naar een resetknop (begin op nieuw knop) die nog niet bestaat (maar later zal verschijnen).</li>
</ul>
<div class="note">
<p><strong>Opmerking</strong>: Je leert later veel meer over variabelen in de cursus, te beginnen met het <a href="https://developer.mozilla.org/en-US/docs/user:chrisdavidmills/variables">volgende artikel</a>.</p>
</div>
<h3 id="Functies">Functies</h3>
<p>Voeg vervolgens het onderstaande toe onder je vorige JavaScript:</p>
<pre class="brush: js">function checkGuess() {
alert('Ik ben een tijdelijke aanduiding');
}</pre>
<p>Functies zijn herbruikbare blokken met code die je één keer kunt schrijven en die keer op keer kunt hergebruiken, zodat je de code niet steeds opnieuw hoeft te schrijven. Dit is echt handig. Er zijn een aantal manieren om functies te definiëren, maar voor nu concentreren we ons op één eenvoudig type. Hier hebben we een functie gedefinieerd door het trefwoord <code> function</code> te gebruiken, gevolgd door een naam, met haakjes erachter geplaatst. Daarna plaatsen we twee accolades (<code> {} </code>). En binnen de accolades wordt alle code weergegeven die we willen uitvoeren wanneer we de functie aanroepen. </p>
<p>De code wordt uitgevoerd door de naam van de functie in te typen gevolgd door de haakjes.</p>
<p>Probeer je code op te slaan en vernieuw je browservenster</p>
<p>Ga naar de <a href="/en-US/docs/Learn/Common_questions/What_are_browser_developer_tools">"developer tools JavaScript console"</a>, en voer de volgende regel in:</p>
<pre class="brush: js"><code>
checkGuess();</code></pre>
<p>Je zou een waarschuwing moeten zien verschijnen die zegt: "Ik ben een tijdelijke aanduiding"; we hebben een functie in onze code aangemaakt die een waarschuwing creëert wanneer we deze noemen.</p>
<div class="note">
<p><strong>Opmerking</strong>: Je zult later in de cursus veel meer leren over functies.</p>
</div>
<h3 id="Operators_(bewerkers)">Operators (bewerkers)</h3>
<p>Met JavaScript-operators kunnen we testen uitvoeren, wiskunde doen, samen met andere strings en dergelijke dingen doen.</p>
<p>Laten we onze code opslaan en de pagina vernieuwen die wordt weergegeven in onze browser. Open de <a href="/en-US/docs/Learn/Common_questions/What_are_browser_developer_tools"> JavaScript-console voor ontwikkelaarstools </a> als je deze nog niet hebt geopend, zodat je de onderstaande voorbeelden kunt typen - typ in elk van de "Voorbeeld" kolommen precies zoals getoond, druk op Return / Enter na elk, en zie welke resultaten ze teruggeven. Als je geen eenvoudige toegang hebt tot de browserontwikkelaarstools, dan kan je altijd onderstaande eenvoudig ingebouwde console gebruiken:</p>
<div class="hidden">
<h6 id="Hidden_code">Hidden code</h6>
<pre class="brush: html"><code>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JavaScript console</title>
<style>
* {
box-sizing: border-box;
}
html {
background-color: #0C323D;
color: #809089;
font-family: monospace;
}
body {
max-width: 700px;
}
p {
margin: 0;
width: 1%;
padding: 0 1%;
font-size: 16px;
line-height: 1.5;
float: left;
}
.input p {
margin-right: 1%;
}
.output p {
width: 100%;
}
.input input {
width: 96%;
float: left;
border: none;
font-size: 16px;
line-height: 1.5;
font-family: monospace;
padding: 0;
background: #0C323D;
color: #809089;
}
div {
clear: both;
}
</style>
</head>
<body>
</body>
<script>
var geval = eval;
function createInput() {
var inputDiv = document.createElement('div');
var inputPara = document.createElement('p');
var inputForm = document.createElement('input');
inputDiv.setAttribute('class','input');
inputPara.textContent = '>';
inputDiv.appendChild(inputPara);
inputDiv.appendChild(inputForm);
document.body.appendChild(inputDiv);
inputDiv.focus();
if(document.querySelectorAll('div').length > 1) {
inputForm.focus();
}
inputForm.addEventListener('change', executeCode);
}
function executeCode(e) {
try {
var result = geval(e.target.value);
} catch(e) {
var result = 'error — ' + e.message;
}
var outputDiv = document.createElement('div');
var outputPara = document.createElement('p');
outputDiv.setAttribute('class','output');
outputPara.textContent = 'Resultaat: ' + result;
outputDiv.appendChild(outputPara);
document.body.appendChild(outputDiv);
e.target.disabled = true;
e.target.parentNode.style.opacity = '0.5';
createInput()
}
createInput();
</script>
</html></code></pre>
</div>
<p><code>{{ EmbedLiveSample('Hidden_code', '100%', 300) }}</code></p>
<p>Laten we eerst kijken naar rekenkundige operatoren, bijvoorbeeld:</p>
<table class="standard-table">
<thead>
<tr>
<th scope="col">Operator (bewerker)</th>
<th scope="col">Naam</th>
<th scope="col">Voorbeeld</th>
</tr>
</thead>
<tbody>
<tr>
<td>+</td>
<td>Optelling</td>
<td>6 + 9</td>
</tr>
<tr>
<td>-</td>
<td>Aftrekken</td>
<td>20 - 15</td>
</tr>
<tr>
<td>*</td>
<td>Vermenigvuldigen</td>
<td>3 * 7</td>
</tr>
<tr>
<td>/</td>
<td>Delen</td>
<td>10 / 5</td>
</tr>
</tbody>
</table>
<p>Je kunt ook de operator + gebruiken om tekstreeksen samen te voegen (concatenation in het programmeren). Probeer de volgende regels uit te voeren:</p>
<pre class="brush: js"><code>
var naam = 'Bingo';
naam;
var hallo = ' zegt hallo!';
hallo;
var begroeting = naam + hallo;
begroeting;</code></pre>
<p>Er zijn ook enkele shortcut-operators (kortere notatie) beschikbaar, augmented assignment-operatoren genaamd. Als je bijvoorbeeld eenvoudig een nieuwe tekstreeks aan een bestaande wilt toevoegen en het resultaat terug geeft, kan je dit doen:</p>
<pre class="brush: js"><code>
naam += ' zegt hallo!';</code></pre>
<p>This is equivalent to</p>
<pre class="brush: js"><code>
naam = naam + ' zegt hallo!';</code></pre>
<p>Wanneer we waar / niet waar testen uitvoeren (bijvoorbeeld binnen conditionals - zie {{anch ("Conditionals", "below")}}, gebruiken we vergelijkingsoperatoren, bijvoorbeeld:</p>
<table class="standard-table">
<thead>
<tr>
<th scope="col">Operator</th>
<th scope="col">Naam</th>
<th scope="col">Voorbeeld</th>
</tr>
<tr>
<td>===</td>
<td>Strikte gelijkheid (is het precies hetzelfde?)</td>
<td>5 === 2 + 4</td>
</tr>
<tr>
<td>!==</td>
<td>Niet-gelijkheid (is het niet hetzelfde?)</td>
<td>'Chris' !== 'Ch' + 'ris'</td>
</tr>
<tr>
<td><</td>
<td>Minder dan</td>
<td>10 < 6</td>
</tr>
<tr>
<td>></td>
<td>Groter dan</td>
<td>10 > 20</td>
</tr>
</thead>
</table>
<h3 id="Conditionals_(condities)">Conditionals (condities)</h3>
<p>Terug naar onze <code>checkGuess()</code> -functie, ik denk dat het veilig is om te zeggen dat we niet willen dat het alleen maar een plaatshouderbericht uitspuugt. We willen dat het controleert of de gok van een speler correct is of niet, en dat het op de juiste manier reageert.</p>
<p>Vervang nu de huidige functie <code>checkGuess()</code> door deze versie:</p>
<pre class="brush: js"><code>
function checkGuess() {
var userGuess = Number(guessField.value);
if (guessCount === 1) {
guesses.textContent = 'Vorige gok: ';
}
guesses.textContent += userGuess + ' ';
if (userGuess === randomNumber) {
lastResult.textContent = 'Hartelijk gefeliciteerd! Je hebt het goed!';
lastResult.style.backgroundColor = 'green';
lowOrHi.textContent = '';
setGameOver();
} else if (guessCount === 10) {
lastResult.textContent = '!!!GAME OVER!!!';
setGameOver();
} else {
lastResult.textContent = 'Fout!';
lastResult.style.backgroundColor = 'red';
if(userGuess < randomNumber) {
lowOrHi.textContent = 'Laatste gok was te laag!';
} else if(userGuess > randomNumber) {
lowOrHi.textContent = 'Laatste gok was te hoog!';
}
}
guessCount++;
guessField.value = '';
guessField.focus();
}</code></pre>
<p>Dit is veel code - pfff! Laten we door elke sectie gaan en uitleggen wat het doet.</p>
<ul>
<li>De eerste regel (regel 2 hierboven) declareert een variabele met de naam <code>userGuess</code> en stelt de waarde in als huidige waarde die is ingevoerd in het tekstveld. We voeren deze waarde ook uit via de ingebouwde JavaScript methode <code>Number()</code>, om er zeker van te zijn dat de waarde absoluut een getal is.</li>
<li>Vervolgens komen we ons eerste voorwaardelijke codeblok tegen (regels 3-5 hierboven). Met een voorwaardelijk codeblok kan je code selectief uitvoeren, afhankelijk van of een bepaalde voorwaarde waar is of niet. Het lijkt een beetje op een functie, maar dat is het niet. De eenvoudigste vorm van voorwaardelijk blok begint met het sleutelwoord <code>if</code> (als), dan wat haakjes <code>()</code>, dan wat accolades <code>{}</code>. Binnen de haakjes nemen we een test op. Als de test <code>true</code> (waar) retourneert, voeren we de code binnen de accolades uit. Zo niet, dan doen we dat niet en gaan we verder met het volgende stukje code. In dit geval test de test of de variabele <code>guessCount</code> gelijk is aan <code>1</code> (dus of dit de eerste beurt van de speler is of niet):
<pre class="brush: js"><code>
guessCount === 1</code></pre>
Als dat zo is, maken we de tekstinhoud van de paragraaf gelijk aan "<code>Vorige gok</code>:". Zo niet, dan doen we dat niet.</li>
<li>Regel 6 voegt de huidige waarde van <code>UserGuess</code> aan het einde van de guesses-paragraaf toe plus een lege ruimte, zodat er elke keer een spatie tussen elke weergegeven gok verschijnt.</li>
<li>Het volgende blok (regels 8-24 hierboven) voeren een paar controles uit:
<ul>
<li>De eerste <code>if(){}</code> controleert of de gok van de gebruiker gelijk is aan het <code>randomNumber</code> zie is gezet bovenaan onze JavaScript-code. Als dat zo is, heeft de speler correct geraden en is het spel gewonnen, dus laten we de speler een gefeliciteerd bericht zien met een mooie groene kleur, daarna wissen we de inhoud van het Lage /Hoge gok vakje en voeren een functie uit met de naam <code>setGameOver()</code>, die we later zullen bespreken.</li>
<li>Nu hebben we een nieuwe test aan aan het einde van de laatste conditie vast gemaakt met behulp van een <code>else if(){}</code>-structuur. Dit stukje code controleerd of de gok van de laatste beurt ook van de gebruiker is. Als dat zo is, doet het programma hetzelfde als in het vorige blok, maar in plaats van het gefeliciteerd bericht, wordt er een game-over-bericht geplaatst.</li>
<li>Het laatste blok dat aan het einde van deze code is gekoppeld (het <code>else {}</code>) bevat code die alleen wordt uitgevoerd als geen van de twee andere tests <code>true</code> terug geven (dat wil zeggen dat de speler het niet goed heeft geraden, maar er zijn nog meer gokbeurten over). In dit geval vertellen we de speler dat deze ongelijk heeft. Vervolgens voeren we een andere voorwaardelijke test uit om te controleren of de gok hoger of lager was dan het antwoord. Afhankelijk van dit resultaat vertellen we in een bericht of de gok hoger of lager was.</li>
</ul>
</li>
<li>De laatste drie regels in de functie (regel 26-28 hierboven) zorgen ervoor dat we klaar zijn voor de volgende gok. We voegen 1 toe aan de <code>guessCount</code>-variabele, zodat de speler zijn beurt opgebruikt (<code>++</code> is een incrementatiebewerking - dus een toename met 1) en de waarde wordt leeggemaakt in het formuliertekstveld en opnieuw gefocusseerd (de cursor wordt er opnieuw ingezet), zodat de volgende gok kan worden ingevoerd .</li>
</ul>
<h3 id="Events">Events</h3>
<p>Op dit moment hebben we een goed geïmplementeerde <code>checkGuess()</code>-functie, maar die doet niets omdat we hem nog niet hebben aangeroepen. In het ideale geval willen we het aanroepen als de knop "Doe een gok" wordt ingedrukt, en om dit te doen, moeten we een event (gebeurtenis) gebruiken. Events zijn acties die plaatsvinden in de browser, zoals een knop waarop geklikt wordt, of een pagina die wordt geladen, of een video die wordt afgespeeld, in reactie daarop kunnen we blokken met code uitvoeren. De constructies die luisteren naar de gebeurtenis die plaatsvindt, worden <strong>event listeners</strong> genoemd en de blokken code die worden uitgevoerd als reactie op het vuren van een event worden <strong>event handlers</strong> genoemd</p>
<p>Voeg de volgende regel toe aan je <code>checkGuess()</code> functie:</p>
<pre class="brush: js"><code>
guessSubmit.addEventListener('click', checkGuess);</code></pre>
<p>Hier voegen we een event listener toe aan de <code>guessSubmit</code>-knop. Dit is een methode die twee invoerwaarden (argumenten genaamd) nodig heeft - het type event waarnaar we luisteren (in dit geval click (klik)) als een tekenreeks en de code die we willen uitvoeren wanneer de gebeurtenis plaatsvindt (in dit geval de checkGuess() functie - merk op dat we de haakjes niet hoeven te gebruiken bij het schrijven binnen {{domxref ("EventTarget.addEventListener", "addEventListener ()")}}).</p>
<p>Probeer je code nu uit door op te slaan en te de browser te vernieuwen, je uitwerking zou nu moeten werken, tot op zekere hoogte. Het enige probleem is nu, als je het juiste antwoord raadt of gokken mist, het spel stuk zal gaan, omdat we nog niet de functie <code>setGameOver()</code> hebben aangemaakt en die zou moeten draaien zodra het spel voorbij is. Laten we nu onze ontbrekende code toevoegen en de voorbeeldfunctionaliteit voltooien.</p>
<h3 id="De_spelfunctionaliteit_afmaken">De spelfunctionaliteit afmaken</h3>
<p>Laten we de functie <code>setGameOver()</code> aan de onderkant van onze code toevoegen en er vervolgens doorheen lopen. Voeg dit nu toe, onder de rest van je JavaScript:</p>
<pre class="brush: js"><code>
function setGameOver() {
guessField.disabled = true;
guessSubmit.disabled = true;
resetButton = document.createElement('button');
resetButton.textContent = 'Start nieuw spel';
document.body.appendChild(resetButton);
resetButton.addEventListener('click', resetGame);
}</code></pre>
<ul>
<li>De eerste twee regels schakelen de formuliertekstinvoer en -knop uit door hun uitgeschakeleigenschap in te stellen op <code>true</code>. Dit is nodig, want als we dat niet deden, zou de gebruiker meer gokken kunnen doen nadat het spel voorbij is, wat de boel zou verpesten.</li>
<li>De volgende drie regels maken een nieuw {{htmlelement("button")}} element, en zet de tekst op "Start nieuw spel", en zet de knop onderaan ons al bestaande HTML.</li>
<li>De laatste regel zet een event listener op onze nieuwe knop zodat, als erop de geklikt wordt, de functie genaamt <code>resetGame()</code> wordt uitgevoerd.</li>
</ul>
<p>Nu moeten we de functie nog maken! Voeg de volgende code toe, nogmaals aan de onderkant van je JavaScript:</p>
<pre class="brush: js"><code>
function resetGame() {
guessCount = 1;
var resetParas = document.querySelectorAll('.resultParas p');
for (var i = 0 ; i < resetParas.length ; i++) {
resetParas[i].textContent = '';
}
resetButton.parentNode.removeChild(resetButton);
guessField.disabled = false;
guessSubmit.disabled = false;
guessField.value = '';
guessField.focus();
lastResult.style.backgroundColor = 'white';
randomNumber = Math.floor(Math.random() * 100) + 1;
}</code></pre>
<p>Dit opnieuw een vrij lang blok code en stelt alles volledig opnieuw in zoals het was aan het begin van het spel, dus de speler kan nog een keer proberen.</p>
<p>Het:</p>
<ul>
<li>Zet <code>guessCount</code> terug naar 1.</li>
<li>Leegt alle informatie paragraven.</li>
<li>Verwijderd de reset knop van de code.</li>
<li>Zet de formulier elementen aan, en leegt het tekstveld en zet de cursor erin, klaar zodat een nieuwe gok ingevoerd kan worden.</li>
<li>Verwijderd de achtergrondkleur van de <code>lastResult</code> paragraaf.</li>
<li>Maakt een nieuw willekeurig nummer, zodat je niet direct het nieuwe nummer kan raden!</li>
</ul>
<p><strong>Op dit punt zou je een volledig werkend (eenvoudig) spelletje moeten hebben - gefeliciteerd!</strong></p>
<p>Het enige dat we nog moeten doen in dit artikel is praten over een paar andere belangrijke codefuncties die je al hebt gezien, hoewel je je dit misschien niet hebt gerealiseerd.</p>
<h3 id="Loops">Loops</h3>
<p>Een deel van de bovenstaande code die we beter moeten bekijken, is de <a href="/en-US/docs/Web/JavaScript/Reference/Statements/for">for</a>-lus. Loops zijn een heel belangrijk concept bij het programmeren, waardoor je steeds een stuk code kunt blijven herhalen totdat aan een bepaalde voorwaarde is voldaan.</p>
<p>Om te beginnen, ga opnieuw terug naar je <a href="/en-US/docs/Learn/Common_questions/What_are_browser_developer_tools">JavaScript-console voor ontwikkelaarstools</a>, en voer het volgende in:</p>
<pre class="brush: js"><code>
for (var i = 1 ; i < 21 ; i++) { console.log(i) }</code></pre>
<p>Wat gebeurt er? De nummers 1 tot 20 zijn afgedrukt in je console. Dit komt door de loop. Een for loop heeft drie invoer waarden (argumenten):</p>
<ol>
<li><strong>Een startwaarde:</strong> in dit geval beginnen we een telling op 1, maar dit kan elk nummer zijn dat je leuk vindt. Je kunt <code>i</code> vervangen door elke naam die je ook leuk vindt, maar <code>i</code> wordt gebruikt als een variabele, omdat deze kort en gemakkelijk te onthouden is.</li>
<li><strong>Een eindwaarde</strong>: Hier hebben we <code>i <21</code> gespecificeerd - de lus zal doorgaan totdat <code>i</code> niet langer minder dan 21 is. Wanneer <code>i</code> 21 bereik, zal de lus niet langer lopen.</li>
<li><strong>Een incrementor (vermeerderaar): </strong>We hebben <code>i++</code> opgegeven, wat "tel 1 op bij i" betekent. De lus wordt één keer uitgevoerd voor elke waarde van <code>i</code>, totdat <code>i</code> een waarde van 21 bereik (zoals hierboven besproken). In dit geval printen we eenvoudig de waarde van <code>i</code> naar de console op elke iteratie met behulp van {{domxref ("Console.log", "console.log ()")}}.</li>
</ol>
<p>Laten we nu kijken naar de lus in ons nummer gokspel - het volgende kan gevonden worden in de functie <code>resetGame()</code>:</p>
<pre class="brush: js"><code>
var resetParas = document.querySelectorAll('.resultParas p');
for (var i = 0 ; i < resetParas.length ; i++) {
resetParas[i].textContent = '';
}</code></pre>
<p>Deze code maakt een variabele die een lijst bevat van alle paragraven in <code><div class="resultParas"></code> door gebruik te maken van de {{domxref("Document.querySelectorAll", "querySelectorAll()")}} methode, dan wordt het door elke keer herhaald, waarbij elke keer de tekstinhoud wordt verwijderd.</p>
<h3 id="Een_kleine_discussie_over_objecten">Een kleine discussie over objecten</h3>
<p>Laten we nog een laatste verbetering toevoegen voordat we aan deze discussie beginnen. Voeg de volgende regel toe net onder de <code>var resetButton;</code> regel in de buurt van de bovenkant van je JavaScript en sla je bestand weer op:</p>
<pre class="brush: js"><code>
guessField.focus();</code></pre>
<p>Deze regel gebruikt de {{domxref("HTMLElement.focus", "focus()")}} methode om automatisch de text cursur (het knipperende streepje) in het {{htmlelement("input")}} tekst veld te zetten zodra de pagina laad, met de bedoeling dat de gebruiker direct kan beginnen met het typen van de eerste gok, en niet eerst in het formulier veld hoeft te klikken. Het is een kleine toevoeging, maar het vergroot het gebruiksgemak — de gebruiker een goede visuele idee geven van wat ze moeten doen om het spel te spelen.</p>
<p>Laten we wat hier gebeurt iets meer op detail analyseren. In JavaScript is alles een object. Een object is een verzameling van functionaliteit die bij elkaar hoort in een groep. Je kunt je eigen objecten maken, maar dat is iets te geavanceerd voor dit moment, maar zullen er later in de cursus op terug komen.Voor nu zullen we alleen in gaan op de standaard ingebouwde objecten van je browser, die ervoor zorgen dat je een heel aantal nuttige dingen kunt doen.</p>
<p>In dit geval, maken we eerst een <code>guessField</code> variabele die een verwijzing bevat naar het tekstformulierveld in onze HTML — de volgende regel vindt je bij onze variabelen aan de bovenkant van onze code: </p>
<pre class="brush: js"><code>
var guessField = document.querySelector('.guessField');</code></pre>
<p>Om deze verwijzing te krijgen, maken we gebruik van het {{domxref("document.querySelector", "querySelector()")}} object. <code>querySelector()</code> neemt een stukje informatie — een <a href="https://developer.mozilla.org/en-US/docs/Learn/CSS/Introduction_to_CSS/Selectors">CSS selector</a> die selecteerd het element waarnaar je wilt verwijzen.</p>
<p>Omdat <code>guessField</code> nu een verwijzing bevat naar een {{htmlelement("input")}} element op de pagina, heeft het toegang tot een heel aantal eigenschappen (in het programmeren noemen we dit properties en het zijn eigenlijk variabelen opgeslagen in de objecten, waarbij sommige de waarden niet aangepast kunnen worden, maar een statische inhoud bevatten) en methodes (eigenlijk functies opgeslagen in de objecten). Een van de beschikbare methoden bij input elementen is <code>focus()</code>, dus we kunnen nu deze gebruiken om de cursor te zetten in het tekst invoerveld:</p>
<pre class="brush: js"><code>
guessField.focus();</code></pre>
<p>Variabelen die geen verwijzing bevatten naar formulier elementen, die hebben geen <code>focus()</code> methode beschikbaar. Bijvoorbeeld de <code>guesses</code> variabele bevat een verwijzing naar een {{htmlelement("p")}} element, en <code>guessCount</code> bevat een nummer.</p>
<h3 id="Spelen_met_browser_objecten">Spelen met browser objecten</h3>
<p>Laten we een beetje gaan spelen met enkele browser objecten.</p>
<ol>
<li>Open eerst je JavaScript programma in een browser.</li>
<li>Open vervolgens je <a href="/en-US/docs/Learn/Common_questions/What_are_browser_developer_tools">browserontwikkelaarstools</a> en zorg ervoor dat het JavaScript-console-tabblad geopend is. </li>
<li>Typ <code>guessfield</code> in en het console zal je laten zien dat de variabele een element {{htmlelement ("input")}} bevat. Je zult ook opmerken dat de console objectnamen die zich in de uitvoeringsomgeving bevinden automatisch toevoegt, inclusief je variabelen!</li>
<li>Typ nu het volgende:
<pre class="brush: js"><code>
guessField.value = 'Hallo';</code></pre>
De eigenschap <code>value</code> vertegenwoordigt de huidige waarde die is ingevoerd in het tekstveld. Je zult zien dat er iets door het invoeren van deze opdracht is veranderd, weet je wat dat is?</li>
<li>Probeer nu <code>guesses</code> in te typen en op Enter te drukken. De console zal je laten zien dat de variabele een element {{htmlelement ("p")}} bevat.</li>
<li>Probeer nu de volgende regel in te voeren:
<pre class="brush: js"><code>
guesses.value</code></pre>
De browser geeft <strong>undefined</strong> terug, omdat deze waarde niet bestaat in paragrafen.</li>
<li>Als je de tekst in een paragraaf (alinea) wilt wijzigen, heb je in de eigenschap {{domxref ("Node.textContent", "textContent")}} nodig. Probeer dit:
<pre class="brush: js"><code>
guesses.textContent = 'Waar is mijn alinea?';</code></pre>
<code> </code></li>
<li>Nu voor wat leuke dingen. Probeer de onderstaande regels één voor één in te voeren:
<pre class="brush: js"><code>
guesses.style.backgroundColor = 'yellow';
guesses.style.fontSize = '200%';
guesses.style.padding = '10px';
guesses.style.boxShadow = '3px 3px 6px black';</code></pre>
Elk element op een pagina heeft een stijleigenschap, die zelf een object bevat waarvan de eigenschappen alle inline CSS-stijlen bevatten die op dat element zijn toegepast. Dit stelt ons in staat om dynamisch nieuwe CSS-stijlen in te stellen op elementen met behulp van JavaScript.</li>
</ol>
<h2 id="Klaar_voor_nu_...">Klaar voor nu ...</h2>
<p>Zo dus dit was het voor wat betreft het opbouwen van het voorbeeld - je hebt het einde bereikt, goed gedaan! Probeer je definitieve code uit, of <a href="http://mdn.github.io/learning-area/javascript/introduction-to-js-1/first-splash/number-guessing-game.html">speel met onze voltooide versie hier</a>. Als je het voorbeeld niet werkend krijgt, vergelijk dan jouw code met die van onze <a href="https://github.com/mdn/learning-area/blob/master/javascript/introduction-to-js-1/first-splash/number-guessing-game.html">broncode</a>.</p>
<p><code>{{PreviousMenuNext("Learn/JavaScript/First_steps/What_is_JavaScript", "Learn/JavaScript/First_steps/What_went_wrong", "Learn/JavaScript/First_steps")}}</code></p>
|