2012-11-01 47 views
5

Im cố gắng tìm ra các thực hành tốt nhất là những gì khi khởi tạo biến nhất định ... Mã của tôi trông như thế này vào lúc này:Khởi tạo biến trong vòng lặp

int nHexCount = 0; 
int prevState = sc.state; 

bool bOnlySpaces = true; 
bool bIsValidLabel = true; 
bool bIsHotstring = false; 
bool bIsValidName = true; 
bool bIsValidExpStart = false;       

bool fInExpression = false; 
bool fInStringBlock = (sc.state == SCE_AHKL_STRINGOPTS || sc.state == SCE_AHKL_STRINGBLOCK); 

for (; sc.More(); sc.Forward()) { 

    if (sc.atLineStart) { 
     if (!fInStringBlock && sc.state != SCE_AHKL_COMMENTBLOCK) 
      sc.SetState(SCE_AHKL_DEFAULT); 

     // Reset Status 
     prevState = sc.state; 

     bOnlySpaces = true; 
     bIsValidLabel = true; 
     bIsHotstring = false; 
     bIsValidName = true; 
     bIsValidExpStart = false; 

     fInExpression = false; 
    } 

... 

Như bạn có thể thấy hầu hết các biến được thiết lập lại mỗi lần chương trình của tôi tìm thấy một dòng mới trong thành phần chỉnh sửa tôi đang làm việc trên ...

câu hỏi đặt ra sẽ là:

có thực hành lập trình tốt hơn tuyên bố và khởi tạo tất cả các biến bên trong vòng lặp for hoặc tôi nên để nó như nó là vào lúc này?

+2

Nó phụ thuộc: Bạn có cần chúng nằm ngoài phạm vi của vòng lặp foor? – alestanis

Trả lời

10

Bạn nên luôn giảm phạm vi của các biến càng nhiều càng tốt. Điều này sẽ cải thiện khả năng bảo trì mã của bạn và giảm nguy cơ lỗi.

// bad 
int i, j, k; 
k = 0; 
for (i = 0; i < X, ++i) 
{ 
    j = foo(i); 
    k += j; 
} 

bar(k); 

... vs ...

// better 
int k=0; // needs scope outside loop 
for (int i = 0; i < X, ++i) 
{ 
    int j = foo(i); 
    k += j; 
} 

bar(k); 
+1

Điều gì về hiệu suất bằng cách này ..? Sẽ không tốn kém gì khi khởi tạo nó mỗi lần? – sashkello

+3

@sashkello: Đối với nguyên thủy: không. Đối với những thứ phức tạp hơn: có lẽ không. –

+0

Tôi đã kiềm chế bản thân mình từ việc thay đổi chúng chính xác vì lý do này. Có bất kỳ chi phí nào vì điều đó không? - EDIT chỉ cần đọc câu trả lời ở trên. – RaptorX

Các vấn đề liên quan