1. Học hỏi
  2. /
  3. Khoa Học
  4. /
  5. Viết mã R hiệu quả

Connected

Bài tập

Dùng && thay cho &

Để xác định xem hai viên xúc xắc có giống nhau không, hàm move_square() dùng các câu lệnh if.

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

Toán tử & sẽ luôn đánh giá cả hai đối số. Tức là, nếu bạn gõ x & y, R sẽ luôn cố xác định cả x và y là gì. Có một số trường hợp như vậy là không hiệu quả. Ví dụ, nếu x là FALSE thì x & y luôn là FALSE, bất kể giá trị của y là gì. Vậy nên bạn có thể tiết kiệm một chút thời gian xử lý bằng cách không tính toán nó. Toán tử && tận dụng mẹo này và không thèm tính y nếu điều đó không ảnh hưởng đến kết quả tổng thể.

Trong đoạn mã này, nếu is_double[1] là FALSE thì bạn KHÔNG cần đánh giá is_double[2] hay is_double[3], vì thế bạn có thể tăng tốc bằng cách đổi & thành &&.

Cần lưu ý là && chỉ hoạt động với các giá trị logic đơn lẻ, tức là các vector logic có độ dài 1 (như bạn truyền vào điều kiện if), còn & cũng hoạt động với các vector có độ dài lớn hơn 1.

Hướng dẫn

100 XP
  1. Tạo hàm improved_move() tương tự move(), nhưng dùng &&.
  2. Dùng microbenchmark() để so sánh improved_move() với phiên bản trước move().