2009-04-26 36 views
9

Tôi nhận được hai chế độ xem mâu thuẫn về vấn đề này. Một số nguồn tin nói rằng cần có ít phương pháp hơn để giảm các cuộc gọi phương thức, nhưng một số nguồn khác nói rằng viết phương pháp ngắn hơn là tốt để cho phép JIT thực hiện tối ưu hóa.C#, Viết phương pháp dài hơn hoặc phương pháp ngắn hơn?

Vì vậy, bên nào là chính xác?

Trả lời

30

Chi phí thực sự thực hiện cuộc gọi phương thức là không nhỏ trong hầu hết mọi trường hợp. Bạn không bao giờ cần phải lo lắng về nó trừ khi bạn có thể xác định rõ ràng một vấn đề xuống con đường mà đòi hỏi phải xem xét lại vấn đề (bạn sẽ không).

Điều quan trọng hơn là mã của bạn là đơn giản, dễ đọc, mô-đun, có thể duy trì và có thể sửa đổi. Phương pháp nên làm một điều, một điều duy nhất và ủy thác những điều phụ cho các thói quen khác. Điều này có nghĩa là phương pháp của bạn nên ngắn gọn như chúng có thể có, nhưng không ngắn hơn. Bạn sẽ thấy nhiều lợi ích hiệu năng hơn bằng cách có mã ít bị lỗi và lỗi vì nó đơn giản hơn là cố gắng outsmart trình biên dịch hoặc thời gian chạy.

Nguồn cho biết phương pháp phải dài là sai, ở nhiều cấp độ.

8

Không, bạn nên có phương pháp tương đối ngắn để đạt được khả năng đọc .

3

Không có quy tắc đơn giản nào về kích thước chức năng. Hướng dẫn nên là một chức năng nên làm 'một điều'. Đó là một chút mơ hồ nhưng trở nên dễ dàng hơn với kinh nghiệm. Các hàm nhỏ thường dẫn đến khả năng đọc. Đôi khi, những người lớn cần thiết.

Lo lắng về chi phí của các cuộc gọi phương thức là tối ưu hóa sớm.

2

Như mọi khi, đó là về việc tìm kiếm sự cân bằng tốt. Điều quan trọng nhất là phương pháp thực hiện một điều chỉ. Các phương pháp dài hơn có xu hướng làm nhiều hơn một điều.

1

Trước hết, bạn chắc chắn không nên tối ưu hóa vi mô hiệu suất ở cấp số lượng phương thức. Bạn rất có thể sẽ không nhận được bất kỳ lợi ích hiệu suất đo lường nào. Chỉ khi bạn có một số phương pháp đang được gọi trong một vòng lặp chặt chẽ hàng triệu lần, nó có thể là một ý tưởng - nhưng đừng bắt đầu tối ưu hóa điều đó trước khi bạn cần nó.

Bạn nên tuân thủ các phương pháp ngắn gọn ngắn gọn, điều đó làm một điều, làm cho mục đích của phương pháp rõ ràng. Điều này sẽ cung cấp cho bạn mã dễ đọc hơn, dễ hiểu hơn và khuyến khích sử dụng lại mã.

2

Tiêu chí duy nhất tốt nhất để hướng dẫn bạn về phương pháp định cỡ là giữ cho chúng có thể kiểm tra được. Nếu bạn có thể (và thực sự làm! -) kiểm tra kỹ lưỡng từng phương pháp đơn lẻ, mã của bạn có thể khá tốt; nếu bạn tiết kiệm thời gian thử nghiệm, mã của bạn có thể là, tốt nhất, tầm thường. Nếu một phương pháp rất khó để kiểm tra kỹ lưỡng, thì phương pháp đó có thể là "quá lớn" - cố gắng làm quá nhiều thứ, và do đó cũng khó đọc và duy trì (cũng như kiểm tra kém và do đó có khả năng là thiên đường cho lỗi).

1

Chi phí quan trọng nhất cần xem xét khi viết mã là khả năng duy trì. Bạn sẽ chi tiêu nhiều hơn nhiều, nhiều hơn để duy trì ứng dụng và sửa lỗi nhiều hơn bao giờ bạn sẽ khắc phục được sự cố về hiệu suất.

Trong trường hợp này, chi phí gần như chắc chắn không đáng kể của việc gọi một phương pháp là cực kỳ nhỏ khi so sánh với chi phí duy trì một phương pháp khó sử dụng lớn. Phương pháp súc tích nhỏ dễ bảo trì và dễ hiểu hơn. Ngoài ra chi phí gọi phương thức gần như chắc chắn sẽ không có tác động đáng kể về hiệu suất trên ứng dụng của bạn. Và nếu có, bạn chỉ có thể khẳng định rằng bằng cách sử dụng một hồ sơ. Các nhà phát triển nổi tiếng là xấu khi xác định các vấn đề về hiệu suất trước khi thực hiện.

Nói chung, một khi vấn đề về hiệu năng được xác định, chúng dễ sửa chữa. Làm một phương pháp hoặc quan trọng hơn là một cơ sở mã, duy trì được là một chi phí cao hơn nhiều.

0

Cá nhân, tôi không sợ các phương pháp dài miễn là người viết chúng viết tốt (mỗi phần của tiểu nhiệm vụ được phân cách bởi 2 dòng mới và nhận xét tốt đẹp trước nó, v.v. Ngoài ra, nhận dạng là rất quan trọng.). Thực tế, nhiều lần tôi thậm chí thích chúng hơn (ví dụ: khi viết mã thực hiện mọi thứ theo thứ tự cụ thể với logic tuần tự).

Ngoài ra, tôi thực sự không hiểu tại sao phá vỡ một phương pháp dài thành 100 miếng sẽ cải thiện khả năng đọc (như những người khác đề xuất). Chỉ ngược lại thôi. Bạn sẽ chỉ kết thúc nhảy khắp nơi và giữ các đoạn mã trong bộ nhớ của bạn chỉ để có được một bức tranh hoàn chỉnh về những gì đang xảy ra trong mã của bạn. Kết hợp điều đó với khả năng thiếu nhận xét, tên hàm kém, nhiều tên hàm tương tự và bạn có công thức hoàn hảo cho sự hỗn loạn. Ngoài ra, bạn có thể đi đầu kia trong khi cố gắng giảm kích thước của các phương thức: để tạo các lớp MANY và các hàm MANY, mỗi hàm có thể lấy các tham số MANY. Tôi không nghĩ rằng điều này cải thiện khả năng đọc hoặc là (đặc biệt là cho một kẻ ăn xin cho một dự án mà không có đầu mối những gì mỗi lớp/phương pháp làm).

Và nhu cầu "một chức năng nên làm" một điều "" là rất chủ quan. 'Một điều' có thể đang tăng lên một biến bởi một thứ để làm một tấn công việc được cho là 'cùng một thứ'.

Quy tắc của tôi chỉ có thể tái sử dụng: Mã giống nhau không được xuất hiện nhiều lần ở nhiều nơi. Nếu đây là trường hợp bạn cần một chức năng mới. Tất cả phần còn lại chỉ là nói chuyện triết học. Trong một câu hỏi "tại sao bạn làm cho phương pháp của bạn quá lớn" Tôi trả lời, "tại sao không nếu mã đơn giản?".

(chỉ là ý kiến ​​của tôi - bỏ phiếu nhiều như bạn muốn)

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