2012-02-13 29 views
14

Điều này có vẻ giống như một câu hỏi ngớ ngẩn, và tôi do dự để đăng nó, nhưng vẫn: nếu một cái gì đó cần chạy chỉ trong một điều kiện nhất định, cái nào hiệu quả hơn :if-> return if if-> else efficiency

A.

if (condition) { 
    // do 
    // things... 
} 

B.

if (!condition) { return; } 
// do 
// things... 
+1

Bạn có đo lường điều này không? Bạn đã tìm được gì? – Steven

+8

Đó là một điều phong cách. Hiệu suất không liên quan; cả hai sản xuất mã máy gần như giống hệt nhau. Nếu bạn muốn tránh 'lập trình ngang', bạn có thể muốn B để tránh điều kiện lồng nhau. –

+0

Xem http://jsperf.com/ khi bạn có câu hỏi như thế này. Trang web rất hữu ích! – mrtsherman

Trả lời

6

Các ques thực tion là. Bạn có thực sự quan tâm?

Tôi nói KHÔNG! Điều quan trọng hơn là phải có mã dễ đọc hơn là thực hiện tối ưu hóa vi mô nào đó.

9

Vui lòng chọn nội dung dễ đọc nhất. Tối ưu hóa hiệu suất ở cấp độ này hầu như không bao giờ là vấn đề. Ngay cả những phần nhạy cảm về hiệu suất thực sự của các khung công tác (chẳng hạn như khung công tác .NET) không được hưởng lợi từ việc tối ưu hóa vi mô như vậy.

12

Chúng có hiệu quả như nhau, nhưng B thường được coi là dễ đọc hơn, đặc biệt khi được sử dụng để loại bỏ một số điều kiện lồng nhau.

2

Trong khi tôi đồng ý rằng bạn nên chọn khả năng đọc trước, tôi sẽ tiếp tục và thêm một chút thông tin: Trong C#, không có sự khác biệt. Nó biên dịch cho cùng một điều (khi được tối ưu hóa bằng cách xây dựng chế độ Release). Những ngôn ngữ khác? Ai biết được, tôi chắc rằng một số người trong số họ coi nó là khác nhau, nhưng cơ hội mà bạn thực sự cần phải quan tâm về nó là mỏng để không ai.

4

Đó là một điều phong cách. Hiệu suất không liên quan; cả hai sản xuất mã máy gần như giống hệt nhau.

Một vài cân nhắc về phong cách:

Nếu bạn muốn tránh 'lập trình ngang', bạn có thể muốn thích B để tránh điều kiện lồng nhau. Ví dụ, nếu bạn muốn thêm trường hợp ngoại lệ mà không ảnh hưởng đến dòng chảy của phương pháp này quá nhiều:

Một:

public String getDescription(MyObject obj) { 
    if (obj == null) { 
     return ""; 
    } else { 
     if (!obj.isValid()) { 
      return "invalid"; 
     } else { 
      ... 
     } 
    } 
} 

B:

public String getDescription(MyObject obj) { 
    if (obj == null) { 
     return ""; 
    } 

    if (!obj.isValid()) { 
     return "invalid"; 
    } 

    .... 
} 

Nhưng sự khác biệt là tối thiểu nếu bạn hỏi tôi. Chắc chắn không xứng đáng với một 'cuộc chiến kiểu mã'.

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