Làm sao để sử dụng biến hiệu quả hơn (part 4)
Làm sao để sử dụng biến hiệu quả hơn (part 4)
Sử dụng một biến với nhiều mục đích đôi khi làm chúng ta có cảm giác như tiết kiệm được cái gì đó (mà cũng có thể do lười khai báo thêm biến), ý tưởng đó thì thường vô hại lúc bạn viết code vì bạn biết rõ mình đang làm gì, nhưng nó sẽ rất nguy hiểm cho bạn khi đọc code sau này, đặc biệt nguy hiểm hơn nữa khi người đọc code là sếp của bạn
Đôi khi các biến tạm thời thường được sử dụng ở hai nơi mà lại ở hai hành động khác nhau. Chúng thường được đặt tên kiểu chẳng gợi được điều gì có ích cả ví dụ như x
, temp
. Và đây là một ví dụ về việc sử dụng biến tạm thời với 2 mục đích:
// Compute roots of a quadratic equation.
// This code assumes that (b*b-4*a*c) is positive.
temp = Sqrt( b*b - 4*a*c );
root[O] = ( -b + temp ) / ( 2 * a );
root[1] = ( -b - temp ) / ( 2 * a );
...
// swap the roots
temp = root[0];
root[0] = root[1];
root[1] = temp;
Hỏi: Có sự liên hệ nào giữa temp
ở trên và temp
ở dưới hay không? Và câu trả lời là không có sự liên hệ nào cả, sử dụng một biến với hai chức năng làm nó trở nên có vẻ liên quan đến nhau mặc dù không phải vậy. Hãy tạo sự độc nhất cho các biến với mỗi mục đích cụ thể, điều đó sẽ giúp code của bạn dễ đọc hiểu hơn. Đây là cách cải thiện:
// Compute roots of a quadratic equation.
// This code assumes that (b*b-4*a*c) is positive.
discriminant = Sqrt( b*b - 4*a*c );
root[0] = ( -b + discriminant ) / ( 2 * a );
root[1] = ( -b - discriminant ) / ( 2 * a );
...
// swap the roots
oldRoot = root[0];
root[0] = root[1];
root[1] = oldRoot;
Tránh dùng những biến có "tác dụng phụ" kiểu như sử dụng các giá trị khác nhau của 1 biến để đảm nhận các chức năng khác nhau. Ví dụ:
Giá trị trong biến pageCount nói về số trang đã in xong, trừ khi nó = -1, trong trường hợp này thì quá trình in có lỗi.
Giá trị của biến customerId có thể nói về số khách hàng, trừ khi giá trị của nó lớn hơn 500,000, trong trường hợp này bạn trừ 500,00 để tìm ra số tài khoản có vấn đề.
Giá trị của bytesWritte là số byte đã xuất ra file, trừ khi con số đó âm, trong trường hợp này thì nó cho biết cả số đĩa đã được sử dụng trong việc xuất ra.
Nên là:
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
Part 1: http://daynhauhoc.com/t/lam-sao-de-su-dung-bien-hieu-qua-hon-part1/6921
Part 2: http://daynhauhoc.com/t/lam-sao-de-su-dung-bien-hieu-qua-hon-part2/6936
Part 3: http://daynhauhoc.com/t/lam-sao-de-su-dung-bien-hieu-qua-hon-part3/6992