Code dài - ngắn và nhanh - chậm

đăng 20:26, 27 thg 3, 2012 bởi Hai Yen   [ đã cập nhật 07:30, 16 thg 9, 2014 ]

Bạn nên nhớ, tất cả các ngôn ngữ lập trình đều có trình biên dịch (TBD). Nó làm nhiệm vụ trung gian biên dịch đoạn code của bạn ở dạng ngôn ngữ cấp cao thành dạng ngôn ngữ cấp thấp hoặc mã máy để CPU có thể hiểu và làm việc (mình xin nhấn mạnh CPU chỉ hiểu tập lệnh cấp thấp & dạng mã máy 01,không biết bất cứ ngôn ngữ nào khác).

Mình lấy vd cấu trúc mình rất hay dùng :

1. Bien = 15

2. Select case bien

3.         Case 1 to 10

4.                     Debug.print “1-9”

5.         Case 11 to 20

6.                     Debug.print “11-20”

7.         Case 12 to 16

8.                     Debug.print “12-16”

9. End select

Kết quả bạn nhận được chỉ 11-20 mà không có 12-26. tại sao vậy? câu case dòng 7 vẫn thỏa đkiện cơ mà?. Đó là vì TBD sẽ biên dịch cấu trúc lệnh select case thành 2 lệnh Jump (lệnh nhảy cấp thấp hoặc dời con trỏ lệnh CP) 1 có điều kiện (đk) & 1 không đk. Và CPU sẽ đọc lệnh Jump có đk trước sẽ dời CP đến nhãn Case 11 to 20 (vì thỏa đk) và thực hiện các lệnh trong nhãn này. Sau khi hết lệnh sẽ thực hiện thêm lệnh Jump không điều kiện về nhãn end select và kết thúc cấu trúc lệnh select case.

Như vậy từ dòng 7 trở đi cho dù bạn có viết hàng tá lệnh thì cũng không ảnh hưởng gì tới tốc độ và tính chính xác của ct (miễn dừng viết sai cú pháp để TBD phải bắt lỗi). cấu trúc select case xem ra rất nặng nề và phức tạp nhưng trong thực tế chạy rất nhanh và ổn định. Bạn cứ thử debug vài lần thì bạn sẽ thấy.

Như vậy bạn không thể kết luận được “Code càng dài thì chạy càng chậm”.

Thêm 1 vd nữa: khi bạn có 1 thư viện (module) gồm 10 hàm, nhưng bạn chỉ gọi đúng hàm thứ 10 còn lại 9 hàm không đụng đến. Thì khi chạy, TBD sẽ rất thông minh chỉ biên dịch hàm thứ 10 còn lại 9 hàm không biên dịch, tất nhiên là không chạy nên chẳng ảnh hưởng gì tới tốc độ hay tính chính xác của chương trình. Cho dù bạn có ngẫu hứng viết thêm vài chục hàm nữa cũng vậy thôi.

Còn code dễ hiểu hay khó hiểu là tùy khả năng của mỗi người. vì khi viết code, chủ yếu cho CPU hiểu và thực hiện đúng ý đồ của bạn chứ không phải viết cho người khác hiểu ý bạn !!!. Còn nếu muốn người khác dễ hiểu tốt nhất nên trình bày thuật giải bằng ngôn ngữ tự nhiên (có thể pha thêm vài lệnh đơn giản if then else …)

Bạn nên nhớ code chỉ là công cụ để mô phỏng lại thuật giải của bạn. có những thuật giải mà chỉ cần dùng code mô phỏng lại được là siêu rồi chứ đừng nói đến hay dỡ. vd trò caro, cờ tướng...ngay cả tác giả cũng thấy choáng vì code của mình.

Do đó khi muốn suy ngược từ code ra thuật giải để hiểu, đòi hỏi bạn phải có những kỹ năng nhất định (theo kinh nghiệm của mình): 1. Bạn phải hiểu thật rõ cách thức và nguyên lý hoạt động: Code->TBD->CPU; 2. Nắm rõ cú pháp lệnh và những đặc điểm, nhất là những lệnh có cấu trúc; 3. Phân tích từng cụm lệnh theo chức năng chứ đừng phân tích từng lệnh riêng lẻ ->bạn sẽ bị “tẩu quả nhập ma” đó; 4. Bạn phải là “chuyên gia” debug thì mới mong rằng vọc code mà hiểu được thuật giải của người khác.

Cuối cùng xin chúc tất cả các bạn luôn đạt được những gì mình mong muốn.

Comments