Cách khai báo biến

Xin chào mọi người
Hôm trước tôi vô tình đọc được series bài viết về sử dụng biến hiệu quả của bạn Thành Phạm, nó rất hay và bổ ích.
part 2 có 1 đoạn "Hãy giữ cho biến “sống” trong thời gian ít nhất có thể"
Và để làm điều này thì bạn có đưa ra giải pháp "Khi nào cần dùng thì khai báo biến"
Nhưng
Khi tôi có tham gia dự án ở 2 công ty khác nhau họ đều có chung 1 rule Việc khai báo biến được viết ở đầu hàm / đầu chương trình
mn cho hỏi dùng cách nào tốt hơn vậy?
Cám ơn mn nhiều!

câu hỏi không rõ ràng,
chú đang muốn hỏi cho ngôn ngữ nào
Và mục đích khai báo biến để làm gì
Tùy vào từng mục đích để mà khai báo ở đâu, chứ không phải cứ rule là làm

5 Likes

Lấy lại ví dụ chương trình trong bài viết của bạn Thành Phạm, Tất cả 2 đoạn dưới là tôi copy lại từ bài viết

Ví dụ để tác giả chỉ ra rằng k tốt -> rule công ty
1 // khởi tạo tất cả các biến
2 recordIndex= 0;
3 total = 0;
4 done = false;
    ...
26 while ( recordIndex < recordCount ) {
27 ...
28 recordIndex = recordIndex +1;    **<--1**
    ...
64 while (!done) {
    ...
69 if ( total > projectedTotal ) {         **<--2**
70     done=true;            **<--3**
Cách tác giả khuyến nghị

Còn đây là bản sửa lại:

25  recordIndex = 0;       <-- 1
26  while ( recordIndex < recordCount ) {
27  ...
28     recordIndex = recordIndex + 1;
       ...
62  total = 0;       <-- 2
63  done = false;       <-- 2
64  while ( !done ) {
       ...
69     if ( total > projectedTotal ) {
70        done = true;

(1)Khởi tạo recordIndex được chuyển xuống từ dòng 3.
(2)Khởi tạo total và done được chuyển xuống từ dòng 4 and 5

Không có qui định cụ thể về cái này.

Miễn sao bạn dùng nó tối ưu nhất là được.

Ví dụ như đoạn code này:

for (int i = 0, j = n - 1; i < j; i++, j--) {
  int t = a[i];
  a[i] = a[j];
  a[j] = t;
}

Có thể thấy rằng nên khai báo int t ở ngoài vòng for thì hơn, vì nó sẽ sử dụng lain nhiều lần.

Còn với đoạn code này:

int i = 0;
for (i = 0; i < n; i++) {
  //do something
}

// một đoạn code dài không liên quan tới i

for (i = 0; i < n; i++) {
  //do something
}

Như này thì thấy biến i được sử dụng có 2 lần và khoảng cách sử dụng cũng khá xa nhau, vậy nên khai báo int i = 0 ngay trong for sẽ tốt hơn.

Tóm lại là tùy cơ ứng biến, là người chứ có phải máy đâu mà cứ dập theo mỗi một cái khuôn. :slight_smile:

4 Likes

À, cám ơn bạn.
Ý tôi k phải vậy rồi. Ý đang nói nếu cùng 1 phạm vi hoạt động của biến thì nên sử dụng cách nào.
Ví dụ: biến sum chỉ sử dụng 1 lần ở dòng thứ 20 của function & là dòng (gần) cuối cùng của function thì nếu theo tác giả phân tích thì sẽ khai báo biến sum ở dòng 19.
Còn cty tôi sẽ yêu cầu khai báo ở những dòng 1, 2.

"Hãy giữ cho biến “sống” trong thời gian ít nhất có thể"
Mặc dù nó là điều tốt nhưng nó không phải quy tắc ưu tiên đầu tiên.
Tốt có 2 hướng thường ngược nhau: tốt cho máy tính và tốt cho lập trình viên.
Dòng bôi đen bên trên sẽ tốt cho máy tính ở mức độ rất nhỏ nhưng sẽ làm cho các ltv rất xoắn não và khó chịu.

Người ta yêu cầu khai báo biến ở những dòng đầu tiên bởi vì như vậy code sẽ tường minh chia khối rõ ràng.
Đó là điều cần thiết khi phát triển, bảo trì.

Không những biến mà ngay việc khai báo tất cả các thứ khác cũng phải được cấu trúc một cách tường minh khoa học. Các khu vực biến, hàm, protected, private, public, static cũng được đặt tên và nằm thành từng cụm riêng hoặc từng nhóm chức năng sẽ khai báo và triển khai gần nhau.

6 Likes

Đúng câu trả lời tôi mong muốn. Cám ơn bạn rất nhiều. (y) (y) (y)

À nếu vậy thì mình sẽ đợi đến khi nào dùng rồi mới khai báo. :slight_smile:

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