プログラム言語「Ruby」で悩む
ちょっとしたプログラムを書くのにはPerlという言語を使っている。エレガントさには欠けるが強力な言語だ。配列を扱うのに強力な機能を持っている。
一方、20世紀末あたりから新しい傾向の言語がいろいろと出てきた。具体的に言うとPythonとRubyだが、Pythonはどうも好きになれないし、実際に使ってみてもメリットを感じなかった。
Rubyはなんだかライブラリが充実している(Ruby Rails)とかで、初心者が安易な気持ちで入門できるのかなぁ? という感じが嫌で食わず嫌いになっていた。
最近になってRubyが気になりだしたのは、その文法や構成がPerlを意識したものであるらしいと思ったからだ。いろいろな機能に「PerlでできることはRubyでも可能にするんだ!」という意思を感じる。それならPerlから乗り換えてもいいんじゃないか、と思った。
ところで、Rubyは「純粋オブジェクト指向言語:Pure Object-Oriented Language」なんだそうで、それってことは組み込みクラスとか組み込みメソドとかの情報をかなり覚えないといけない。
Perlのときは基本的なことを「Programming Perl」で学んだあとはデスクトップ・リファレンスだけを頼りに使ってきた。Rubyの場合は、特に急いでいるわけでもないのでデスクトップ・リファレンスだけでなんとか使えるようになってやろうか、という魂胆だ。
というのは、「Programming Perl」でさんざん苦労したからだ。この本は760ページもある本で、しかも内容には「……というのは冗談として」みたいな無駄話が多く、全部読み切るのに5年かかったのだった。
これらの本を並べてみるとこんなふうになる。プログラミングPerlが760ページ、そのデスクトップ・リファレンスが50ページなのだが、Rubyのデスクトップ・リファレンスはなんと156ページもある。「プログラミングRuby」という本も出ているはずだが、そのページ数は想像するだけでも恐ろしい。
しかし、Rubyのお勉強を始めてみると、これがなかなかの手ごたえで、同じことをperlとrubyで書くとこんなふうになる。どちらもわざわざchompしているのはprintで"\n"を明示したかったから。
<perl> while(<>){ chomp; print "$_\n"; } |
<ruby> while gets chomp print "#{$_}\n" end |
Rubyでこんなふう(perlふう)に書くのは可能ではあるけれども、Rubyの設計者(日本人)の意図とは違うようで、本来ならばこんなふうに「ファイルから一行ずつ読み込んで、終わりじゃないことをチェックし」「読み込んだ行を処理する」という構造じゃなくて、ファイルをストリーム・オブジェクトとして定義し、ストリームとして処理することを意図しているんじゃないだろうか。
それは私がPerlからRubyに移行しようかと考える一つの理由で、こういうのはもう古いんじゃないか、もうちょっと新鮮なやり方があるだろうと思うからだ。
いまさらオブジェクト指向が新鮮かというと、それにもちょっと疑問があるのだが、そのあたりを考え直すきっかけにもなったらいいなと思う。
オブジェクト指向については大昔にSmallTalkの仕様をさんざん読んだことがあって、その影響のためにC++の欺瞞性(オブジェクト指向の無理矢理な言い換え)がどうにも許せず、行き所を失っているというのが正直なところなので、Rubyがその回答になってくれればいいな、と思っている。時間はかかるかもしれないけれどもね。
| 固定リンク
「プログラミング」カテゴリの記事
- HTMLのaudioオブジェクトで悩む(2017.07.09)
- JavaScriptで悩む(2017.04.01)
- プログラム言語「Ruby」で悩む(2016.07.03)
- 苗字の漢字で悩む(2015.09.06)
コメント
chachaさんがいまだにコードを書いてるってのに驚き。
投稿: ををつか | 2016年7月 4日 (月) 07時11分
だって、コードを書くのは楽しいじゃないですか。部品を買いに行かなくてもいいし。必要な部品は自分で作れたりするし。
趣味のプログラミングなので、楽しみながらぼちぼちやっていきますよ。
投稿: PicksClicks | 2016年7月 4日 (月) 23時09分
私はハード指向が強いので部品を買いに行くの好きですよ、必要な動作は取りあえずハードロジックで考えてから「そうかワンボードの方が簡単だ」と気がつく方ですから。
投稿: ををつか | 2016年7月 5日 (火) 21時59分
部品を買いに行くのは好きなんですけどね。もう横浜ではそういう店はなくなったし。
投稿: PicksClicks | 2016年7月 6日 (水) 20時31分