Enumerableモジュール
RubyのEnumerableで重要なメソッドとPythonのメソッドとの対応表は以下のもの。
Ruby | Python |
---|---|
collect | map |
find_all, select | filter |
inject | reduce |
sort_by | sorted |
また、Rubyの<=>は、Pythonのcmpと同等なもの。Pythonではmap、filterはもちろん関数でなくリスト内包表記を使用すべき。
この中で興味を持ったのが、sort_byでDSUで実装されているらしい。しかし、unstableなソートというのは中途半端な気もするが速度重視ということなのだろうか?
RubyのEnumerableモジュールはクラスにMix-inされるべきものでmax、minなども定義されているが、Pythonではmax、minは組み込み型の関数。Rubyは何でもMix-inしてしまおうという方針なのでクラスのメソッドが充実していて何でもできるが、Pythonでは代替方法がある場合は機能を重複させない方針なのでクラスには必要最小限のメソッドしかない。各クラスで共通なメソッドは特殊メソッドという形で含まれているが、驚くほど多いという訳ではない。
Rubyのメソッドが多いのは何でもできるが覚えにくい、Pythonのメソッドが少ないのはクラスを組み合わせないといけないが覚えやすい。どちらが良いのかは好みの問題かもしれない。