PythonとRubyのふんわりとした比較
なんか新しい言語に手を出してみよう!
と思い立ったので、今風なLL言語でもやってみようと思います。
候補はPythonとRuby
この2つは割りと似たり寄ったりなので、好きな方をやればよいという話にはなる。
いろいろな比較をしてみてもだいたい似たような言語だ。
片方にやれてもう片方にできないということはほとんどなさそう
問題はどっちが好きなのかわからないので、戦ってもらいました。
細かい比較とかはよそに任せてふんわりと比較してみます。
●構文を比較!
サンプルプログラムとしてはゼロから入力値までの数を3で割ったあまりごとにカウントする関数という特に意味のないもの。
あまりがゼロのものだけ、インスタンス変数でカウントしてみている。
Rubyの構文
class Foo
def countModulo3(num)
modulo1 = 0
modulo2 = 0
@modulo = 0
for i in 0..num do
if i.modulo(3) == 1 then
modulo1 += 1
elsif i.modulo(3) == 2 then
modulo2+=1
else
@modulo++
end
end
return @modulo
end
楽しそう!とは思わなかった。とてもお行儀が良いという印象。
do then end end end…
ちなみにdo とか then は省略してもよいそうだ。
でもendは当然だが省略できないって!
C言語系やjavaなんかと比べると大括弧がないし、PHPみたいに$$$$とかないので
シフトあんまり押さないでも良さそうーという気はする
インスタンス変数が@だけでいいのは、楽な場面がちょこちょこ思い浮かぶ。でも妙に浮いてる気もする?
Pythonの構文
class Foo:
def countModulo3(self,num):
self.modulo = 0
modulo1 = 0
modulo2 = 0
for i in range(0, num + 1):
if i % 3 == 1:
modulo1 += 1
elif i % 3 == 2:
modulo2 += 1
else:
self.modulo += 1
return self.modulo
インデントのみでブロックを判断するという、なかなか思い切った構文
いろいろスッキリはしてるけど、なんだか少し不安にならないでもない。
スペースの数間違えただけでif文の終わりが変わっちゃう!
c言語のように、{}で囲って自由に記述できるようになっていて、インデントはお好きな様に。という方針だと
同じコードでもいくつかの書き方が生まれてしまうけれど、こうして和えて縛りをきつくすることで、多様性をなくしてるという側面もあるようだ
forループのカウントは配列を生成するrange関数をつかうのが定石のようだ
この辺りに余計なルールは極力増やさないという意思が感じられるような気がする
文法が簡素なのは最初は少し頼りない感じはあるんだけど慣れれば書くのは楽になりそうかな?
しかしend end end はどうも好きなれなさそうです。ごめんなさい。
Pythonさんよろしくお願いします!

mashi@exciton.jp
トラックバックURL - http://mashi.exciton.jp/archives/28/trackback