Mikuláš je tu! Získaj 90 % extra kreditov ZADARMO s promo kódom CERTIK90 pri nákupe od 1 199 kreditov. Len do nedele 7. 12. 2025! Zisti viac:
NOVINKA: Najžiadanejšie rekvalifikačné kurzy teraz s 50% zľavou + kurz AI ZADARMO. Nečakaj, táto ponuka dlho nevydrží! Zisti viac:

Diskusia – 15. diel - Funkcie v JavaScripte

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Posledné komentáre sú na spodnej časti poslednej stránky.
Avatar
Cyborg
Člen
Avatar
Odpovedá na Petr Šťastný
Cyborg:27.2.2016 21:58

Zdravím :)
Hned na úvod musím říct, že tvůj způsob vyřešení programu za pomocí přepínače (switche) je velice špatná cesta, která směřuje rovnou do pekel :D. Osobně si myslím, že by to ani za pomocí přepínače udělat nešlo, neboť tohle už je trochu složitější program a je potřeba využít více než přepínač. Pokud o to máš pořád zájem, přikládám zde mé řešení :)

http://www.itnetwork.cz/dev-lighter/680

PS: Hádanka se změní jen při opětovném načtení. To je věc, která by chtěla vylepšit, ale jinak by to mělo fungovat :)

Editované
Avatar
Pluhtík
Člen
Avatar
Pluhtík:15.7.2016 0:48

Zdravím :) opět já, tak jako každou lekci poslední hodiny. A překvapivě mám další "pitomý" dotaz :D

Trošku jsem si mám problémy s callbackem, tedy s jeho pochopením. Nejdříve jsem měl tohle (většinou okopírované z webu).

var promena_s_funkci = function gutentag(dername)
{
  document.write("Vítám Tě na svém JavaScript webu, " + dername +"! <br />");
}

function zavolej_funkci(funkce, dername)
{
document.write("Jsem funkce a volám funkci, která mi přišla do parametru v proměnné. <br />");
document.write("Jako parametr jí dám jmeno, které mi přišlo jako 2. parametr. <br />");
funkce(dername);
}
zavolej_funkci(promena_s_funkci, "Pluhtíku");

Nechápal jsem ale, k čemu slouží řádek funkce(dername);. Jelikož už dvakrát jsem napsal dotaz a během patnácti minut přemýšlení jsem sám přišel na odpověď, tak jsem nad tím zkoušel přemýšlet a zkoušet to jinak. Potom mě napadlo, že vlastně na posledním řádku by promena_s_funkci a následné "Pluhtíku" mělo být v závorce, a že možná ten řádek funkce(dername); to nějakým způsobem zajišťuje, aby to tak být nemuselo. Tak jsem to zkusil odstranit a udělat s tou závorkou (viz níže).

var promena_s_funkci = function gutentag(dername)
{
  document.write("Vítám Tě na svém JavaScript webu, " + dername +"! <br />");
}

function zavolej_funkci(funkce, dername)
{
document.write("Jsem funkce a volám funkci, která mi přišla do parametru v proměnné. <br />");
document.write("Jako parametr jí dám jmeno, které mi přišlo jako 2. parametr. <br />");

}
zavolej_funkci(promena_s_funkci("Pluhtíku"));

To mi sice fungovalo, ovšem slova "Vítám Tě na svém JavaScript webu, Pluhtíku!" se dala úplně na začátek ještě před

document.write("Jsem funkce a volám funkci, která mi přišla do parametru v proměnné. <br />");
document.write("Jako parametr jí dám jmeno, které mi přišlo jako 2. parametr. <br />");

Může mi tedy někdo vysvětlit, k čemu tedy řádek funkce(dername); slouží a co přesně dělá? Díky moc :)

Avatar
Odpovedá na Pluhtík
Libor Šimo (libcosenior):15.7.2016 6:04

Mam dojem, ze necitas lekcie poriadne, ale len skusas kod.
Precitaj si lekciu aj viac krat, su tam odpovede na tvoje otazky.

Odpovedať
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
00
Člen
Avatar
Odpovedá na Pluhtík
00:15.7.2016 7:34

Ten 1. tvůj kód ukládá funkci gutentag do proměnné a volá ji, 2. bez smazaneho funkce(dername); ji zavolá a snaží se zavolat její návratovou hodnotu. A bez něj? Nesmyslně a zbytečně předává návratovou hodnotu jako parametr.

Avatar
Odpovedá na Pluhtík
Libor Šimo (libcosenior):15.7.2016 8:05

Pokúsim sa ti to vysvetliť prakticky.
Čo je to funkcia v JS je napísané v prvom odseku článku.
Funkciu v normálnom živote má napríklad elektrická rúra na pečenie.
Nazveme ju pecenie.

// JavaScript
var pecenie = function() {
    document.write("Pečiem...");
}

(volanie funkcie je popísané v lekcii)
Každý, ktomá doma elektrickú rúru na pečenie môže použiť funkciu pecenie().
Lenže to nie je všetko.

  • čo idem piecť?
  • na akej teplote?
  • aký dlhý čas?
  • len zhora?
  • len zdola?
  • zhora aj zdola?
  • teplovzduchom?

To všetko sú meniteľné premenné pečenia.
Upravme si funkciu.
(pridal som aj popis funkcie, kde @param je vstupný parameter a @return výstupný parameter funkcie)

/**
 * Funkcia demonštruje pečenie v elektrickej rúre
 * @param produkt (čo pečieme)
 * @param teplota (teplota pečenia)
 * @param trvanie (čas pečenia)
 * @param sposob (zhora, zdola, zhora aj zdola, teplovzduchom)
 * @return výpis činnosti pečenia
 */
var pecenie = function(produkt, teplota, trvanie, sposob) {
    document.write("Pečiem " + produkt + " na " + teplota + "°C " + trvanie + " minút " + sposob + ".");
}

Zavoláme funkciu

document.write(pecenie("bábovku", 200, 45, "teplovzduchom"));

Výsledok
Pečiem bábovku na 200°C 45 minút teplovzduchom.

Dúfam, že si to pochopil.

Odpovedať
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Libor Šimo (libcosenior):15.7.2016 8:09

Malá oprava, v popise mám @return a vo funkcii nie.

var pecenie = function(produkt, teplota, trvanie, sposob) {
    return "Pečiem " + produkt + " na " + teplota + "°C " + trvanie + " minút " + sposob + ".";
}

Volanie

document.write(pecenie("bábovku", 200, 45, "teplovzduchom"));
Odpovedať
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Pluhtík
Člen
Avatar
Pluhtík:15.7.2016 11:59

Chápu všechno, co jsi napsal. Přesto pořád nevím, k čemu slouží ten řádek v mém kódu.

funkce(dername);

Jediné, co mě napadá je, že nějakým způsobem v podstatě přemisťuje parametr dername, který je obsažen v obou mých funkcích, do té druhé, aby se jméno nemuselo psát ještě do dalších kulatých závorek.
Druhý tip je, že funkce vypíšu funkci (tím myslím parametr nazvaný "funkce"), ke kterému přiřadíme jen jméno.

Avatar
Odpovedá na Pluhtík
Neaktivní uživatel:15.7.2016 13:14

Víš o tom, že v JS je možný vzít funkci a poslat jí do jiné funkce jako parametr?

Považ něco jako:

function pozdrav(jmenoCloveka) {
        alert("nazdar " + jmenoCloveka);
}

function sezerFunkciAZavolejJi(funkceNaZavolani, dataNaPoslani) {
        funkceNaZavolani(dataNaPoslani);
}

// a ted se to cele spusti
sezerFunkciAZavolejJi(pozdrav, "Karle!");

O co jde? Pošleš funkci pozdrav nějaké jiné funkci, ta jí obdrží a obdrží také data, no a pak už jen připojením kulatých závorek onu funkci zavoláš. Tohle je velká síla JS, stojí to za to pořádně probádat a porozumět tomu.

Kdyžtak se ptej.

Odpovedať
Neaktivní uživatelský účet
Avatar
Pluhtík
Člen
Avatar
Odpovedá na Neaktivní uživatel
Pluhtík:15.7.2016 13:39

Děkuji :) nevěděl jsem to, ale je to logické, takže nemůžu říct, že by mě to překvapilo. Ze všech odpovědí mi ta tvá zatím pomohla nejvíce.
Takže

funkceNaZavolani(dataNaPoslani);

znamená, že funkceNaZavolani, tedy funkce, kterou si "zavoláš", obsahuje parametr dataNaPoslani. V tomto případě funkce pozdrav obsahuje parametr jmenoCloveka, které, abys nemusel vypisovat v následném spuštění (viz níže) dvakrát, v podstatě přeměníš na dataNaPoslani. Kdyby tam ten řádek (viz výše nebyl), tak poslední řádek by musel být takto:

sezerFunkciAZavolejJi(pozdrav("Karle!"), "Karle!");

Mám pravdu?

Odpověď na mou otázku, proč je nezbytné mít napsané v kódu také

funkce(dername);

je ta, že kdybych to neměl, tak by celá má funkce musela vypadat takto?

var promena_s_funkci = function gutentag(dername)
{
  document.write("Vítám Tě na svém JavaScript webu, " + dername +"! <br />");
}

function zavolej_funkci(funkce, dername)
{
document.write("Jsem funkce a volám funkci, která mi přišla do parametru v proměnné. <br />");
document.write("Jako parametr jí dám jmeno, které mi přišlo jako 2. parametr. <br />");
}
zavolej_funkci(promena_s_funkci("Pluhtíku!"), "Pluhtíku");

edit. vyzkošoušeno, funkce, kterou jsem napsal úplně dole tady funguje, ovšem s tím rozdílem, že výsledek je tento:
Vítám Tě na svém JavaScript webu, Pluhtíku!!
Jsem funkce a volám funkci, která mi přišla do parametru v proměnné.
Jako parametr jí dám jmeno, které mi přišlo jako 2. parametr.
Tzn., že to, co měl být poslední řádek je první.

Editované
Avatar
Odpovedá na Pluhtík
Libor Šimo (libcosenior):16.7.2016 8:20

S tym rozdielom, ze druhy vstupny parameter je zbytocny ako vo funkcii zavolej_funkci(), tak aj pri volani tej funkcie. Ziadna cast kodu ho nepouziva.

Odpovedať
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Posledné komentáre sú na spodnej časti poslednej stránky.
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zobrazené 10 správy z 75.