みずぴーかく語りき

なぜが今日はRubyについて2回も語ってしまったので、適当にまとめ。

要約

高階関数とevalがあるから、通常よりもメタなプログラミングができる。
なんでRubyはすばらしい。
これをRubyJavaとで比較することで説明した。

高階関数

高階関数というのは引数や返り値として関数を取ることのできる関数のこと。
あるいは、"処理"を引数として受け取る関数を書く事ができる。
例えば、配列全部に対して何か処理したいとする。
その場合、Javaだとこうなる。

// aが配列
for(int i = 0; i < a.length ; i++){
  int x = a[i];
  something(x);
}

でも、Rubyだとこうなる。

a.each{|x|
  someting(x)
}

こういう風に、Javaだと"お約束"(イディオム)のレベルでしかないことをプログラムできるのがすばらしい。
id:mzp20061010:1160493190も参考にどうぞ。

eval

evalというのは、Rubyプログラムを実行する関数。
例えば、

x = eval("1+2+3") # -> 6

これを使うとプログラムを動的に書き換えることができる。
例えば、最初だけ計算して、それ以降はその計算結果をキャッシュして返したいことがある。
こいつをRubyでやると、

def heavy()
  # ......
end

once :heavy

となる。
なんと、このonceは別に予約語でもなんでもなく、ごくごく普通の関数にすぎない。

ふう、こんなもんかな。Rubyistとしてのつとめは果たしたかな?