Pre úplných začiatočníkov
Autor: Brendan Eich
JavaScript vyzerá podobne ako iné jazyky
Ale len vyzerá
Je ľahké v ňom začať
Ale je ťažšie ho pochopiť a ovládnuť
Počítač neurobí to, čo chceš.
Urobí to, čo mu povieš.
Programovací jazyk nie je ako prirodzený jazyk.
Vyjadrovať sa treba presne.
Syntax treba dodržiavať na 100%
99.9% nie je good enough.
<!doctype html>
<html>
<head>
<title>Hello World</title>
</head>
<body>
<h1>Môj prvý JS program</h1>
<div id="content"></div>
<script>
console.log('Hello World');
var element = document.querySelector('#content');
element.innerHTML = 'Hello World!';
</script>
</body>
</html>
Predpísané poradie krokov, ktoré sú potrebné na splnenie úlohy.
Recept
Ale v prípade programovania super presný.
Rozloženie problému na menšie časti (a ich popísanie algoritmom)
Upečieme jahodovú tortu
Karel je jednoduchý robot, ktorý sa vie pohybovať a ukladať na zem značky.
Pozná tieto príkazy:
krokDopredu()
otocDoprava()
polozZnacku()
zdvihniZnacku()
Príkazy mu viete zapísať do súboru sandbox.js
Karel ich bude vykonávať v tom poradí, ako sú zapísané.
Príkaz musí mať na svojom konci bodkočiarku
Je vhodné, aby bol na každom riadku iba jeden príkaz (ale nemusí byť)
krokDopredu();
polozZnacku();
Prikážte Karlovi, aby sa pohol o 2 políčka dopredu.
krokDopredu();
krokDopredu();
A otočí sa doprava
otocDoprava();
Nech položí značku
polozZnacku();
Prikážte Karlovi, aby sa pohol o ďalšie 2 políčka dopredu.
krokDopredu();
krokDopredu();
otocDoprava();
krokDopredu();
krokDopredu();
polozZnacku();
Pohne o ďalšie 2 políčka a položí značku
Otočí sa doprava
Krajší Karel:
Otočíme Karla doľava
Karel nepozná príkaz pre otočenie doľava
otocDoprava();
otocDoprava();
otocDoprava();
Ďalšie dva kroky, ešte raz doľava, dva kroky a položíme značku
Otáčanie doľava vyzerá byť užitočná vec.
Nevieme to pridať k príkazom, ktoré Karel pozná?
function otocDolava() {
otocDoprava();
otocDoprava();
otocDoprava();
}
Zoskupenie viacerých príkazov pod jeden názov
Zapísaním funkcie vykonávame jej deklaráciu
Ide iba o predpis
K vykonaniu príkazov zapísaných vo vnútri funkcie dôjde v okamihu jej volania
otocDolava()
Názov funkcie môže obsahovať iba alfanumerické znaky, podtržítka a znak $
Prvý znak názvu nesmie byť číslo
Veľké a malé písmená sú považované za rozdielne
*Môže obsahovať diakritiku a dokonca emoji, ale zostaňte radšej pri anglickej abecede
Vytvorte novú funkciu nazvanú dvojKrok, v ktorej bude Karel robiť dva kroky dopredu.
Použite novú funkciu v už hotovom kóde.
function otocDolava() {
otocDoprava();
otocDoprava();
otocDoprava();
}
function dvojKrok() {
krokDopredu();
krokDopredu();
}
dvojKrok();
polozZnacku();
otocDoprava();
dvojKrok();
otocDoprava();
dvojKrok();
polozZnacku();
otocDolava();
dvojKrok();
otocDolava();
dvojKrok();
polozZnacku();
Zabaľte doterajší výkonný kód do novej funkcie nazvanej prikladUvod
Funkciu dajte vykonať vo vnútri EventListeneru
function prikladUvod() {
dvojKrok();
/* zvyšok kódu */
polozZnacku();
}
document.addEventListener("DOMContentLoaded", function (event) {
prikladUvod();
});
Vytvorte novú funkciu prikladOpakovanie
Funkciu dajte vykonať vo vnútri EventListeneru
a zakomentujte alebo zmažte vykonávanie prikladUvod
function prikladUvod() {
/* kód úvodného príkladu */
}
function prikladOpakovanie() {
}
document.addEventListener("DOMContentLoaded", function (event) {
prikladOpakovanie();
});
Prikážte Karlovi, aby poukladal značky v celom prvom stĺpci
function prikladOpakovanie() {
polozZnacku();
krokDopredu();
polozZnacku();
krokDopredu();
polozZnacku();
krokDopredu();
polozZnacku();
krokDopredu();
polozZnacku();
krokDopredu();
polozZnacku();
krokDopredu();
polozZnacku();
krokDopredu();
polozZnacku();
krokDopredu();
polozZnacku();
krokDopredu();
polozZnacku();
krokDopredu();
polozZnacku();
krokDopredu();
polozZnacku();
krokDopredu();
polozZnacku();
krokDopredu();
polozZnacku();
krokDopredu();
polozZnacku();
krokDopredu();
polozZnacku();
krokDopredu();
polozZnacku();
krokDopredu();
polozZnacku();
krokDopredu();
polozZnacku();
krokDopredu();
polozZnacku();
krokDopredu();
}
Ako to zjednodušiť?
while (vstupnáPodmienka) {
/*
telo cyklu
*/
}
Keď sa vstupná podmienka vyhodnotí ako pravdivá (true), tak sa vstúpi do tela cyklu.
Inak sa celé telo preskočí.
Ak sa vstúpilo do tela cyklu, tak po jeho vykonaní sa opäť testuje vstupná podmienka.
Jednému prechodu telom sa hovorí iterácia
while (nie je pred Karlom stena) {
polozZnacku();
krokDopredu();
}
Ale ako zistíme, či je pred Karlom stena?
Spýtame sa ho :)
Vráti true, ak je pred Karlom stena.
Inak vráti false
Vráti true, ak Karel stojí na značke.
Inak vráti false
Ale my potrebujeme vykonať telo vtedy, keď
Operátor ! neguje výsledok výrazu, ktorý nasleduje po ňom.
true mení na false
false mení na true
!výraz
! výraz
Upravte funkciu prikladOpakovanie tak, aby využíval cyklus.
function prikladOpakovanie() {
while (!jePredTebouStena()) {
polozZnacku();
krokDopredu();
}
polozZnacku();
}
Krabička, ktorá má svoj názov
a do ktorej si viete uložiť nejakú hodnotu
var nazov = 'hodnota';
boolean | var nazov = true; var nazov = false; |
celé číslo | var nazov = 42; |
desatinné číslo | var nazov = 4.2; |
reťazec (text) | var nazov = 'Lorem Ipsum'; var nazov = "Lorem Ipsum"; |
Názov premenná znamená, že hodnota sa môže meniť
nazov = 'nová hodnota';
Pri zmene už nepotrebujeme použiť var
Do premennej nemusíme vkladať iba presnú hodnotu, ale dá sa aj výsledok výrazu
var x = 4 + 3;
var y = x + 6 - 2;
var z = x - y;
Aritmetické | príklad | výsledok |
---|---|---|
+ | x = 1 + 2; | 3 |
- | x = 5 - 3; | 2 |
* | x = 5 * 4; | 20 |
/ | x = 20 / 5; | 4 |
% | x = 22 % 5; | 2 |
Aritmetické | príklad | výsledok |
---|---|---|
postfixové ++ | x = 5; y = x++; |
x === 6 y === 5 |
prefixové ++ | x = 5; y = x++; |
x === 6 y === 6 |
postfixové -- | x = 5; y = x--; |
x === 4 y === 5 |
prefixové -- | x = 5; y = --x; |
x === 4 y === 4 |
unárne + | x = +5; | 5 |
unárne - | x = -5; | -5 |
Spájanie reťazcov | príklad |
---|---|
+ | x = 'hello'; y = 'world; z = x + ' ' + y; |
Urobte novú funkciu prikladPremenne,
v ktorej Karel zráta počet políčok v stĺpci
Nakoniec tento počet pomocou console.log vypíše
V konzole očakávam text:
Počet políčok v stĺpci je N
var pocetPolicok = 1;
while (!jePredTebouStena()) {
krokDopredu();
pocetPolicok++;
/*
pocetPolicok = pocetPolicok + 1;
*/
}
console.log('Počet políčok v stĺpci je ' + pocetPolicok);
Pomocou cyklu while a premennej urobte funkciu, kde Karel vykreslí "čiaru" dlhú 5 políčok.
function ciaraDlzky5() {
var dlzka = 5;
var prejdene = 0;
while (prejdene < dlzka) {
krokDopredu();
polozZnacku();
prejdene = prejdene + 1;
}
}
Porovnávacie operátory
* lepšie nepoužívať
function ciaraDlzky5() {
var trebaPrejst = 5;
while (trebaPrejst) {
krokDopredu();
polozZnacku();
trebaPrejst--;
}
}
function ciaraDlzky5() {
var trebaPrejst = 5;
while (trebaPrejst--) {
krokDopredu();
polozZnacku();
}
}
Urobte funkcie na vykreslenie čiary dĺžky 3, 7 a 10
Nedalo by sa urobiť iba jedna funkcia a jej povedať, ako dlhá má byť čiara?
Argument je premenná, ktorá je deklarovaná priamo v hlavičke funkcie.
Hodnota argumentu sa definuje až v čase zavolania
function priklad(foo, bar) {
console.log(foo);
console.log(bar);
}
priklad('ahoj', 7);
priklad(3, 4);
Napíšte funkciu pre nakreslenie čiary ľubovoľnej dĺžky.
function nakresliCiaru(dlzka) {
var nakreslenych = 0;
while (nakreslenych < dlzka) {
polozZnacku();
krokDopredu();
nakreslenych = nakreslenych + 1;
}
}
Čo ak narazíme do steny?
if (podmienka) {
/* kód pri splnení podmienky */
}
if (podmienka) {
/* kód pri splnení podmienky */
} else {
/* kód pri nesplnení podmienky */
}
if (podmienka) {
/* kód pri splnení podmienky */
} else if (iná podmienka) {
/* kód pri splnení inej podmienky */
} else {
/* kód pri nesplnení podmienky */
}
A | B | A && B |
---|---|---|
true | true | true |
true | false | false |
false | true | false |
false | false | false |
A | B | A || B |
---|---|---|
true | true | true |
true | false | true |
false | true | true |
false | false | false |
while (
(!jePredTebouStena())
&& (nakreslenych < dlzka)
) {
/* ... */
}
while (podmienka && podmienka2) {
// ...
}
Príkaz break
Príkaz continue
Ukončí vykonávanie cyklu a preskočí hneď za uzatváraciu zátvorku tela cyklu.
Ukončí vykonávanie cyklu a skočí opäť na vstupnú podmienku.
while (podmienka) {
// ...
break;
// ...
}
// ... tu sa pokračuje
while (podmienka) { // návrat sem
// ...
continue;
// ...
}
Napíšte funkciu pre nakreslenie čiary ľubovoľnej dĺžky, ale pri hroziacom náraze do steny ďalšie kresleni prerušíme
function nakresliCiaru(dlzka) {
var nakreslenych = 0;
while (nakreslenych < dlzka) {
polozZnacku();
nakreslenych = nakreslenych + 1;
if (jePredTebouStena()) {
break;
}
krokDopredu();
}
}
Napíšte funkciu pre nakreslenie obrysu štvorca so stranou ľubovoľnej dĺžky
function nakresliStvorec(dlzka) {
var ostavaStran = 4;
while (ostavaStran--) {
nakresliCiaru(dlzka - 1);
otocDoprava();
}
}
Napíšeme funkciu opakuj, ktorá daný početkrát zopakuje danú operáciu
function opakuj(kolkokrat, operacia) {
while (kolkokrat--) {
operacia();
}
}
opakuj(5, krokDopredu);
Ako callback vieme použiť aj anonymnú funkciu
opakuj(5, function () {
polozZnacku();
krokDopredu();
});
Nakreslíme okno
opakuj(5, krokDopredu);
otocDoprava();
opakuj(6, krokDopredu);
opakuj(4, function () {
nakresliStvorec(5);
otocDolava();
krokDopredu();
});