Programovanie v JavaScripte,
časť 2
Pre úplných začiatočníkov
História
- Netscape
- Prvá vojna browserov
- 5/1995 - prototyp jazyka Mocha/LiveScript hotový za 10 dní
- 9/1995 - premenovaný na JavaScript a vložený do Netscape Navigator 2
- 1996 - JScript v Internet Explorer 3
- 6/1997 - ECMAScript
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ť
Úvod do programovania
Počítač neurobí to, čo chceš.
Urobí to, čo mu povieš.
Presnosť
Programovací jazyk nie je ako prirodzený jazyk.
Vyjadrovať sa treba presne.
Syntax treba dodržiavať na 100%
99.9% nie je good enough.
Hello World
<!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>
Algoritmus
Predpísané poradie krokov, ktoré sú potrebné na splnenie úlohy.
Recept
Ale v prípade programovania super presný.
Algoritmizácia
Rozloženie problému na menšie časti (a ich popísanie algoritmom)
- Z vajec, múky a cukru upečieme piškótové cesto
- Uvaríme plnku zo zlatého klasu, mlieka, cukru a múky
- Cesto prekrojíme, stred naplníme plnkou s jahodami
- Okraje potrieme plnkou
- Na vrch torty natrieme lekvár, oukladáme jahody a zalejeme želé
Upečieme jahodovú tortu
Robot Karel
Robot Karel
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é.
Robot Karel
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();
Úloha:
Prikážte Karlovi, aby sa pohol o 2 políčka dopredu.
krokDopredu();
krokDopredu();
A otočí sa doprava
otocDoprava();
Nech položí značku
polozZnacku();
Pokračovanie úlohy:
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
Výsledok:
Krajší Karel:
Pokračovanie
Otočíme Karla doľava
Karel nepozná príkaz pre otočenie doľava
otocDoprava();
otocDoprava();
otocDoprava();
Pokračovanie
Ď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();
}
Funkcia
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()
Funkcia
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
Úloha
Vytvorte novú funkciu nazvanú dvojKrok, v ktorej bude Karel robiť dva kroky dopredu.
Použite novú funkciu v už hotovom kóde.
Riešenie
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();
});
Opakované vykonávanie
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ť?
Cyklus
-
while
-
do...while
-
for
-
for...in
-
for...of
Cyklus while
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
Cyklus while
while (nie je pred Karlom stena) {
polozZnacku();
krokDopredu();
}
Ale ako zistíme, či je pred Karlom stena?
Spýtame sa ho :)
Dva "tajné" príkazy, ktoré Karel pozná:
jePredTebouStena()
Vráti true, ak je pred Karlom stena.
Inak vráti false
stojisNaZnacke()
Vráti true, ak Karel stojí na značke.
Inak vráti false
jePredTebouStena()
Ale my potrebujeme vykonať telo vtedy, keď
NIE JE pred Karlom stena
!
Operátor !
Operátor !
Operátor ! neguje výsledok výrazu, ktorý nasleduje po ňom.
true mení na false
false mení na true
!výraz
! výraz
Zadanie
Upravte funkciu prikladOpakovanie tak, aby využíval cyklus.
function prikladOpakovanie() {
while (!jePredTebouStena()) {
polozZnacku();
krokDopredu();
}
polozZnacku();
}
Premenné
Premenná
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"; |
Premenná
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;
Operátory
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 |
Operátory
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 |
Operátory
Spájanie reťazcov | príklad |
---|---|
+ | x = 'hello'; y = 'world; z = x + ' ' + y; |
Úloha
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
Riešenie
var pocetPolicok = 1;
while (!jePredTebouStena()) {
krokDopredu();
pocetPolicok++;
/*
pocetPolicok = pocetPolicok + 1;
*/
}
console.log('Počet políčok v stĺpci je ' + pocetPolicok);
Úloha
Pomocou cyklu while a premennej urobte funkciu, kde Karel vykreslí "čiaru" dlhú 5 políčok.
Pomôcky
- Vo while podmienke vieme tiež používať výrazy
- porovnanie je výraz, ktorého výsledok je true alebo false
function ciaraDlzky5() {
var dlzka = 5;
var prejdene = 0;
while (prejdene < dlzka) {
krokDopredu();
polozZnacku();
prejdene = prejdene + 1;
}
}
Porovnávacie operátory
- ===
- !==
- <
- >
- <=
- >=
- ==
- !=
* lepšie nepoužívať
Pomôcky
- Vo while podmienke vieme tiež používať výrazy
- 0 je v boolovských výrazoch to isté ako false
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?
Argumenty
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.
Úloha
function nakresliCiaru(dlzka) {
var nakreslenych = 0;
while (nakreslenych < dlzka) {
polozZnacku();
krokDopredu();
nakreslenych = nakreslenych + 1;
}
}
Čo ak narazíme do steny?
Podmienky
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 */
}
Operátory && a ||
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) {
// ...
}
Predčasné prerušenie tela cyklu
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
Úloha
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
Úloha
function nakresliStvorec(dlzka) {
var ostavaStran = 4;
while (ostavaStran--) {
nakresliCiaru(dlzka - 1);
otocDoprava();
}
}
Callback
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();
});
Základy programovania
DONE!
Programovanie v Javascripte, časť 2
By Milan Herda
Programovanie v Javascripte, časť 2
- 618