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ì đó :blush: (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 :smile:

Đô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 :blush:


Part 1: Làm sao để sử dụng biến hiệu quả hơn (part1)
Part 2: Làm sao để sử dụng biến hiệu quả hơn (part2)
Part 3: Làm sao để sử dụng biến hiệu quả hơn (part3)

9 Likes

:blush:
tính đưa phần biến vào trong comment code mà đây có rồi nên giảm bớt vậy

1 Like

Hehe nếu mà ảnh hưởng đến mạch bài viết thì anh cứ dẫn link/quote cũng được :smile:

1 Like

lấy luôn khỏi xin phép, haha :stuck_out_tongue_closed_eyes:

1 Like

Hoặc người sau này sẽ bảo trì code của bạn là một thằng tâm thần có xu hướng bạo lực và nó biết nhà bạn ở đâu :joy:

Câu này Đạt đọc ở đâu đó bằng tiếng Anh mà không biết search ở đâu.

Biến x thì hoàn toàn không nên dùng, nhưng biến temp hoặc tmp thì có thể dùng trong một số trường hợp cực kỳ cụ thể, ví dụ như trong hàm swap ta có thể dùng tmp.


Great

1 Like

lúc kiếm tư liệu cho bài của em có đọc qua 1 post của ông nào nói được quăng cho 1 module gần 1k dòng code không có 1 dòng comment để bảo trì, làm xong module đó ổng bỏ việc luôn :cry:

2 Likes

Lúc đi làm mình sẽ phải gặp những trường hợp này, phải tập chấp nhận thôi. Nhiều người họ code rất chán, đặt tên biến theo sở thích, cứ i j k l m mà táng. Lại không có comment gì hết trơn.

1 Like

tình trạng hiện tại của e đó, nhưng đang cố cải thiên.

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