NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze – Lekce 15 - Funkce v JavaScriptu

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
Cyborg
Člen
Avatar
Odpovídá 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 :)

Editováno 27.2.2016 21:59
 
Odpovědět
27.2.2016 21:58
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 :)

 
Odpovědět
15.7.2016 0:48
Avatar
Odpovídá 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.

Odpovědět
15.7.2016 6:04
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
00
Člen
Avatar
Odpovídá 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.

 
Odpovědět
15.7.2016 7:34
Avatar
Odpovídá 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.

Odpovědět
15.7.2016 8:05
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"));
Odpovědět
15.7.2016 8:09
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.

 
Odpovědět
15.7.2016 11:59
Avatar
Odpovídá 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.

Odpovědět
15.7.2016 13:14
Neaktivní uživatelský účet
Avatar
Pluhtík
Člen
Avatar
Odpovídá 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í.

Editováno 15.7.2016 13:41
 
Odpovědět
15.7.2016 13:39
Avatar
Odpovídá 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.

Odpovědět
16.7.2016 8:20
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 75.