Milan Herda, 03/2020
Lekcia 6
Naprogramujte funkciu, ktorá zistí, či je naľavo od Karla stena.
Pred a po spustení bude Karel otočený rovnako a jeho pozícia bude nezmenená.
function jeStenaVlavo() {
otocDolava();
const jeStena = jePredTebouStena();
otocDoprava();
return jeStena;
}
Upravte funkciu tak, aby išlo o deklaráciu anonymnej funkcie uloženej do premennej.
const jeStenaVlavo = function () {
otocDolava();
const jeStena = jePredTebouStena();
otocDoprava();
return jeStena;
};
Urobte funkciu akyJeDalsiSmerVlavo:
Príklad:
Keď pozerám na sever, tak po otočení by som smeroval na západ. Vrátime západ
Obyčajný string
'sever'
'juh'
'východ'
'západ'
const akyJeDalsiSmerVlavo = function (terajsiSmer) {
};
const akyJeDalsiSmerVlavo = function (terajsiSmer) {
if (terajsiSmer === 'sever') {
return 'západ';
}
};
const akyJeDalsiSmerVlavo = function (terajsiSmer) {
if (terajsiSmer === 'sever') {
return 'západ';
} else if (terajsiSmer === 'západ') {
return 'juh';
} else if (terajsiSmer === 'juh') {
return 'východ';
} else {
return 'sever';
}
};
const akyJeDalsiSmerVlavo = function (terajsiSmer) {
if (terajsiSmer === 'sever') {
return 'západ';
}
if (terajsiSmer === 'západ') {
return 'juh';
}
if (terajsiSmer === 'juh') {
return 'východ';
}
return 'sever';
};
console.log(
akyJeDalsiSmerVlavo('sever')
);
const dalsiSmer = akyJeDalsiSmerVlavo('juh');
console.log(dalsiSmer);
"Programátori si zaslúžia istoty"
const SEVER = 'sever';
const JUH = 'juh';
const ZAPAD = 'západ';
const VYCHOD = 'východ';
Zvolíme zodpovednejší spôsob reprezentácie smeru:
const akyJeDalsiSmerVlavo = function (terajsiSmer) {
if (terajsiSmer === SEVER) {
return ZAPAD;
}
if (terajsiSmer === ZAPAD) {
return JUH;
}
if (terajsiSmer === JUH) {
return VYCHOD;
}
return SEVER;
};
console.log(
akyJeDalsiSmerVlavo(SEVER)
);
const dalsiSmer = akyJeDalsiSmerVlavo(JUH);
console.log(dalsiSmer);
const akyJeDalsiSmerVpravo = function (terajsiSmer) {
if (terajsiSmer === SEVER) {
return VYCHOD;
}
if (terajsiSmer === VYCHOD) {
return JUH;
}
if (terajsiSmer === JUH) {
return ZAPAD;
}
return SEVER;
};
Naprogramujte funkciu akyJeDalsiSmerVpravo
Typ premennej, v ktorá v sebe obsahuje skupinu primitívnych a/alebo zložených hodnôt.
Každej jednotlivej časti hovoríme "vlastnosť" alebo "property"
Každá vlastnosť má svoje meno a hodnotu.
const prazdnyObjekt = {};
const fero = {
vek: 45,
vyska: 183,
adresa: {
ulica: 'Farská 42',
obec: 'Nitra',
},
};
K vlastnostiam sa zvonka objektu pristupuje pomocou tzv. bodkovej notácie
const fero = {
vek: 45,
vyska: 183,
adresa: {
ulica: 'Farská 42',
obec: 'Nitra'
}
};
console.log(fero.vek);
fero.vek = 50;
console.log(fero.vek);
console.log(
fero.adresa.obec
);
fero.vaha = 75;
Ako to, že je to const a môžeme meniť hodnoty?
Samotné const zakazuje iba urobiť nové priradenie do premennej.
const fero = {vek: 12};
fero = {vek: 45};
Nezakazuje meniť hodnotu vnútorných vlastností.
Okrem bodkovej notácie viete k prvkom pristúpiť aj pomocou hranatých zátvoriek [ a ]
console.log(fero['vek']);
fero['vek'] = 50;
console.log(fero['vek']);
console.log(
fero['adresa']['obec']
);
fero['vaha'] = 75;
console.log(fero.vek);
fero.vek = 50;
console.log(fero.vek);
console.log(
fero.adresa.obec
);
fero.vaha = 75;
Vytvorte objekt, ktorý predstavuje mapu, kde Karel kreslí. Objekt bude mať dve vlastnosti reprezentujúce šírku a výšku
const mapa = {
sirka: 20,
vyska: 20,
};
Vytvorte objekt, ktorý predstavuje Karla. Aké vlastnosti mu môžeme dať?
const karel = {
riadok: 19,
stlpec: 0,
smer: 'sever',
};
const SEVER = 'sever';
const JUH = 'juh';
const VYCHOD = 'vychod';
const ZAPAD = 'zapad';
const karel = {
riadok: 19,
stlpec: 0,
smer: SEVER,
};
Do property objektu môže byť uložená rovnaká hodnota, ako aj do premennej.
Kedže do premennej vieme uložiť aj funkciu, ...
... tak aj do property vieme uložiť funkciu.
Funkcii, ktorá je vlastnosťou objektu, hovoríme metóda
const obj = {
nazovMetody: function () {
// kod metody
},
};
Pridáme Karlovi metódu vpravoVbok, ktorá zmení hodnotu vlastnosti smer.
const karel = {
riadok: 19,
stlpec: 0,
smer: SEVER,
vpravoVbok: function () {
},
};
const karel = {
riadok: 19,
stlpec: 0,
smer: SEVER,
vpravoVbok: function () {
const dalsiSmer = akyJeDalsiSmerVpravo(karel.smer);
karel.smer = dalsiSmer;
},
};
const karel = {
riadok: 19,
stlpec: 0,
smer: SEVER,
vpravoVbok: function () {
karel.smer = akyJeDalsiSmerVpravo(karel.smer);
},
};
Čo ak premenujem premennú karel?
Musím premenovať všetky jej výskyty vo všetkých metódach?
Fungovanie objektu by nemalo byť závislé na tom, ako sa volá premenná, v ktorej je objekt uložený.
Vo vnútri každej funkcie je dostupná špeciálna premenná z názvom this
Ak je funkcia metódou, tak this obsahuje objekt, nad ktorým bola metóda zavolaná.
const karel = {
riadok: 19,
stlpec: 0,
smer: SEVER,
vpravoVbok: function () {
this.smer = akyJeDalsiSmerVpravo(this.smer);
},
};
Urobte metódu vlavoVbok
const karel = {
// doterajší kód
vlavoVbok: function () {
this.smer = akyJeDalsiSmerVlavo(this.smer);
},
};
Do objektu viete pridať property (a to aj metódu)
aj po jeho vytvorení.
const karel = {
// všetok doterajší kód
};
karel.dostalFrancouzak = true;
karel.uzZnaLasku = true;
karel.celomVzad = function () {
// tu môžete používať this
};
const karel = {
// všetok doreajší kód
};
karel.celomVzad = function () {
if (this.smer === SEVER) {
this.smer = JUH;
return;
}
if (this.smer === VYCHOD) {
this.smer = ZAPAD;
return;
}
if (this.smer === JUH) {
this.smer = SEVER;
return;
}
this.smer = VYCHOD;
};