Základy programovania v JavaScripte

Príklady na precvičovanie

  • anonymné funkcie

Milan Herda, 05/2020

Príklady rob v úplne novom súbore a spúšťaj si ich pomocou terminálu

Týmto príkazom v termináli spustíš JS súbor:

node názov-suboru.js

Nezabudni, že v termináli musíš byť v správnom priečinku alebo uviesť celú cestu k súboru a nielen názov

Najjednoduchšie bude, keď si terminál otvoríš vo vnútri VS Code cez menu "Terminal > New Terminal"

  • vytvor anonymnú funkciu
  • do konzoly vypíše text "foo"
  • funkciu ulož do premennej foo
  • daj funkciu vykonať

Zadanie 1

  • vytvor anonymnú funkciu
  • do konzoly vypíše text "foo"
  • funkciu ulož do premennej foo
  • daj funkciu vykonať

Riešenie 1

// vytvor anonymnú funkciu
function () {
}
// vytvor anonymnú funkciu
// do konzoly vypíše text "foo"
function () {
    console.log('foo');
}
// vytvor anonymnú funkciu
// do konzoly vypíše text "foo"
// funkciu ulož do premennej foo
const foo = function () {
    console.log('foo');
}; // všimni si pribudnutú bodkočiarku
// vytvor anonymnú funkciu
// do konzoly vypíše text "foo"
// funkciu ulož do premennej foo
// daj funkciu vykonať
const foo = function () {
    console.log('foo');
};

foo();
  • vytvor anonymnú funkciu
  • do konzoly vypíše text "bar"
  • funkciu neukladaj do žiadnej premennej
  • daj funkciu vykonať

Zadanie 2

  • vytvor anonymnú funkciu
  • do konzoly vypíše text "bar"
  • funkciu neukladaj do žiadnej premennej
  • daj funkciu vykonať

Riešenie 2

// vytvor anonymnú funkciu
function () {
}
// vytvor anonymnú funkciu
// do konzoly vypíše text "bar"
function () {
    console.log('bar');
}
// vytvor anonymnú funkciu
// do konzoly vypíše text "foo"
// funkciu neukladaj do žiadnej premennej
function () {
    console.log('bar');
}
// vytvor anonymnú funkciu
// do konzoly vypíše text "foo"
// funkciu neukladaj do žiadnej premennej
// daj funkciu vykonať
(function () {
    console.log('foo');
})();

/*
 * Toto je pokročilejšia vec a hovorí sa jej
 * IIFE:
 * Immediately Invoked Function Expression
 * Použitie: vykonanie kódu bez toho, aby
 * do aktuálneho rozsahu platnosti pribudli nové premenné
 * z vnútra funkcie.
 */

Zadanie 3

  • Vytvor anonymnú funkciu a ulož ju do premennej foobar
  • Funkcia dostane jeden argument, ktorým bude číslo
  • ak bude číslo párne, vráti jeho tretiu mocninu
  • ak nebude párne, vráti číslo samotné

Riešenie 3

  • Vytvor anonymnú funkciu a ulož ju do premennej foobar
  • Funkcia dostane jeden argument, ktorým bude číslo
  • ak bude číslo párne, vráti jeho tretiu mocninu
  • ak nebude párne, vráti číslo samotné
const jeParne = function (cislo) {
    return ((cislo % 2) === 0);  
};

const foobar = function (cislo) {
    if (jeParne(cislo)) {
        return cislo * cislo * cislo;
    }
  
    return cislo;
};

Zadanie 4

  • Vytvor funkciu "generujCisla"
  • Funkcia má dva argumenty "min" a "max"
  • Funkcia bude generovať čísla v zadanom rozsahu (podľa argumentov)
  • Pre každé číslo sa do konzoly vypíše: "vygenerovane cislo: X", kde X bude nahradené vygenerovaným číslom
  • Vyskúšajte si funkciu spustiť s rôznymi argumentami
  • Zabezpečte, aby sa čísla negenerovali, ak argument "max" je menší ako "min"

Riešenie 4

  • Vytvor funkciu "generujCisla"
  • Funkcia má dva argumenty "min" a "max"
  • Funkcia bude generovať čísla v zadanom rozsahu (podľa argumentov)
  • Pre každé číslo sa do konzoly vypíše: "vygenerovane cislo: X", kde X bude nahradené vygenerovaným číslom
  • Vyskúšajte si funkciu spustiť s rôznymi argumentami
  • Zabezpečte, aby sa čísla negenerovali, ak argument "max" je menší ako "min"
const generujCisla = function(min, max) {
    let vygenerovane = min;
  
    while (vygenerovane <= max) {
        console.log('Vygenerované číslo: ' + vygenerovane);
        vygenerovane = vygenerovane + 1;
    }
};

generujCisla(1, 10);
generujCisla(123, 132);
generujCisla(-40, -35);
generujCisla(50, 40);

Riešenie 4, pomocou cyklu for

  • Vytvor funkciu "generujCisla"
  • Funkcia má dva argumenty "min" a "max"
  • Funkcia bude generovať čísla v zadanom rozsahu (podľa argumentov)
  • Pre každé číslo sa do konzoly vypíše: "vygenerovane cislo: X", kde X bude nahradené vygenerovaným číslom
  • Vyskúšajte si funkciu spustiť s rôznymi argumentami
  • Zabezpečte, aby sa čísla negenerovali, ak argument "max" je menší ako "min"
const generujCisla = function(min, max) {
    for (let i = min; i <= max; i = i + 1) {
        console.log('Vygenerované číslo: ' + i);
    }
};

generujCisla(1, 10);
generujCisla(123, 132);
generujCisla(-40, -35);
generujCisla(50, 40);

Zadanie 5

  • pridajte funkcii "generujCisla" tretí argument nazvaný "modifikator"
  • očakávame, že "modifikator" bude funkcia s jedným argumentov
  • pre každé vygenerované číslo zavoláme modifikátor
  • výpis do konzoly sa upraví na: "Vygenerované číslo: X, modifikované: Y"
  • do volaní funkcie ako tretí argument pridaj funkciu "foobar" z tretej úlohy

Riešenie 5

  • pridajte funkcii "generujCisla" tretí argument nazvaný "modifikator"
  • očakávame, že "modifikator" bude funkcia s jedným argumentov
  • pre každé vygenerované číslo zavoláme modifikátor
  • výpis do konzoly sa upraví na: "Vygenerované číslo: X, modifikované: Y"
  • do volaní funkcie ako tretí argument pridaj funkciu "foobar" z tretej úlohy
const generujCisla = function(min, max, modifikator) {
    for (let i = min; i <= max; i = i + 1) {
        let text = 'Vygenerované číslo: ' + i;
        text = text + ', modifikované: ' + modifikator(i);
      
        console.log(text);
    }
};

generujCisla(1, 10, foobar);
generujCisla(123, 132, foobar);
generujCisla(-40, -35, foobar);
generujCisla(50, 40, foobar);

Zadanie 6

  • vytvor funkciu dajModifikátor
  • táto funkcia vráti funkciu, ktorá očakáva jeden argument a vráti jeho druhú mocninu
  • zavolajte dajModifikator a výsledok použite ako modifikátor pre "generujCisla"

Riešenie 6

  • vytvor funkciu dajModifikátor
  • táto funkcia vráti funkciu, ktorá očakáva jeden argument a vráti jeho druhú mocninu
  • zavolajte dajModifikator a výsledok použite ako modifikátor pre "generujCisla"
const druhaMocnina = function (cislo) {
    return cislo * cislo;
};

const dajModifikator = function () {
    return druhaMocnina;
};

const modifikator = dajModifikator();
generujeCisla(10, 20, modifikator);
const dajModifikator = function () {
    const druhaMocnina = function (cislo) {
        return cislo * cislo;
    };

    return druhaMocnina;
};

const modifikator = dajModifikator();
generujeCisla(10, 20, modifikator);
const dajModifikator = function () {
    return function (cislo) {
        return cislo * cislo;
    };
};

const modifikator = dajModifikator();
generujeCisla(10, 20, modifikator);

Zadanie 7

  • vytvor funkciu vytvorPripocitavadlo
  • táto funkcia vráti funkciu, ktorá očakáva jeden argument, pripočíta k nemu číslo 2
  • zavolajte vytvorPripocitavadlo a výsledok použite ako modifikátor pre "generujCisla"

Riešenie 7

  • vytvor funkciu vytvorPripocitavadlo
  • táto funkcia vráti funkciu, ktorá očakáva jeden argument, pripočíta k nemu číslo 2
  • zavolajte vytvorPripocitavadlo a výsledok použite ako modifikátor pre "generujCisla"
const vytvorPripocitavadlo = function () {
    return function (cislo) {
        return cislo + 2;
    };
};

const pripocitavadlo = vytvorPripocitavadlo();

console.log(pripocitavadlo(1)); // vypíše 3

generujCisla(10, 20, pripocitavadlo);

Zadanie 8

  • uprav funkciu vytvorPripocitavadlo
  • pridaj argument nazvaný napr. x
  • následne uprav funkciu, ktorá sa z vytvorPripocitavadlo vracia a to tak, aby namiesto pripočítavania 2, pripočítavala x
  • zavolaj vytvorPripocitavadlo a následne zavolaj vrátenú funkciu
  • použi vrátenú funkciu ako modifikátor pre "generujCisla"

Riešenie 8

  • uprav funkciu vytvorPripocitavadlo
  • pridaj argument nazvaný napr. x
  • následne uprav funkciu, ktorá sa z vytvorPripocitavadlo vracia a to tak, aby namiesto pripočítavania 2, pripočítavala x
  • zavolaj vytvorPripocitavadlo a následne zavolaj vrátenú funkciu
  • použi vrátenú funkciu ako modifikátor pre "generujCisla"
const vytvorPripocitavadlo = function (x) {
    return function (cislo) {
        return cislo + x;
    };
};

const pripocitavadlo = vytvorPripocitavadlo(5);

console.log(
    pripocitavadlo(1)
); // vypíše 6

generujCisla(10, 20, pripocitavadlo);