2012-01-27 38 views
16

Làm cách nào để đặt tên cho hàm trả về một trình tạo (tức là, sử dụng yield foo thay vì return foo)?Tên của hàm trả về máy phát

  • Chắc chắn không phải là getFoo() vì nó không trả về giá trị của Foo.
  • Có thể không phải là foos() vì tôi muốn có tiền tố dễ phân biệt.
  • Có thể không chính xác listFoo() vì không trả về số list.
  • Có thể không phải là iterateFoo() vì tiền tố này quá dài.

Giải pháp ưa thích của bạn là gì?

Cập nhật:

Trong khi foos() có thể là một giải pháp hoàn toàn tốt trong một số trường hợp, lưu ý cách tên phương pháp có xu hướng để bắt đầu với một động từ. Động từ truyền tải ý tưởng rằng đây là một phương pháp, không phải là một trường dữ liệu, và do đó giúp dễ đọc. Nếu có thể, tôi thích một giải pháp giúp dễ dàng nói một phương thức từ một trường dữ liệu.

+4

Ai nói tiền tố là một điều tốt? Làm thế nào là 'foos' không hoàn toàn rõ ràng? – delnan

+0

Một ý nghĩ: genFoo() – sgallen

+0

Tôi đang ở @delnan trên trang này. 'foos' nghe đúng. Làm cách nào để đặt tên cho một lần lặp lại (ví dụ: danh sách)? – zrxq

Trả lời

2

Một số gợi ý ngắn gọn:

getFoos() 
generateFoos() 
yieldFoos() 
allFoos() 

Vì bạn thường không cần một máy phát điện để có được tất cả các foos của bạn, nó khá phổ biến cho các chức năng cụ thể của máy phát điện để đề xuất một cái tên thú vị hơn:

getActiveFoos() 
getGreenFoos() 
getFoosMatchingCriteria(someCriteria) 
getFoosOverTheNetworkIfTheDatabaseIsntBeingAJerkface() 
+0

... nhưng một trong những nguyên tắc cốt lõi của kỹ nghệ phần mềm là cơ sở dữ liệu luôn ** một jerkface ...;) –

+4

Camelcase có thể không được coi là phù hợp với PEP8 (theo như tôi thấy nó PEP8 không rõ ràng về máy phát điện). –

0

genFoo()

(... và một số lời thêm đảm bảo giải pháp này có ít nhất 30 ký tự)

14

Tôi nghĩ rằng foo hoặc foos là các khả năng. Hoặc, để bắt chước Python2 dicts 'iteritems, bạn có thể sử dụng iterfoo.

4

Mặc dù thực hành tốt là có tên hữu ích cho biết điều gì làm, tôi không nghĩ rằng cần thiết phải sử dụng Hungarian notation để biểu thị loại trả về của hàm.

Loại trả về có thể được ghi lại trong nhận xét hoặc chuỗi tài liệu, nhưng tôi khuyên bạn nên làm như sau: foos(), getfoos() hoặc get_foos().

Nếu bạn muốn rõ ràng rằng đây là máy phát điện, tôi sẽ đề xuất iterfoos() cho sự giống nhau của nó với các phương pháp dict của Python 2 như itervalues().

Hãy nhớ rằng nhiều hàm dựng sẵn được sử dụng để trả về danh sách giờ đây là các trình tạo trong Python 3 (map(), dict.values(), v.v.), do đó, nó sẽ không làm ai ngạc nhiên khi các hàm của bạn trả về chuỗi là trình tạo ngay cả khi bạn không gọi nó là generate_foos() hoặc một số biến thể khác.

3

Các chính xác nhất sẽ là:

iterateFoo() 
iterate_foo() 
iter_foo() 
iterFoo() 

Bạn nói cụ thể những gì các chức năng thực hiện trong khi đang được khá rõ ràng lý do tại sao bạn sẽ sử dụng nó.

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