Có nên bình luận khác nhau trong các ngôn ngữ chức năng? [đóng cửa]


25

Tôi mới bắt đầu với lập trình chức năng và tôi đang tự hỏi về cách chính xác để nhận xét mã của mình.

Có vẻ hơi dư thừa để bình luận một chức năng ngắn vì tên và chữ ký đã cho bạn biết mọi thứ bạn cần biết. Nhận xét các chức năng lớn hơn cũng có vẻ hơi dư thừa vì chúng thường bao gồm các chức năng tự mô tả nhỏ hơn.

Cách chính xác để bình luận một chương trình chức năng là gì? Tôi có nên sử dụng cách tiếp cận tương tự như trong lập trình lặp không?


7
"vì chúng thường bao gồm các chức năng tự mô tả nhỏ hơn." - về nguyên tắc, không khác gì trong các ngôn ngữ mệnh lệnh. Tuy nhiên, cuối cùng thường không rõ chức năng lớn sẽ làm gì: người ta luôn có thể suy ra nó từ chính mã, nhưng nếu việc đó mất nhiều thời gian hơn đáng kể so với việc đọc một bình luận bạn nên cung cấp một nhận xét.
leftaroundabout 17/11/11

2
Tôi không đồng ý. Vì các lang chức năng không có tác dụng phụ, bạn biết chính xác cuối cùng nó sẽ làm gì, hãy trả về một giá trị với chữ ký đã cho
Tom Squires 17/11/11

8
không phải tất cả các ngôn ngữ chức năng là thuần túy, một số ngôn ngữ có tác dụng phụ.
Thanos Papathanasiou

1
Nhưng bình luận những gì bạn cảm thấy để bình luận ... Đây là suy nghĩ quá mức
gd1

1
Dự án của bạn có nguy cơ có các thành viên khác không quen thuộc với các ngôn ngữ chức năng không? Họ có thể cần thêm sự giúp đỡ.
JeffO

Câu trả lời:


84

Tên hàm sẽ cho biết bạn đang làm gì.

Việc thực hiện sẽ cho bạn biết bạn đang làm như thế nào .

Sử dụng ý kiến ​​để giải thích lý do tại sao bạn làm điều đó.


1
Câu trả lời tuyệt vời, nó giết tôi để xem mã tràn ngập các bình luận giải thích những gì và làm thế nào (rõ ràng từ chính mã) nhưng để tôi đoán tại sao.
Eric Wilson

32
và điều này đúng bất kể mô hình
jk.

2
Điều này có thể không cần phải nói, nhưng bạn cũng nên thêm ý kiến ​​về những gì và làm thế nào trong trường hợp mã phức tạp hoặc phức tạp và yêu cầu giải thích như vậy. Tất nhiên, mã như thế này có lẽ cũng nên tránh, nhưng điều đó không phải lúc nào cũng có thể.
dùng606723

3
Mặc dù câu trả lời này rất đơn giản và đơn giản có rất nhiều giá trị, nhưng nó không hoàn toàn đúng. Một tên hàm thường không và không thể mô tả "cái gì" một cách chi tiết, vì vậy tài liệu thường là cần thiết (ví dụ để mô tả các trường hợp cạnh). Tài liệu thường xuyên được chèn trong các ý kiến.
luiscubal

2
Có thể cho rằng, tên hàm cũng sẽ giải thích lý do tại sao nó hoạt động - khi có thể.
Yam Marcovic

14

Chắc chắn một điểm trong câu hỏi này, vì các chương trình chức năng thường ở một mức độ trừu tượng khác với các mệnh lệnh bắt buộc.

Bởi vì điều này, một phong cách khác của tài liệu là cần thiết. Trong các chương trình lặp, một nhận xét có thể hữu ích như trong đoạn mã sau, bởi vì bản chất của mã được ẩn đằng sau bản tóm tắt:

// map 'toUpperCase' over 'container' yielding 'result'
Container result = new Container();
for (int i=0; i < container.size(); i++) { 
             result.addToTail(container.atElement(i).toUpperCase());
}

Nhưng điều này rõ ràng là vô nghĩa trong một ngôn ngữ chức năng:

-- map 'toUpperCase' over 'list'
let result = map toUpperCase list

Tốt hơn:

-- we need the FooBars in all uppercase for the Frobnitz-Interface
let result = map toUpperCase list

8
ông luôn bảo tôi làm tài liệu tại sao thay vì cái gì. Vì vậy, tôi sẽ sử dụng phiên bản cuối cùng cho mã mệnh lệnh là tốt.
Simon Bergot

3
Ông của bạn nói đúng. Tôi chỉ muốn chứng minh rằng một số ý kiến ​​nhất định có ý nghĩa tuy nhiên trong vương quốc bắt buộc là hoàn toàn vô dụng trong chức năng.
Ingo

11

Lý do chúng tôi ghi lại một chức năng là người đọc không muốn hoặc không thể đọc phần thân của chức năng. Vì lý do này, người ta nên ghi lại các chức năng lớn, ngay cả trong các ngôn ngữ chức năng. Không có vấn đề gì nếu nó dễ hiểu chức năng làm gì bằng cách xem xét triển khai của nó.


Một điểm tốt. Đặc biệt là nếu người đọc đang sử dụng một số thư viện được biên dịch và chỉ có thể thấy chữ ký chức năng tiếp xúc và nhận xét của họ. Họ sẽ không bao giờ thấy bản tự mô tả mã của bạn.
Thất vọngWithFormsDesigner

3

Các hàm nên được nhận xét, nếu chỉ riêng tên hàm và tên tham số không đủ để chỉ định hợp đồng .

// returns a list of Employees    <-- not necessary
def GetEmployeeList: ...

// returns a list of Employees sorted by last name    <-- necessary
def GetEmployeeList: ...

Tóm lại, hợp đồng xác định chức năng mong đợi và những gì nó đảm bảo. Nói một cách chính xác, nếu GetEmployeeListtrả về một danh sách đã được sắp xếp nhưng không nói như vậy trong tên hàm hoặc nhận xét, người tiêu dùng của chức năng này không được dựa vào hành vi này. Đó là một chi tiết triển khai không có giấy tờ và tác giả GetEmployeeListcó quyền tự do thay đổi hành vi này bất cứ lúc nào.


2

Bản thân nhận xét không nên chứa một mô tả thay thế cho những gì mã thực hiện (mà thực sự được thể hiện bằng chính mã), mà là giải thích về lý do tại sao mã được viết theo cách của nó.

Điều đó nói rằng, tôi không thấy bất kỳ lý do tại sao một bình luận nên mỗi gia nhập thể khác nhau trong một ngôn ngữ chức năng.


1

Tôi có cùng một cách tiếp cận để ghi lại tất cả các mã của mình:

  • Sử dụng tên mô tả,
  • Thêm nhận xét trước bất kỳ logic phức tạp hợp lý nào nếu logic phức tạp không thể tránh được,
  • Viết tổng quan về toàn bộ hệ thống,

Nếu tên và loại chữ ký không cho bạn biết chính xác chức năng đó là gì, thì bạn thường làm sai.


0

Ở tuổi 25 bạn có xu hướng nhớ mọi thứ tốt hơn nhiều. Khi bạn già đi và bạn tham gia vào nhiều hệ thống với mã kế thừa (vâng, mã bạn viết hôm nay sẽ là mã kế thừa trong vòng 10 - 15 năm), nó có thể rất hữu ích nếu có ý kiến.

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.