■他の言語になれた人がRubyに躓く n のポイント
Ruby はちょっと特殊なプログラミング言語なので,他の言語になれた人は,ちょっと戸惑うかもしれません.そんな躓きそうなポイントを紹介していきます.
□オブジェクト指向
Ruby はプロトタイプ型オブジェクト指向です.オブジェクトにメソッドを定義し,それを dup によって複製しながらオブジェクトを作っていきます.
a = Object.new def a.foo p "foo" end b = a.dup
□複数のメソッド定義
複数のメソッドを定義する場合,ruby では,def ではなく,method_missing という機能を使うのが一般的です.
def a.method_missing mid, *args case mid when :bar p "bar" when :baz p "baz" end end
簡単に,bar と baz というメソッドを定義することができました.
□メソッド呼び出し
send という構文を使います.さっきの例だと,foo メソッドは次のように呼び出します.
a.send("foo")
□数値計算
Ruby では,数値計算を行う場合,.+(),.-() みたいな書き方をします.
# 例えば,1+2*3 を計算する場合 result = 1.+(2.*(3))
このように書くことで,優先順位に迷うことが無くなります.
□繰り返し
Ruby では,i 回繰り返しをするためには,メソッドの動的再定義と,再帰を使います.
def kurikaeshi i if i.<(0) def kurikaeshi i end else # ここに繰り返したい処理を書く end kurikaeshi i.-(1) end kurikaeshi 10 # 10 回の繰り返し
動的に定義を変更できる Ruby ならではですね.
飽きた.全部 lambda で書くんだった.
■他の言語になれた人がRubyに躓く n のポイント
Ruby はちょっと特殊な関数型プログラミング言語なので,他の言語になれた人は,ちょっと戸惑うかもしれません.そんな躓きそうなポイントを紹介していきます.
□関数定義
関数は次のように定義します.また,次のように呼び出します.
(#defun foo = (lambda{|x| (p (x))}) ) (foo.call("foo")) #=> foo を表示
もちろん,関数は高階ですので取り回すことも可能です.
ちなみに,Ruby 1.9 では lamda と綴れない人のために,-> という記号が利用できることになりました.
(#defun foo = (->(x) {(p (x))}) ) (foo.call("foo")) #=> foo を表示
□バインド
次のようにすることで,変数へ値をバインドすることができます.
(#set x = 1 ) (p(x)) #=> 1
□条件分岐
条件分岐は次のように書きます.
( (a.> (10)) ? # 条件式 (p("bigger than 10")) : # THEN式 (p("lower or equal than 10")) # ELSE式 )
うーん,イマイチ.
初自転車.お台場の船の科学館まで.30km くらい.年末はまったく運動できなかったので,体がなまりきってる感じ.
寒すぎる.ウインドブレーカー的なものが必須だった.関係無いけどウインドブレーカーって,なんか中二病ちっくな語感.
飲酒と起きていることが両立できなくなってきたので僕も飲まなかった