Monthly archives: 1月, 2015

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さんよろしくお願いします!


この記事のトラックバック用URL - http://mashi.exciton.jp/archives/28/trackback


wordpressはじめました。

ワードプレス、気なってはいたんだけど、ようやく入れてみました。
CMSとして使ってるのをよく目にはしてて、便利そうだなーとは思ってたんですが、活用できそうな機会がなかなかなかったので、スルーし続けてました。

ちょこちょこ技術的なことの覚書なんかも書いておきたいなーとおもってたので
ブログつけてこうと思います。



この記事のトラックバック用URL - http://mashi.exciton.jp/archives/14/trackback