2012-01-11 4 views
5

tôi thường gặp trên phải làm một cái gì đó như thế này,đôi nếu điều kiện, bất kỳ cách nào để làm cho nó ngắn

if(condition1) { 
     if {condition2) { //this condition is repeated again below 
      //dosomething here 1 code 1 
     } 
     else{ 
      //dosomething here 2 code 2 
     } 
    } 
    else { 
     if {condition2) { //same if condition as above 
      //dosomething here 3 code 3 
     } 
     else{ 
      //dosomething here 4 code 4 
     } 
    } 

Về cơ bản, chỉ kiểm tra if (condition2) được lặp lại trong cả hai trường hợp, và DoSomething là khác nhau ở tất cả 4 vị trí tức là code1, code2, code3, code4 là tất cả các mã khác nhau.

Vì vậy, có anyway để làm cho nó nhỏ gọn và dễ đọc Hoặc điều này là tốt?

Cảm ơn.

Sau khi trải qua các chỉnh sửa và xem câu trả lời, tôi tự hỏi bây giờ nếu câu hỏi này có ý nghĩa gì cả. Bây giờ tôi cảm thấy ngu ngốc.

+1

Um ... nếu bạn có cùng mã ở cả hai chi nhánh tại sao bạn cần đầu tiên nếu? – Tudor

+0

Xin lỗi, nếu không rõ ràng, tôi đã cập nhật câu hỏi ngay bây giờ. Về cơ bản tôi đã kiểm tra tình trạng tương tự ở hai nơi, vì vậy tôi đã nghĩ rằng có một số cách để tránh kiểm tra hai lần. – newcoderintown

+1

Có phải là một phần của điều kiện 2 trong cả hai trường hợp giống nhau không? –

Trả lời

5

Đối với trường hợp cụ thể của bạn, thay thế tốt nhất là:

không còn áp dụng - giá trị trong trường hợp DoSomething đây 1 là như nhau với DoSomething đây 3

if (c2) 
{ 
} 
else if (c1) 
{ 
} 
else 
{ 
} 

Đối với trường hợp ít đơn giản , bạn có thể nhóm các điều kiện lại với nhau:

if (c1 && c2) 
{ 
} 
else if (c1 && !c2) 
{ 
} 
else if (!c1 && c2) 
{ 
} 
else if (!c1 && !c2) 
{ 
} 

mặc dù tôi không biết điều này có dễ đọc hơn hay không.

Nếu có nhiều điều kiện cần thiết, tôi đã nhìn thấy mã như thế này:

do { 
    if (c1) 
    { 
     //.... 
     break; 
    } 
    if (c2) 
    { 
     //.... 
     break; 
    } 
    //..... 
} while (false); 
+1

Tôi không biết nếu câu hỏi thay đổi nhưng ví dụ đầu tiên của bạn dường như không giống nhau ... Nếu c2 đúng thì bạn bỏ qua trạng thái của c1 mà bài gốc không. Chỉnh sửa/Lưu ý: Tôi đã không nhìn thấy bản cập nhật mới nhất với mã trong các khối khác trong trường hợp nó chắc chắn không khớp. ;-) – Chris

+0

@Chris câu hỏi đã thay đổi, làm điều gì đó 1 & 3 giống nhau trong bản gốc. –

+0

@Chris: Có câu hỏi được thay đổi. Bạn có thể xem các chỉnh sửa để hiểu rõ hơn. –

3

ĐÁP MỚI AS HỎI đã được chỉnh sửa

if (condition1 && condition2) 
{ 
    //dosomething here 1 code 1 
} 
else if (condition1 && !condition2) 
{ 
    //dosomething here 2 code 2 
} 
else if (!condition1 && condition2) 
{ 
    //dosomething here 3 code 3 
} 
else 
{ 
    //dosomething here 4 code 4 
} 

mã sau không còn giá trị AS CÂU HỎI CÓ THAY ĐỔI!

tôi sẽ làm:

if(condition2) 
{ 
    if(condition1) 
    { 
    //dosomething here 
    } 
    else 
    { 
    //dosomething here 2, 
    //which might be different than what we are doing above 
    } 
} 

Đó là cho câu hỏi cụ thể của bạn, cho các vấn đề phức tạp hơn các giải pháp có thể khác nhau

+0

Cảm ơn @ Chris Tôi đã chỉnh sửa câu trả lời của mình theo câu hỏi đã chỉnh sửa. – SERPRO