Điều gì được chứng minh là độ dài tối đa tốt của hàm? [đóng cửa]


44

Liệu chiều dài chức năng có ảnh hưởng đến năng suất của một lập trình viên? Nếu vậy, số dòng tối đa tốt để tránh mất năng suất là gì?

Vì đây là một chủ đề rất được quan tâm, vui lòng sao lưu khiếu nại với một số dữ liệu.


6
Độ dài không nên được đo bằng LỘC, nhưng trong khoảng thời gian cần thiết để hiểu chính xác những gì nó làm. Và độ dài đó, không quá một phút. Nếu tôi không thể tìm ra nó trong vài giây, thì có lẽ nó đã làm quá nhiều ... sau một phút, chắc chắn là như vậy.
CaffGeek


13
Độ dài tối đa phải là 17.
ThomasX

1
Hãy nghĩ S trong RẮN.
Kris Krause

1
@CaffGeek Hoặc có lẽ chức năng chỉ đơn giản là làm một cái gì đó không tầm thường. Tôi đã thấy các chức năng mà tôi sẽ mất nhiều ngày để hiểu đầy đủ. Ngay cả các chức năng mà tôi hiểu tất cả các khái niệm liên quan có thể dễ dàng mất nửa giờ để làm việc thông qua các chi tiết. Mặc dù thật tuyệt khi có các chức năng tầm thường, nhiều vấn đề đơn giản là khó khăn.
CodeInChaos

Câu trả lời:


46

Kể từ khi tôi bắt tay vào cây vợt điên rồ này vào năm 1970, tôi đã thấy chính xác một mô-đun thực sự cần nhiều hơn một trang in (khoảng 60 dòng). Tôi đã thấy rất nhiều mô-đun dài hơn.

Đối với vấn đề đó, tôi đã viết các mô-đun dài hơn, nhưng chúng thường là các máy trạng thái hữu hạn lớn được viết dưới dạng các câu lệnh chuyển đổi lớn.

Một phần của vấn đề dường như là các lập trình viên ngày nay không được dạy để mô đun hóa mọi thứ.

Các tiêu chuẩn mã hóa tối đa hóa sự lãng phí của không gian dọc dường như cũng là một phần của vấn đề. (Tôi vẫn chưa gặp một người quản lý phần mềm đã đọc " Tâm lý học lập trình máy tính " của Gerald Weinberg . Weinberg chỉ ra rằng nhiều nghiên cứu đã chỉ ra rằng sự hiểu biết của lập trình viên về cơ bản chỉ giới hạn ở những gì lập trình viên có thể thấy ngay lập tức. lập trình viên phải cuộn, hoặc lật một trang, mức độ hiểu của họ giảm đáng kể: họ phải nhớ và trừu tượng.)

Tôi vẫn tin rằng rất nhiều sự tăng năng suất của lập trình viên được chứng minh bằng tài liệu từ FORTH là do hệ thống "khối" FORTH cho mã nguồn: các mô-đun bị giới hạn ở mức tối đa tuyệt đối là 16 dòng 64 ký tự. Bạn có thể yếu tố vô hạn, nhưng trong mọi trường hợp , bạn không thể viết một thói quen 17 dòng.


3
Toàn bộ triết lý của FORTH được thiết kế để khuyến khích điều này ... Bạn đã có ý định thiết kế vốn từ vựng của riêng bạn, không ngừng chia chương trình của bạn thành các phần nhỏ hơn và nhỏ hơn, kết thúc với ít kịch bản hơn và nhiều từ điển hơn. Giới hạn độ dài một mình không làm điều đó - bạn sẽ thấy một thói quen được chia thành các phần tùy ý chỉ để đáp ứng một số tiêu chuẩn mã hóa. Tôi nghĩ rằng bạn hoàn toàn chính xác khi nghi ngờ rằng các lập trình viên chỉ đơn giản là "không được dạy để mô đun hóa mọi thứ"; điều này đáng lẽ phải là một trong những chiến thắng lớn của OOP, nhưng vì nhiều lý do, nó thường không được nhấn mạnh như là một mục tiêu cho chính nó.
Shog9

1
@Ông. CRT: Các giới hạn độ dài trong các triển khai FORTH theo định hướng khối được mô đun hóa FORCED. Bản chất tương tác của hầu hết các FORTH giúp, bằng cách khuyến khích các mô-đun nhỏ và thử nghiệm nhanh các mô-đun đó. D85, một FORTH dựa trên tệp, không bắt buộc mô đun hóa, và tôi thấy những người chơi với D85 viết rất nhiều mô-đun chạy theo ý thức lập trình viên chạy mãi mãi với nó. Do đó niềm tin của tôi. (Đối với những gì đáng giá, Liz Thay vì không đồng ý với tôi. Cô ấy nghĩ rằng chủ yếu là sự tương tác giúp FORTH tăng năng suất.)
John R. Strohm

2
+1 để giới thiệu cho tôi cuốn sách tuyệt vời "Tâm lý học lập trình máy tính" :)
Samuel

30

Đúng kích cỡ, thật sao?

Phụ thuộc vào ngôn ngữ bạn sử dụng, nhưng nói chung (và theo sở thích cá nhân của tôi):

  • Lý tưởng nhất , ít hơn 25 dòng.
  • Chấp nhận được , ít hơn 35 dòng.

Nếu nó nhiều hơn, thì đó là thứ tôi cần quay lại sau và làm lại.

Nhưng thực tế , bất kỳ kích thước nào cần có khi bạn cần giao một thứ gì đó và điều đó có ý nghĩa hơn vào lúc này để nhổ chúng ra như thế, đôi khi còn dễ dàng hơn cho ai đó xem xét trước khi vận chuyển. (nhưng vẫn lấy lại được sau).

(Gần đây, nhóm của tôi đã chạy một chương trình trên cơ sở mã của chúng tôi: chúng tôi đã tìm thấy lớp có 197 phương thức và một phương pháp khác chỉ có 3 phương thức nhưng một trong số đó là 600 dòng. Trò chơi dễ thương: điều gì tệ hơn trong 2 tệ nạn?)


Bây giờ để có câu trả lời zen hơn ... Nói chung, nó được coi là một cách thực hành tốt (TM) để trích dẫn một hoặc hai người đàn ông tuyệt vời, vì vậy hãy đi:

Mọi thứ nên được làm đơn giản nhất có thể, nhưng không đơn giản. - A. Einstein

Sự hoàn hảo cuối cùng đạt được không phải khi không còn gì để thêm, mà là khi không còn gì để lấy đi. - A. de Saint Exupéry


Phụ lục về kiểu bình luận

Là một phụ lục cho điều này, các chức năng của bạn nên có tên rõ ràng giải thích ý định của chúng. Về ý kiến, tôi thường không bình luận bên trong một chức năng:

  • ý kiến nói "tại sao?" ,
  • nói "thế nào?" .

Một khối nhận xét ở đầu mỗi chức năng (yêu cầu giải thích) là đủ. Nếu chức năng của bạn nhỏ và tên hàm đủ rõ ràng, thì bạn chỉ cần nói những gì bạn muốn đạt được và tại sao. Tôi chỉ sử dụng nhận xét nội tuyến cho các trường trong một số ngôn ngữ hoặc trên khối bắt đầu cho các chức năng phá vỡ quy tắc dòng 25-35 đó nếu mục đích không rõ ràng. Tôi sử dụng một nhận xét khối bên trong mã khi xảy ra tình huống đặc biệt (ví dụ: khối bắt mà bạn không cần hoặc muốn làm bất cứ điều gì nên có một nhận xét cho biết tại sao, ví dụ).

Để biết thêm, vui lòng đọc câu trả lời của tôi về Phong cách và các đề xuất về mã nhận xét


@haylem Tôi đoán đây là phiên bản của lập trình viên Freddy so với Jason :-)
Gaurav

Tôi đồng ý, tuy nhiên tôi sẽ thêm nó vào kích cỡ của một trang màn hình. nếu bạn có 72 dòng trong một trang màn hình thì chức năng không được vượt quá 72 dòng.
Tên hiển thị

@ Có một vấn đề đảm bảo rằng một chức năng duy nhất sẽ giữ trong một trang màn hình để không cuộn, nhưng đó thường không phải là mối quan tâm chính của tôi. Mối quan tâm của tôi là lượng thời gian cần thiết để xử lý thông tin khi đọc một hàm và nó gần như tức thời nếu nó được viết rõ ràng trong 25 dòng. Nó trở thành một vấn đề theo sau các cuộc gọi chức năng. 72 là quá lớn đối với tôi (cộng với, nếu bạn có màn hình chia nhỏ thì sao? Và điều đó phụ thuộc vào phông chữ. Nhưng tôi đồng ý với giá trị lịch sử của khuyến nghị)
haylem

1
Tất nhiên, đôi khi bạn có các chức năng trong đó bạn chỉ cần sao chép 70 trường khác nhau đến 70 địa điểm khác nhau. Tôi chủ yếu sử dụng ttđể tạo ra những thứ này nhưng đôi khi bạn bị mắc kẹt với chức năng ass dài (hoặc chức năng ass dài) không thực sự làm bất cứ điều gì đáng quan tâm vì vậy không phải là vấn đề thực sự.
cấu hình

1
Khi chức năng là ví dụ Map(x => x.Property1); Map(x => x.Property2); Map(x => x.Property3);rõ ràng thì tất cả đều giống nhau. (Lưu ý đây chỉ là một ví dụ; loại chức năng này thỉnh thoảng bật lên)
cấu hình

12

Theo tôi, mọi chức năng nên càng nhỏ càng tốt. Mỗi chức năng chỉ nên làm một việc và làm tốt. Điều đó không thực sự trả lời câu hỏi về độ dài tối đa, nhưng cảm nhận của tôi nhiều hơn về độ dài của các chức năng.

Để sử dụng câu nói của chú Bob, "Trích xuất cho đến khi bạn không thể giải nén được nữa. Trích xuất cho đến khi bạn thả."


2
Bạn có ý nghĩa gì nhỏ nhất có thể? Sẽ không nhỏ đến mức có thể có mỗi chức năng chỉ có hai dòng: một để thực hiện một thao tác và một chức năng khác gọi một chức năng để thực hiện phần còn lại?
Kelmikra

Chú Bob lại. Nghĩ cho chính mình. Đừng nghe chú. Họ dẫn bạn lạc lối.
gnasher729

10

Chiều cao tối đa của một tòa nhà là bao nhiêu? Phụ thuộc vào vị trí của bản dựng hoặc chiều cao bạn muốn.
Bạn có thể nhận được câu trả lời khác nhau từ những người khác nhau đến từ thành phố khác nhau.
Một số hàm script và trình xử lý ngắt kernel rất dài.


Tôi hoàn toàn đồng ý với bạn. Tôi thích ẩn dụ. :) Một tòa nhà gồm ba tầng có thể được xây dựng bởi một kiến ​​trúc sư ngu ngốc, người không biết đặt lối thoát an toàn hợp lệ ở đâu và tòa nhà khác có thể có mười tầng và là một thiết kế kiến ​​trúc hoàn hảo. Chúng ta nên luôn luôn nhớ rằng khả năng đọc và duy trì phải là lý do chính để cấu trúc lại một phương pháp để giảm kích thước của anh ta chứ không phải kích thước của chính nó. Một thành phố không thể được xây dựng với 90% nhà chọc trời ngoại trừ trong các bộ phim khoa học viễn tưởng. :)
Samuel

10

Một phương pháp phù hợp với tôi là: Tôi có thể có một phần của hàm dài hơn để đặt tên có ý nghĩa không. Tôi nghĩ độ dài của một phương thức không quan trọng bằng việc đặt tên tốt. Phương pháp nên làm những gì tên nói, không hơn không kém. Và bạn sẽ có thể đặt một cái tên hay. Nếu bạn không thể đặt tên cho phương thức của mình là tốt, thì mã có thể không được đặt cùng nhau.


Và phương thức của bạn chỉ nên làm một điều để có một tên hay ... không 'Và', ​​'Hoặc' hoặc bất cứ điều gì khác làm cho tên phương thức dài 50 ký tự.
Samuel

10

Miễn là nó cần phải làm những gì nó cần làm, nhưng không còn nữa.


như họ nói trong c, "Không có vấn đề gì trong c mà bạn không thể giải quyết bằng cách thêm một con trỏ khác vào con trỏ đó." bạn luôn có thể thêm một chức năng khác bên dưới nó, câu hỏi của anh ấy sẽ là về phần hiển linh của bạn "nó kết thúc ở đâu?"
Tên hiển thị

1
Tôi thực sự lật nó và nói "ngắn như nó cần, nhưng không ngắn hơn", nhưng bạn nhận được +1 của mình vì đã đủ gần :)
Ben Hughes

6

Tôi nghĩ rằng có một sự đánh đổi. Nếu bạn có nhiều phương thức ngắn, việc gỡ lỗi chúng thường khó hơn một phương thức dài. Nếu bạn phải nhảy xung quanh trình soạn thảo 20 hoặc 30 lần khác nhau để theo dõi một cuộc gọi phương thức, sẽ rất khó để giữ tất cả trong đầu. Trong khi đó, nếu có một phương pháp rõ ràng bằng văn bản, ngay cả khi nó là 100 dòng, việc giữ trong đầu bạn thường dễ dàng hơn.

Câu hỏi thực sự là tại sao các mục nên ở các phương thức khác nhau và câu trả lời như đã nêu ở trên là sử dụng lại mã. Nếu bạn không sử dụng lại mã (hoặc không biết) thì có thể nên để lại mã theo một phương pháp dễ thực hiện và sau đó khi bạn cần sử dụng lại, hãy chia các phần cần tái sử dụng sử dụng thành các phương pháp nhỏ hơn.

Trong thực tế, một phần của thiết kế phương pháp tốt là tạo ra các phương thức gắn kết chức năng (về cơ bản chúng làm một việc). Độ dài của các phương pháp không quan trọng. Nếu một hàm thực hiện một điều được xác định rõ và là 1.000 dòng thì đó là một phương thức tốt. Nếu một hàm thực hiện 3 hoặc 4 điều và chỉ có 15 dòng, thì đó là một phương pháp tồi ...


Tôi thích các phương pháp ngắn.
Marcie

Tôi thích những gì bạn nói bởi vì nói rằng một phương pháp không nên có hơn 10 dòng theo quan điểm của tôi là một điều không tưởng. Ok, đó là một quy tắc tốt để ghi nhớ mỗi khi bạn viết một phương thức nhưng nó không nên là một quy tắc toán học như 1 + 1 = 2. Nếu bạn tôn trọng các nguyên tắc như KISS, DRY, YAGNI, v.v ... và các phương pháp của bạn là không đầy đủ một bình luận giải thích một số chi tiết vì có quá dài, các phương thức có thể có 100 dòng mã và có thể hoàn toàn sạch để hiểu và duy trì. Tuy nhiên, nó nên là một ngoại lệ hơn là một thói quen. Tôi nghĩ trường hợp chuyển đổi trong phương pháp nhà máy là một ví dụ tốt về ngoại lệ.
Samuel

5

Tôi thấy dễ dàng hơn để theo dõi những gì tôi đang làm nếu tôi có thể thấy toàn bộ chức năng cùng một lúc. Vì vậy, đây là cách tôi thích viết hàm:

  1. Đủ ngắn để phù hợp với màn hình của tôi với một phông chữ hợp lý.
  2. Nếu nó cần dài hơn # 1, đủ ngắn để in trên một tờ giấy trong một phông chữ hợp lý.
  3. Nếu nó cần dài hơn # 2, đủ ngắn để in 2-up lên một tờ giấy.

Tôi hiếm khi viết các chức năng lâu hơn thế. Hầu hết trong số đó là các câu lệnh chuyển đổi C / C ++ khổng lồ.


Đủ ngắn để vừa trên màn hình là tốt nhưng chỉ định loại và kích thước phông chữ. Giấy không nên là một quy tắc theo quan điểm của tôi bởi vì chúng tôi đang ở năm 2013 và ai vẫn in mã trên giấy, ai sẽ in chỉ để xem nó có vừa với khổ giấy không? Với các công cụ như Visual Studio, intellisense, không còn lý do nào nữa để phân tích mã bằng giấy.
Samuel

5

Đối với tôi, một hàm là bất kỳ độ dài nào nó cần phải có. Hầu hết thời gian tôi chia nó là khi tôi sẽ sử dụng lại mã.

Về cơ bản, tôi sẽ tuân theo nguyên tắc 'sự gắn kết cao, khớp nối thấp' và không có ràng buộc về chiều dài.


5

Câu hỏi nên là một chức năng nên làm bao nhiêu. Và thông thường, thật hiếm khi bạn cần 100 dòng để thực hiện "một". Một lần nữa, điều đó phụ thuộc vào mức độ bạn đang xem mã: Việc băm mật khẩu có phải là một điều không? Hoặc là băm và lưu mật khẩu một điều?

Tôi muốn nói, hãy bắt đầu với việc lưu mật khẩu như một chức năng. Khi bạn cảm thấy băm là khác nhau, và bạn cấu trúc lại mã. Tôi không phải là chuyên gia lập trình bằng bất kỳ phương tiện nào, nhưng IMHO, toàn bộ ý tưởng về các hàm bắt đầu nhỏ là các hàm của bạn càng nguyên tử, cơ hội sử dụng lại mã càng cao, không bao giờ phải thay đổi giống nhau ở nhiều nơi v.v.

Tôi đã thấy các thủ tục lưu trữ SQL chạy hơn 1000 dòng. Có phải số lượng dòng thủ tục lưu trữ cũng ít hơn 50? Tôi không biết, nhưng nó làm cho việc đọc mã, chết tiệt. Bạn không chỉ phải tiếp tục cuộn lên xuống, bạn cần đặt một vài dòng mã như "this does verify1", "bản cập nhật này trong cơ sở dữ liệu", v.v. - một công việc mà lập trình viên nên làm.


+1 chỉ cho đoạn đầu tiên. mọi thứ khác đều liên quan đến trường hợp bạn đang làm việc.
Tên hiển thị

Và làm thế nào để chia nó thành 50 chức năng giúp? Khi các chức năng phải giao tiếp, vì vậy bạn sẽ không hoàn thành với 500 dòng nhưng hàng nghìn?
gnasher729

5

Từ độ phức tạp Cyclomatic (Wikipedia):

Độ phức tạp chu kỳ của một phần của mã nguồn là số lượng các đường dẫn độc lập tuyến tính thông qua mã nguồn.

  • Tôi khuyên bạn nên giữ số đó dưới 10 trong một phương pháp duy nhất. Nếu nó lên 10, thì đã đến lúc phải tính lại.

  • Có những công cụ có thể đánh giá mã của bạn và cung cấp cho bạn số phức tạp theo chu kỳ.

  • Bạn nên cố gắng tích hợp các công cụ này vào đường ống xây dựng của bạn.

  • Đừng theo đuổi một kích thước phương thức theo nghĩa đen, nhưng hãy thử xem xét độ phức tạp và trách nhiệm của nó. Nếu nó có nhiều hơn một trách nhiệm, thì có lẽ nên tái lập yếu tố. Nếu độ phức tạp chu kỳ của nó tăng lên, thì có lẽ đã đến lúc phải tính lại.

  • Tôi khá chắc chắn có những công cụ khác cung cấp cho bạn thông tin phản hồi tương tự, nhưng tôi chưa có cơ hội để xem xét vấn đề này.


Độ phức tạp theo chu kỳ đã được thể hiện, trên mã thực từ một trong những kho lưu trữ công cộng lớn, không phải là các ví dụ, có mối tương quan rất mạnh với SLOC thô. Điều này làm cho nó về cơ bản là vô giá trị, vì nó dễ dàng hơn nhiều để tính lợi nhuận vận chuyển. (Vâng, có thể chơi trò chơi SLOC. Hãy trung thực, ở đây: Một người chơi trò chơi SLOC tại nhà tuyển dụng của bạn sẽ được phép tiếp tục rút tiền lương trong bao lâu?)
John R. Strohm

4

Thông thường, tôi cố gắng giữ các phương thức / chức năng của mình phù hợp với màn hình của màn hình 1680x1050. Nếu nó không phù hợp, sau đó sử dụng các phương thức / hàm trợ giúp để phân chia nhiệm vụ.

Nó giúp dễ đọc trên cả màn hình và giấy.


Tôi làm điều tương tự nhưng giá trị của nó để xác định loại phông chữ và kích thước bạn đang sử dụng. Đối với bản thân tôi, tôi thích "consolas" với kích thước 14 như đề xuất của Scott hanselman. hanselman.com/blog/ mài Lần đầu tiên làm việc với một phông chữ quá lớn nhưng đó là cách tốt nhất để luôn nhớ với bạn rằng phương pháp của bạn nên nhỏ nhất có thể.
Samuel

4

Tôi không đặt giới hạn cứng cho bất cứ điều gì vì một số hàm thực hiện các thuật toán vốn đã phức tạp và bất kỳ nỗ lực nào để làm cho chúng ngắn hơn sẽ làm cho các tương tác giữa các hàm mới, ngắn hơn trở nên phức tạp đến mức không thể giảm được sự đơn giản. Tôi cũng không tin rằng một chức năng chỉ nên làm "một việc" là một hướng dẫn tốt, vì "một điều" ở mức độ trừu tượng cao có thể là "nhiều việc" ở cấp độ thấp hơn.

Đối với tôi, một hàm chắc chắn là quá dài nếu độ dài của nó gây ra vi phạm tinh vi DRY ngay bây giờ và trích xuất một phần của hàm vào một hàm hoặc lớp mới có thể giải quyết điều này. Một hàm có thể quá dài nếu không phải như vậy, nhưng một hàm hoặc lớp có thể dễ dàng được trích xuất để làm cho mã trở nên mô đun hơn theo cách có thể hữu ích khi đối mặt với sự thay đổi có thể thấy trước.


Các hàm thực hiện "một điều" ở một mức độ trừu tượng cụ thể và bạn chỉ lo lắng về mức độ trừu tượng đó. Đó là toàn bộ vấn đề. Nếu bạn không thể nắm bắt được điều đó, thì tôi không nghĩ bạn hiểu được sự trừu tượng.
Zoran Pavlovic

4

Đủ ngắn để được tối ưu hóa chính xác

Các phương pháp nên ngắn gọn để làm chính xác một điều. Lý do cho điều này là đơn giản: vì vậy mã của bạn có thể được tối ưu hóa đúng.

Trong ngôn ngữ JIT-ted như Java hoặc C #, điều quan trọng là các phương thức của bạn phải đơn giản để trình biên dịch JIT có thể tạo mã nhanh chóng. Các phương pháp dài hơn, phức tạp hơn tự nhiên đòi hỏi nhiều thời gian JIT hơn. Ngoài ra, trình biên dịch JIT chỉ cung cấp một số tối ưu hóa và chỉ các phương thức đơn giản nhất được hưởng lợi từ việc này. Thực tế này thậm chí đã được nêu ra trong C # hiệu quả của Bill Wagner .

Trong một ngôn ngữ cấp thấp hơn, như C hoặc C ++, việc có các phương thức ngắn (có thể là hàng tá dòng) cũng rất quan trọng vì cách đó giúp bạn giảm thiểu nhu cầu lưu trữ các biến cục bộ trong RAM thay vì trong một thanh ghi. (Aka 'Đăng ký đổ'.) Tuy nhiên, lưu ý rằng trong trường hợp không được quản lý này, chi phí tương đối của mỗi lệnh gọi hàm có thể khá cao.

Và ngay cả trong một ngôn ngữ động, như Ruby hay Python, việc có các phương thức ngắn cũng giúp tối ưu hóa trình biên dịch. Trong một ngôn ngữ động, một tính năng càng 'động', càng khó tối ưu hóa. Ví dụ: một phương thức dài lấy X và có thể trả về Int, Float hoặc String có thể sẽ hoạt động chậm hơn nhiều so với ba phương thức riêng biệt mà mỗi phương thức chỉ trả về một loại duy nhất. Điều này là do, nếu trình biên dịch biết chính xác loại hàm nào sẽ trả về, nó cũng có thể tối ưu hóa trang gọi hàm. (Ví dụ: không kiểm tra chuyển đổi loại.)


Khoảng 99.999% các ứng dụng ngoài kia có nhiều thứ làm chậm tốc độ của các chương trình như truy cập cơ sở dữ liệu, truy cập tệp hoặc độ trễ mạng. Suy nghĩ về tốc độ trong khi thiết kế các phương pháp có thể là một lý do hợp lệ để chơi game, ứng dụng thời gian thực hoặc báo cáo với hàng tấn dữ liệu nhưng không phải trong các trường hợp khác. Tuy nhiên, đó là một điểm tốt nhưng nhỏ như tôi là một lập trình viên, tôi hiếm khi phải thực hiện loại tối ưu hóa này trong các ứng dụng của mình.
Samuel

Bạn làm điều đó khi bạn đã đo tốc độ mã của mình và thấy nó quá chậm, nếu bạn biết bạn đang làm gì (nó không đơn giản như bạn nghĩ) và nếu bạn đo nó sau đó và tốc độ đã được cải thiện .
gnasher729

3

Nó phụ thuộc rất nhiều vào những gì trong mã.

Tôi đã thấy một thói quen hàng ngàn dòng mà tôi không có vấn đề với. Đó là một tuyên bố chuyển đổi lớn, không có tùy chọn nào vượt quá một chục dòng và cấu trúc điều khiển duy nhất trong bất kỳ tùy chọn nào là một vòng lặp. Ngày nay, nó đã được viết với các đối tượng nhưng đó không phải là một lựa chọn trước đó.

Tôi cũng đang nhìn vào 120 dòng trong một công tắc trước mặt tôi. Không có trường hợp nào vượt quá 3 dòng - một người bảo vệ, một nhiệm vụ và phá vỡ. Đó là phân tích tệp văn bản, các đối tượng không có khả năng. Bất kỳ thay thế sẽ khó đọc hơn.


2

Hầu hết các trình biên dịch không quan tâm đến độ dài của hàm. Một chức năng nên có chức năng, nhưng phải dễ hiểu, thay đổi và tái sử dụng cho con người. Chọn độ dài phù hợp với bạn nhất.


1

Nguyên tắc chung của tôi là một chức năng phải phù hợp trên màn hình. Chỉ có ba trường hợp tôi thấy có xu hướng vi phạm điều này:

1) Chức năng điều phối. Ngày xưa, những thứ này là phổ biến nhưng hầu hết chúng được thay thế bằng sự kế thừa đối tượng ngày nay. Tuy nhiên, các đối tượng chỉ hoạt động trong chương trình của bạn và do đó bạn sẽ vẫn thấy các chức năng điều phối thỉnh thoảng khi xử lý dữ liệu đến từ nơi khác.

2) Các chức năng thực hiện một loạt các bước để hoàn thành mục tiêu và trong đó các bước thiếu một phân ngành tốt. Bạn kết thúc với một hàm chỉ đơn giản gọi một danh sách dài các hàm khác theo thứ tự.

3) Giống như # 2 nhưng trong đó các bước riêng lẻ quá nhỏ đến mức chúng chỉ được nội tuyến đơn giản thay vì được gọi riêng.


1

Có lẽ chiều dài chức năng không phải là một số liệu tốt. Chúng tôi cũng cố gắng sử dụng độ phức tạp chu kỳ , trên các phương thức và một trong những quy tắc kiểm tra kiểm soát nguồn trong tương lai rằng độ phức tạp chu kỳ trên các lớp và phương thức phải thấp hơn X.

Đối với các phương thức, X được đặt thành 30 và khá chặt chẽ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.