Personal tools
You are here: Home ブログ 井上 Rubyの好きなところと嫌いなところ
« July 2008 »
Su Mo Tu We Th Fr Sa
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    
Recent entries
Software Design 2008年2月号「Emacsマスターへの道」の原稿を公開 inoue 2008-07-25
Grails勉強会 inoue 2008-07-22
AirOne v4.8.5リリースしました inoue 2008-07-09
プレゼン文化の違い inoue 2008-07-07
IBMには悪いですが、Notesの正統な後継者の一番手はsalesforceかもしれない、という思い inoue 2008-07-04
質問が来たので答えてみる inoue 2008-07-03
プログラマの理想の採用 inoue 2008-07-01
最近アリエルで流行ること、グリーンコンピューティング inoue 2008-06-27
ningアプリ inoue 2008-06-23
Rails(ActiveRecord)のJOINのイディオム inoue 2008-06-17
久々にCで面白いバグ(解答篇) inoue 2008-06-13
久々にCで面白いバグ(読者への挑戦状篇) inoue 2008-06-12
Recent comments
Re:Software Design 2008年2月号「Emacsマスターへの道」の原稿を公開 elim 2008-07-25
Re:Rails(ActiveRecord)のJOINのイディオム inoue 2008-06-20
Re:「ピアレビュー」を読みました Anonymous User 2008-05-12
Re:「ピアレビュー」を読みました inoue 2008-05-10
Re:「ピアレビュー」を読みました Anonymous User 2008-05-09
Re:「ピープルウェア」再読 inoue 2008-04-20
Re:僅か30分で3つのバグ - Rubyの落し穴 - inoue 2008-04-20
Re:僅か30分で3つのバグ - Rubyの落し穴 - rubikitch 2008-04-19
Re:ソフトウェアインスペクションの試行 horii 2008-03-31
Re:「ピープルウェア」再読 anaka 2008-03-31
Re:WEB+DB Press Vol.43の記事への指摘 yanagisawa 2008-03-25
Re:マルスケと月刊I/O あなか 2008-03-23
Categories
カテゴリなし
 
Document Actions

Rubyの好きなところと嫌いなところ

最初、Rubyのブロックを良いとは思いませんでした。他の言語の経験もあるので、概念自体はすぐに分かりました。スコープを考えなければ関数オブジェクト、スコープを考えればクロージャが、引数に見えないシンタックスで引数で渡る仕組みです。良いと思わなかった点は、どうせ関数オブジェクト(クロージャ)作っているなら、作っていることが明示的な方が良いし、引数で渡すなら、引数らしく見える方が良いと思ったためです。JavaScriptやLispのように、記述が明示的な方が良いと思ったのです。

慣れというのは恐ろしいもので、今はRubyで一番好きなところがブロックです。明示的に関数オブジェクトを作っていないように見えることや、引数に見えないことが、これほどの表現力を生むとは予想外でした。railsもまあまあですが、rakeの方が感動しました。

以前なら、プログラミング初心者に、Perl、Python、Rubyは何が違うんですか、と聞かれたら、似たようなものです、シンタックスは違いますが、それはささやかな違いです、と答えていました。シンタックスの違いは、Lispぐらい違えばともかく、Perl、Python、Rubyぐらいの差ならささやかなものだと思っていました。Rubyを知って、考えを改めました。小さなシンタックスの違いが大きな表現力の差を生むからです。

嫌いなところもあります。一番嫌いな部分は、ローカル変数の参照とメソッド呼び出しの区別をするために、コードの上に向かって(ローカル変数の)初期化があるかを探さなければいけない点です。

次のようなコードがある時、barがローカル変数の参照なのかメソッド呼び出しなのかを知るために、引数にbarがあるか(あればbarは引数のbar)、コードXの部分に bar = の行があるかを調べる必要があります。

def foo(引数)
  ...コードX...
  p bar
end

もう少し具体的に書くと次のようになります(かなり恣意的なコードです)。

#!/usr/bin/ruby
class My
  def initialize
    @foo = 2
  end
  def foo
    p 'foo called'
    @foo
  end
  def foo=(n)
    p 'foo= called'
    @foo = n
  end

  def doit
    p foo             # メソッドfooの呼び出し
    foo = 0           # ローカル変数fooの初期化
    p foo             # ローカル変数fooの参照になる
    self.foo = 1      # メソッドfoo=の呼び出し
    p self.foo        # メソッドfooの呼び出し
  end

end

obj = My.new
obj.doit

何が一番気にいらないかと言うと、=のついたメソッド(上の例で言えばfoo=)は必ずself付きで呼ばざるを得ない非対称性です。名前が被った時にselfで限定しなければいけない問題(上の例で言えばself.foo)は、JavaでもC++でもあるので気になりませんが、self.foo=に関しては、文法規則と被るので限定しなければいけない点が気持ち悪いです。

慣れとは恐ろしいもので、まあ別にいいか、という気分にもなっていますが。

The URL to Trackback this entry is:
http://dev.ariel-networks.com/Members/inoue/ruby-love-and-hate/tbping
Add comment

You can add a comment by filling out the form below. Plain text formatting.

(Required)
(Required)
(Required)
This helps us prevent automated spamming.
Captcha Image


Copyright(C) 2001 - 2006 Ariel Networks, Inc. All rights reserved.