2012-01-27 15 views
16

ジェネレータを返す関数をどのように指定しますか(つまり、return fooではなくyield fooを使用します)。ジェネレータを返す関数の名前

  • Fooの値を返さないので、間違いなくgetFoo()ではありません。
  • おそらくfoos()ではないでしょう。なぜなら、わかりやすい接頭辞を持っているからです。
  • listを返さないため、正確にはlistFoo()ではありません。
  • この接頭辞が長すぎるため、おそらくiterateFoo()ではありません。

どのような解決策がありますか?

更新:

foos()は、メソッド名は動詞で始まる傾向があるかに注意し、いくつかのケースでは完全に良い解決策かもしれないが。動詞は、これがメソッドであり、データフィールドではないという考えを伝えるので、読みやすくなります。可能であれば、メソッドをデータフィールドから簡単に伝えることができるソリューションが望まれます。

+4

誰がプレフィックスは良いことだと言っていますか? 'foos'はどうして完全にはっきりしないのですか? – delnan

+0

思考:genFoo() – sgallen

+0

これは@delnanと一緒です。 'foos'が正しく聞こえる。どのように繰り返し可能なもの(例:リスト)の名前を付けますか? – zrxq

答えて

2

いくつかの簡潔な提案:

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

あなたは、通常は必要ありませんので、ジェネレータがあなたのすべてのフオを得るためには、ジェネレータの特定の機能がより興味深い名前を示唆するのはかなり一般的です。

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

...ソフトウェアエンジニアリングの基本原則の1つは、データベースが常に**存在していることですjerkface ...;) –

+4

CamelcaseはPEP8に準拠しているとは見なされません(PEP8はジェネレータについては明示されていません)。 –

0

genFoo()

(...といくつかの余分な言葉この解決策は、少なくとも30文字があることを確認)

14

私はfooまたはfoosと考えています。または、Python2の辞書のiteritemsを模倣するには、iterfooを使用できます。

4

何が何をしているのかを示す有益な名前を付けることをお勧めしますが、関数の戻り値の型を示すには、必ずしもHungarian notationを使用する必要はありません。

戻り値の型は、おそらくコメントやdocstringの中で文書化する必要がありますが、私はfoos()getfoos()、またはget_foos()のようなものは、名前のために最善であることを示唆しているでしょう。

これがジェネレータであることを明示したい場合は、itervalues()のようなPython 2のdictメソッドとの類似点についてiterfoos()を提案します。

リストを返すために使用される多くの組み込み関数は、現在のPython 3(map()dict.values()など)で発電しているので、シーケンスを返すあなたの機能もあなたならば発電しているとき、それは誰も驚かないことを覚えておいてくださいそれをgenerate_foos()または他のバリエーションとは呼んでいませんでした。

3

最も正確には、次のようになります。

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

あなたはそれを使用する理由はかなり明らかでありながら機能はありません特に言います。

関連する問題