2010-06-26 34 views
7

thể trùng lặp:
Anyone else find naming classes and methods one of the most difficult part in programming?Khó khăn trong việc đặt tên chức năng

Đôi khi có vẻ như tôi không thể thực sự tìm thấy bất kỳ tên cho một chức năng tôi đang viết, điều này có thể là do chức năng không phải là gắn kết đủ?

Bạn làm gì khi không có tên tốt cho chức năng xuất hiện trong đầu?

+27

Có hai vấn đề khó khăn trong khoa học máy tính: (1) Vô hiệu hóa bộ nhớ cache; (2) Đặt tên cho mọi thứ; (3) Lỗi off-by-one. –

+0

Trùng lặp: http://stackoverflow.com/questions/421965/anyone-else-find-naming-classes-and-methods-one-of-the-most-difficult-part-in-pro – gnovice

+0

@Greg Hewgill: Tôi cá cược nếu Phil Karlton vẫn còn sống, anh ta sẽ thích điều đó. –

Trả lời

14

Đối với chức năng đặt tên, chỉ cần tránh có danh từ đơn giản và đặt tên cho chúng sau động từ. Một số con trỏ:

  1. Có tên chức năng độc đáo, ví dụ: không có validateInput()validateUserInput() vì thật khó để nói nội dung của người khác. Ngoài ra, tránh có các ký tự trông rất giống nhau, ví dụ:số 1 ​​và chữ thường 'l'. Đôi khi nó tạo nên sự khác biệt.
  2. Bạn đang làm việc trên một dự án có nhiều người? Bạn cũng nên dành thời gian xem xét các quy ước đặt tên, chẳng hạn như nếu tên hàm phải có dấu gạch dưới, phải là camelCase, v.v.
  3. Ký pháp Hungary là một ý tưởng tồi; tránh làm nó.
  4. Hãy suy nghĩ về chức năng đang làm. Sự gắn kết mà bạn đã đề cập trong câu hỏi của bạn đến với tâm trí. Nói chung, các chức năng chỉ nên làm một điều, vì vậy đừng đặt tên nó là constructCarAndRunCar() mà đúng hơn là có một hàm cấu trúc và một hàm khác chạy nó. Nếu các chức năng của bạn nằm trong khoảng từ 20 đến 40 dòng, bạn sẽ tốt.
  5. Đôi khi, và điều này phụ thuộc vào dự án, bạn cũng có thể muốn thêm tiền tố cho tên hàm của bạn với lớp nếu lớp đó hoàn toàn là thủ tục (chỉ bao gồm các hàm). Vì vậy, nếu bạn có một lớp học chăm sóc chạy mô phỏng, hãy đặt tên cho các chức năng của bạn sim_pauseSimulation()sim_restartSimulation(). Nếu lớp của bạn là OOP, đây không phải là vấn đề nhiều.
  6. Không sử dụng cấu trúc dữ liệu cơ bản trong chính các hàm; những điều này nên được trừu tượng hóa. Thay vì có các chức năng như addToVector() hoặc addToArray(), thay vào đó hãy có các chức năng là addToList(). Điều này đặc biệt đúng nếu đây là nguyên mẫu hoặc cấu trúc dữ liệu có thể thay đổi sau này.
  7. Cuối cùng, hãy nhất quán trong các quy ước đặt tên của bạn. Một khi bạn đưa ra một quy ước sau khi suy nghĩ, hãy gắn bó với nó. PHP xuất hiện trong đầu khi nghĩ đến các tên hàm không nhất quán.

Mã hóa vui vẻ! :)

+0

Wow, danh sách tốt đẹp, ký hiệu Hungary là một số trong những điều tồi tệ nhất MS tuyên truyền, thậm chí MS có vấn đề để thoát khỏi con quỷ phát hành ... – jdehaan

+0

Cho tôi biết về nó :) Tôi làm việc tại MS mùa hè năm ngoái và ký hiệu Hungary là khủng khiếp. Hãy tưởng tượng có một con trỏ dài đến một chuỗi WCHAR: 'LPWSTR *'. – SHC

+0

Tôi không đích thân sử dụng ký hiệu Hungary và không bao giờ có - nhưng điều gì khiến nó quá khủng khiếp? –

1

Cho nó ảnh chụp tốt nhất và yếu tố sau nếu nó vẫn không vừa.

0

Đi tới www.thesaurus.com và cố gắng tìm một tên phù hợp hơn mặc dù từ đồng nghĩa.

+0

Nó cũng đi kèm với kinh nghiệm. Có rất nhiều từ kỳ diệu trong lập trình như: handler, repeater, builder, utils, convertor, manager và vân vân. Khi bạn đọc rất nhiều mã và sách về lập trình bạn từng chút một, hãy tìm hiểu các từ và tình huống khi chúng có thể được sử dụng –

+3

Thông thường khi một cái gì đó được đặt tên tốt nhất là "Người quản lý" bạn có vấn đề. –

+0

Tôi không đồng ý. Trong Net bạn có rất nhiều nhà quản lý. Tôi sẽ không nói rằng họ được đặt tên xấu hoặc. Net có vấn đề trong các bộ phận cụ thể. Người quản lý chỉ là một tên như bất kỳ người nào khác. Kiểm tra: CommandManager, ApplicationManager, ResourceManager, PropertyManager, SecurityManager ... Tôi có thể đặt tên cho ít nhất 100 người quản lý trong .Net framework. –

2

Đôi khi có thể chức năng của bạn quá lớn và do đó làm quá nhiều thứ. Hãy thử chia chức năng của bạn thành các chức năng khác và có thể rõ ràng hơn khi gọi từng chức năng riêng lẻ.

Đừng lo lắng về cách đặt tên mọi thứ bằng một hoặc hai từ. Đôi khi, nếu các chức năng làm điều gì đó có thể được giải thích trong một câu nhỏ, hãy tiếp tục và đặt tên cho hàm này lâu hơn một chút nếu nó giúp các nhà phát triển khác hiểu được những gì đang diễn ra.

Một đề xuất khác là nhận phản hồi từ người khác. Thường thì những người khác đến từ một quan điểm khác và nhìn thấy chức năng lần đầu tiên sẽ có một ý tưởng tốt hơn về những gì để gọi chức năng.

0

Gần như quan trọng như tên hàm là bạn nhất quán với nhận xét. Nhiều IDE sẽ sử dụng các nhận xét được định dạng đúng của bạn không chỉ để cung cấp trợ giúp ngữ cảnh nhạy cảm cho một hàm bạn có thể đang sử dụng, nhưng chúng có thể được sử dụng để tạo tài liệu. Đây là vô giá khi quay lại dự án sau một thời gian dài hoặc khi làm việc với các nhà phát triển khác.

Trong cài đặt học tập, chúng cung cấp một minh chứng được đánh giá cao về ý định của bạn.

Nguyên tắc chung là [verb] returnDescription. Điều này rất dễ dàng với các hàm kiểu GetName() và không thể được áp dụng phổ biến. Thật khó để tìm sự cân bằng giữa mã không phô trương và mô tả.

Dưới đây là .Net convention guide, nhưng nó có thể áp dụng cho hầu hết các ngôn ngữ.

+2

Tôi hết lòng không đồng ý. Tôi thường thấy rằng mã nhận xét tốt nhất là khó đọc nhất và cũng thường dễ bị lỗi nhất. Tại giáo viên uni sẽ cho chúng tôi biết rằng mã bình luận là pj của mèo, nhưng nhiều năm kinh nghiệm đã dạy tôi cách khác. Mã tốt thực sự là mã không yêu cầu nhận xét nội tuyến, bởi vì các chức năng là ngang bằng với kiến ​​trúc hệ thống. "Có ý nghĩa - không phải bình luận" là những gì tôi luôn nói. –

+0

@Banang Tôi đánh giá cao quan điểm. Thảo luận lộn xộn là một vấn đề và không nên được sử dụng thay cho thiết kế tốt. Như bạn đã nói http://stackoverflow.com/questions/184618/what-is-the-best-comment-in-source-code-you-have-ever-encountered/694644#694644 – Laramie

+0

@MiaClarke, khi câu nói trôi qua , "nếu mã và nhận xét không đồng ý, cả hai đều sai." Chỉ cần lặp lại thuật toán trong các chú thích là khó hiểu/dư thừa. Chỉ cần một cái nhìn tổng quan về chức năng, quyết định thiết kế, bình luận nơi một cái gì đó khó khăn đang được thực hiện, lưu ý vấn đề có thể điểm. Có lẽ thêm một loại thay đổi cho các lỗi (hoặc có thể giao phó cho một trong những phần mềm điều khiển phiên bản của bạn, * với đủ chi tiết *). – vonbrand

0

Tôi thấy dễ dàng hơn khi đặt tên cho các chức năng khi tôi không phải cắt giảm các từ. Miễn là bạn không làm javascript cho trang bắt đầu google, bạn có thể làm tên dài hơn.

Ví dụ: bạn có phương pháp dequeueReusableCellWithIdentifiermergeChangesFromContextDidSaveNotification trong khung cacao táo.

Miễn là nó rõ ràng những gì các chức năng đang làm bạn có thể đặt tên nó bất cứ điều gì bạn muốn và refactor nó sau này.

+1

ifTheNameIsSoLongItIsEasyToConfuseItWithAnotherSimilarOne nó chỉ là một tên * xấu *. "Refactor later" sẽ không bao giờ xảy ra, khi bạn làm quen với tên (xấu), hoặc nó được sử dụng khắp nơi và quá nhiều việc phải thay đổi. – vonbrand

2

Tôi làm theo quy tắc sau: Tên theo mục đích (Tại sao? - quyết định thiết kế) chứ không phải nội dung (Cái gì, như thế nào? - có thể thấy trong mã).

Đối với chức năng đó là hầu như luôn luôn là một hành động (động từ) tiếp theo là danh từ của các thông số và (hoặc kết quả. (Off-topic nhưng cho các biến không sử dụng "arrayOfNames" hoặc "listOfNames", đây là những loại thông tin nhưng đơn giản là "tên"). Điều này cũng sẽ tránh mâu thuẫn nếu bạn cấu trúc lại mã một phần.

Đối với các mẫu nhất định như đối tượng sáng tạo, hãy phù và luôn luôn sử dụng việc đặt tên tương tự như "Tạo ..." (và không đôi khi "Phân bổ ..." hoặc "Xây dựng ..." nếu không bạn hoặc các đồng nghiệp của bạn sẽ kết thúc trong việc gãi đầu vết thương của họ)

0

Là một quy tắc thực tế của riêng tôi, nếu một tên hàm quá dài, nó phải được tạo ra trong một vật thể mới. Tuy nhiên, tôi đồng ý với tất cả các bài viết ở trên. btw, nice noob question

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