1. Učit se
  2. /
  3. Kurzy
  4. /
  5. Efektivní kód v R

Connected

cvičení

Použij && místo &

Pro zjištění, zda padly stejná čísla na všech kostkách, používá funkce move_square() podmínky if.

if (is_double[1] & is_double[2] & is_double[3]) {
    current <- 11 # Go To Jail - square 11 == Jail
}

Operátor & vždy vyhodnotí oba své argumenty. To znamená, že pokud napíšeš x & y, R se vždy pokusí zjistit hodnoty x i y. V některých případech to ale není efektivní. Pokud je například x rovno FALSE, pak x & y bude vždy FALSE, bez ohledu na hodnotu y. Výpočet y tedy není potřeba a zbytečně zabírá čas. Operátor && toho využívá – pokud výsledek y na výsledku nic nezmění, vůbec ho nepočítá.

V tomto kódu, pokud je is_double[1] FALSE, není potřeba vyhodnocovat is_double[2] ani is_double[3]. Záměnou & za && tak můžeme kód zrychlit.

Důležitá poznámka: && funguje pouze s jednotlivými logickými hodnotami, tedy s logickými vektory délky 1 (jako ty, které se předávají do podmínky if), zatímco & pracuje i s vektory delšími než 1.

Pokyny

100 XP
  1. Vytvoř funkci improved_move(), která funguje podobně jako move(), ale používá &&.
  2. Pomocí microbenchmark() porovnej improved_move() s původní verzí move().