Làm sao để sử dụng biến hiệu quả hơn (part3)

Bài viết này mình sẽ nói về việc chọn Binding Time (Thời điểm gán giá trị cho biến) sao cho hiệu quả :blush:

#Part3: Nên gán giá trị cho biến khi nào thì tốt


Nói chung thì “thời thế” thay đổi thì ta phải đổi thay chứ biết làm sao :smile: , nên gán sớm hay gán muộn còn phụ thuộc nhiều yếu tố, gán muộn hơn làm cho bạn mềm dẻo hơn trong việc viết code, còn gán sớm thì code đơn giản hơn. Ví dụ sau sẽ cho bạn thấy việc gán biến sớm nhất có thể, gán khi code được viết:

titleBar.color = 0xFF; // 0xFF là giá trị hex cho màu xanh lam

Giá trị 0xFF được gán cho titleBar.color vào thời điểm mà code được viết xuống vì 0xFF là 1 giá trị literal và được hard-coded vào chương trình. Hard-coding thường là ý tưởng tồi bởi vì nếu 0xFF thay đổi, thì nó sẽ mất đồng bộ với các giá trị đó trong chương trình.

Đây là một ví dụ tốt hơn một chút, nó gán giá trị của biến muộn hơn một chút, khi mà code được biên dịch:

private static final int COLOR_BLUE = 0xFF;
private static final int TITLE_BAR_COLOR = COLOR_BLUE;
...
titleBar.color = TITLE_BAR_COLOR;

TITLE_BAR_COLOR là một named constant ( hằng được đặt tên), một dấu hiệu của việc gán giá trị cho biến ở thời điểm biên dịch. Đây là gần như là cách tốt hơn cách hard-coding, nếu như mà ngôn ngữ của bạn hỗ trợ nó. Nó sẽ giúp bạn cải thiện việc đọc code vì TITLE_BAR_COLOR nói cho bạn biết 0xFF là màu của cái gì. Nó sẽ giúp bạn thay đổi màu title bar dễ dàng hơn bởi vì bạn chỉ cần thay đổi một giá trị một lần mà thôi.

Và đây là một ví dụ về việc gán giá trị muộn hơn một chút nữa, ở thời điểm chạy chương trình:

titleBar.color = ReadTitleBarColor();

ReadTitleBarColor() là một thủ tục có thể đọc giá trị trong khi chương trình đang chạy, có lẽ là đọc trong Microsoft Windows registry file hoặc là một Java properties file.

Code này rõ ràng là dễ hiểu và mềm dẻo hơn nhiều so với hard-coding vì bạn có thể dễ dàng thay đổi màu của title bar mà không phải can thiệp vào code mà chỉ cần sửa file cài đặt là xong.

Tóm lại, sau đây là những thời điểm bạn có thể gán giá trị cho biến trong ví dụ trên (còn chi tiết về những trường hợp khác thì có thể không hoàn toàn giống)

  • Thời điểm code (sử dụng những con số)
  • Thời điểm biên dịch (sử dụng named constant)
  • Thời điểm load chương trình (đọc giá trị từ file cài đặt)
  • Thời điểm khởi tạo các đối tượng (là đọc giá trị mỗi khi chương trình khởi động)
  • Sát thời điểm sử dụng (mỗi lần sử dụng sẽ load giá trị một lần)

Nói chung, gán sớm làm cho chương trình của bạn kém linh hoạt hơn nhưng lại đỡ phức tạp hơn và sự thành công trong lập trình là việc tối giản hóa sự phức tạp. Nhưng một chương trình muốn hiệu quả thì nó phải có độ mềm dẻo nhất định . Vì vậy tùy theo yêu cầu của chương trình của bạn mà bạn sẽ phải biết cân bằng giữa sự phức tạp và sự mềm dẻo sao cho hợp lí :smile:


Bài viết có tham khảo một số nội dung trong cuốn Code Complete và các tài liệu khác :blush:


Part1 ở đây:: Làm sao để sử dụng biến hiệu quả hơn (part1)
Part2 ở đây:: Làm sao để sử dụng biến hiệu quả hơn (part2)
Part4 ở đây: Làm sao để sử dụng biến hiệu quả hơn (part 4)

6 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?