2010-07-10 17 views
5

Khi viết mã, tôi thấy điều quan trọng là mã của tôi trông đẹp hơn (ngoài thực tế là nó có cũng hoạt động tốt). Nó cũng được mô tả trong cuốn sách Code Complete (p729): 'Việc thưởng thức trực quan và trí tuệ của mã được định dạng tốt là một niềm vui mà một vài người không phải là lập trình viên có thể đánh giá cao'.Làm thế nào để giữ cho bố trí mã trực quan 'hấp dẫn' khi giới thiệu xử lý lỗi?

Vấn đề là, ngay sau khi tôi nhận được mã hoạt động, và tôi bắt đầu giới thiệu việc xử lý lỗi (cố gắng ngoại trừ mệnh đề, v.v.) để làm cho nó mạnh mẽ, tôi thấy rằng điều này thường làm rối tung và biến nó thành một thứ chắc chắn không dễ nhìn thấy. Các câu lệnh try-except và if if bổ sung, làm cho mã ít đọc và được cấu trúc.

Tôi tự hỏi nếu điều này là do tôi lạm dụng hoặc lạm dụng xử lý lỗi, hoặc điều này là không thể tránh khỏi? Bất kỳ mẹo hoặc thủ thuật nào để giữ cho nó đẹp mắt?

Trả lời

0

Tất cả phụ thuộc vào cách bạn lập trình của mình. Bạn có thể tránh được rất nhiều câu lệnh try-catch (hoặc khi bạn đặt nó, try-except) nếu bạn chỉ thực hiện xác thực đầu vào thích hợp. Chắc chắn, đó là rất nhiều công việc để trang trải hầu hết những người sử dụng rác có xu hướng đưa vào các hình thức vv, nhưng nó sẽ giữ cho thói quen xử lý dữ liệu của bạn sạch (hoặc sạch hơn).

5

Thật khó để cung cấp cho bạn một câu trả lời chung cho điều này, vì có rất nhiều trường hợp xử lý lỗi khác nhau và do đó có rất nhiều cách tiếp cận khác nhau để giải quyết vấn đề này. Nếu bạn đăng một số ví dụ trong thế giới thực, có thể bạn sẽ nhận được rất nhiều đề xuất ở đây về SO cách cải thiện mã của bạn.

Nói chung, việc thêm xử lý lỗi vào các chức năng hiện có làm cho chúng lớn hơn, do đó, tái cấu trúc chúng thành các phương thức nhỏ hơn luôn là ý tưởng hay. Nếu bạn đang tìm kiếm một cách tiếp cận tổng quát hơn, bạn nên làm cho mình thoải mái với Aspect-Oriented programming. Đó là một cách tiếp cận để giữ cho mã cho cái gọi là mối quan tâm cắt chéo (như xử lý lỗi) hoàn toàn ra khỏi mã logic kinh doanh của bạn.

EDIT: Chỉ cần một đơn giản lừa:

tôi tránh phải viết lỗi kiểm tra như thế này:

int MyFunction() 
{ 
    if(ErrorCheck1Passes()) 
    { 
     if(ErrorCheck2Passes()) 
     { 
      if(ErrorCheck3Passes()) 
      { 
       callSomeFunction(...); 
      } 
      else 
       return failureCode3; 
     } 
     else 
      return failureCode2; 
    } 
    else 
     return failureCode1; 

    return 0; 
} 

tôi thích

int MyFunction() 
{ 
    if(!ErrorCheck1Passes()) 
     return failureCode1; 
    if(!ErrorCheck2Passes()) 
     return failureCode2; 
    if(!ErrorCheck3Passes()) 
     return failureCode3; 

    callSomeFunction(...); 
    return 0; 
} 
1

Tôi thường quấn lên khối mã mà đòi hỏi lỗi xử lý vào các chức năng riêng của họ sẽ xử lý tất cả các ngoại lệ có thể xảy ra trong nội bộ, và do đó theo nghĩa nào đó luôn thành công. Mã gọi chúng trông sạch hơn và nếu các hàm đó được gọi nhiều lần, thì mã của bạn cũng trở nên nhỏ hơn. Điều này có thể có ý nghĩa hơn nếu bạn đang làm việc nhiều hơn ở phần đầu của một ứng dụng, từ quan điểm của người dùng, không phải mọi ngoại lệ có thể đều cần phải tăng lên đến mức của họ. Nó là tốt trong bối cảnh của một số lớp học cho có được một cách nội bộ mạnh mẽ của xử lý lỗi và di chuyển trên.

Vì vậy, ví dụ, tôi có thể có chức năng như

SaveSettingsSafe(); 
// 'Safe' in the sense that all errors are handled internally before returning 
+0

Ý tưởng hay về ... Thuật ngữ an toàn. Sẽ cố gắng sử dụng điều đó trong mã của tôi. (Nhắc tôi về bài viết Joel On Software xuất sắc về ký hiệu Hungary: http://www.joelonsoftware.com/articles/Wrong.html) – Rabarberski

1

Bạn đã tái phát hiện một lý do chính Don Knuth phát minh literate programming: đó là tất cả các quá phổ biến cho xử lý lỗi để làm mờ các thuật toán chính. Nếu bạn may mắn, bạn sẽ có một số cấu trúc ngôn ngữ cung cấp cho bạn một số tính linh hoạt.Ví dụ, các ngoại lệ có thể cho phép bạn di chuyển việc xử lý lỗi ở nơi khác, hoặc các hàm hạng nhất có thể làm cho nó có thể di chuyển việc xử lý lỗi xung quanh và giảm các kiểm tra if-then-else thành một cuộc gọi hàm.

Nếu bạn bị kẹt bằng ngôn ngữ không có các tính năng này, như C, bạn có thể muốn xem xét một công cụ lập trình biết chữ. Công cụ lập trình văn học là tiền xử lý, nhưng toàn bộ nhiệm vụ của họ là giúp bạn làm cho mã của bạn dễ đọc hơn. Họ có một số ít người theo dõi, nhưng bạn sẽ có thể tìm thấy một số hướng dẫn trên web và trong các bài báo đã xuất bản.

+0

Không biết về lập trình biết chữ, thú vị. Cảm ơn bạn đã đề cập đến nó. Mặc dù tôi có nghi ngờ liệu nó có thực sự hoạt động trong 'thế giới thực' hay không. – Rabarberski

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