Coding Tip: Thử code mà không dùng IF

4583

Khi tôi bắt đầu lập trình và tham gia code challenge, một trong những thử thách yêu thích là giải quyết vấn đề mà không dùng câu lệnh if (hoặc ternary hoặc switch)

Có thể bạn sẽ thắc mắc điều đó thì có lợi ích gì?

Hừm, tôi nghĩ thử thách này buộc bạn phải nghĩ khác đi, mà trong một số trường hợp thì những giải pháp khác thì lại tốt hơn cái cũ.

Đương nhiên là chẳng có vấn đề gì với việc dùng if cả, có điều không dùng if thì đôi lúc ta sẽ tránh được việc làm phức tạp đoạn code. Tất nhiên là chỉ thỉnh thoảng thôi, nên bạn cứ tùy tình huống mà sử dụng nhé, chứ đừng máy móc.

Một lưu ý nhỏ nữa là không dùng if không chỉ code dễ đọc hơn, mà còn có một số khái niệm liên quan đến khoa học sau vấn đề này. Ở những ví dụ dưới đây, bạn sẽ thấy không dùng if sẽ đưa đến một khái niệm gọi là code-as-data, mở ra một cánh cổng với những khả năng riêng biệt, chẳng hạn cho phép bạn chỉnh sửa code khi thực thi.

Nhìn chung, hãy luôn thử giải quyết code challenge bằng cách không sử dụng câu lệnh điều kiện.

Dưới đây là một vài ví dụ để so sánh giữa khi dùng và không dùng if được viết bằng JavaScript.

  Tối ưu hoá MySQL sử dụng việc gộp các index
  Cách thức hoạt động của JavaScript: V8 engine và 5 mẹo tối ưu hóa

Thử thách #1: Đếm số lẻ trong array

Giả sử ta có một mảng số nguyên (integer), và muốn đếm xem trong mảng này có bao nhiêu số lẻ.

Đây là cách dùng if:

Còn đây là cách không dùng if:

*Lưu ý: ví dụ trên sử dụng forEach và chỉnh sửa biến counter, mặc dù sử dụng immutable thì sẽ tốt hơn. *

Note: the examples above use forEach and mutate the counter variable. It is cleaner and safer to use immutable methods instead. However, this article is not about that topic. Stay tuned for more coding tips articles that will cover immutability and functional programming. Also note, as pointed out by David Nagli, that the if-less solution would only work for integers while the if-based solution has the advantage of handling any number including decimal ones.

Ở giải pháp không dùng if, chúng ta tận dụng một thực tế là số dư khi chia cho 2 luôn là 0 hoặc 1. Kết quả của phép toán cũng chính là dữ liệu sử dụng trực tiếp trong giải pháp.

Vậy nếu trường hợp ta cộng cả số nguyên vào thì sao?

Thử thách #2: Function weekendOrWeekday

Viết một function nhận một date object làm tham số (chẳng hạn new Date()) và trả về chuỗi ký tự là “weekend” hoặc “weekday”.

Đây là cách dùng if:

Đây là cách không dùng if:

Bạn có để ý rằng câu lệnh if có chứa một ít dữ liệu. Nó gửi cho ta thông tin ngày nào là cuối tuần. Cách ta tránh sử dụng if chỉ đơn giản là trích xuất dữ liệu vào một object và sử dụng.

Thử thách #3: Function doubler

Viết một function doubler, dựa trên kiểu input thì nó sẽ thực hiện như sau:

  • Input là số thì nhân đôi (5 => 10, -10 => -20).
  • Input là chuỗi ký tự thì lặp lại tất cả các ký tự (‘hello’ => ‘hheelloo’).
  • Input là function thì gọi 2 lần.
  • Input là array thì gọi hàm với đầu vào là lần lượt tất cả phần tử của nó
  • Input là object thì gọi hàm với đầu vào là mọi giá trị của object

Đây là cách dùng switch:

Còn đây là cách không dùng switch:

Vẫn là cách cũ, để ý cách dữ liệu đã được trích xuất khỏi câu lệnh switch và cho vào object. Sau đó object được dùng để chọn đúng thao tác và gọi hàm.

Tham khảo: https://medium.com/edge-coders/coding-tip-try-to-code-without-if-statements-d06799eed231

Đừng bỏ lỡ những bài viết hay liên quan:

Xem thêm việc làm Software Developers hấp dẫn trên TopDev

TopDev via Viblo

  Cách tối ưu Component trong React Native
  8 cách tối ưu hoá JavaScript mọi lập trình viên đều phải biết