1. Nauka
  2. /
  3. Kursy
  4. /
  5. Wydajny kod w R

Connected

ćwiczenie

Użyj && zamiast &

Aby sprawdzić, czy oba kości mają tę samą wartość, funkcja move_square() używa instrukcji warunkowych.

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

Operator & zawsze sprawdza oba swoje argumenty. Oznacza to, że jeśli wpiszesz x & y, R zawsze spróbuje obliczyć zarówno x, jak i y. W pewnych przypadkach jest to nieefektywne. Na przykład, jeśli x ma wartość FALSE, to x & y zawsze będzie równe FALSE, niezależnie od wartości y. Można zatem zaoszczędzić nieco czasu, rezygnując z obliczania y. Operator && korzysta właśnie z tej właściwości – nie oblicza y, jeśli jego wartość nie wpłynęłaby na końcowy wynik.

W tym kodzie, jeśli is_double[1] ma wartość FALSE, nie trzeba sprawdzać is_double[2] ani is_double[3]. Można więc przyspieszyć działanie kodu, zastępując & operatorem &&.

Warto pamiętać, że && działa tylko na pojedynczych wartościach logicznych, tzn. wektorach logicznych o długości 1 (takich jak te przekazywane do warunku if), natomiast & obsługuje również wektory o długości większej niż 1.

Instrukcje

100 XP
  1. Utwórz funkcję improved_move(), podobną do move(), ale używającą operatora &&.
  2. Używając microbenchmark(), porównaj improved_move() z poprzednią wersją move().