Python より Ruby

うへぇ、風邪ひいた。。。
人と話していると喉の痛みが地味にこたえる。ネットのテキスト文化万歳!


ここ一週間くらい RubyPython を学んでるんだけど、小規模のスクリプトを書くにあたって俺にあっているのはどうやら Ruby のようだ。
俺の感じたそれぞれの言語の良い点と悪い点を箇条書きしてみると、

  • Python
    • 良い点
      • 標準ライブラリが豊富
      • インポートすべきライブラリは多いものの、一つの import で複数のライブラリをインポートできる
      • 意外と処理速度が速い
    • 悪い点
      • 何故か map(), len() といったものがメソッドではなく組み込み関数
  • Ruby
    • 良い点
      • 不自然な組み込み関数がない
      • map, select といったものが自然に使える
    • 悪い点
      • then, do, end が気持ち悪い
      • require 'hoge' と一度に一つしかインポートできない上、クオートするのが面倒

なんともまぁいい加減すぎる比較だけど。
シェルスクリプトでやるには荷が重いけど、わざわざ C で書くのも面倒なときに使う言語」という観点からの比較としてはアリだと思ったり。

Python に関して

よく宣伝文句として聞くものとして「インデントと制御構造が一致している」「可読性が高い」「見た目が美しい」があるが、
最初の2つは同意するけど「見た目が美しい」というのにはあまり同意できない。
一番気になる場面の一つは

for i in list:
  init()
  # do some work
  cleanup()

このように、各 list の要素に対して何らかの処理をして終わり!ってときに、スクリプトの最後がタブで終わること。
この見た目は全然美しくないと俺は感じる。


map(), len(), all() などがリスト型のメソッドでなく組み込み関数なのは致命的にダメ。
今までオブジェクトなカンジに思考してコーディングしてたのに、この組み込み関数を使うときに途切れてしまってなんとも気持ち悪い。


それとこれは一長一短な点だけど、メソッドの呼び出しにパーレンが必須なのもちょっとめんどくさい。
まぁそのおかげで部分適用が可能になるわけだけど。

Ruby について

オブジェクト指向が細部に至るまで徹底されていて、気持ち悪さがない。
その上、ブロック付きメソッドのおかげで関数型言語のラムダ的なコーディングも可能。
これらのおかげで、本当に自然にコーディングできる。


Ruby で一番嫌なのが then。
ぶらさがりの else の問題もあるから、その意味ではありがたいのかもしれないけど、なんかこれだけ気持ち悪く感じる。

というわけで、「高機能なシェルスクリプト」としては Ruby のほうが俺にあってるかなぁと。
クラスを使い始めたらまた事情も変わってくるのかもしれないけれど。