Perl で不自由ないんだからいまさら新しいインタプリタ言語勉強する気になれない。ってずっと思ってたけど Ruby on Rails 勉強しようということで Ruby の勉強はじめました。いまこの本読んでます。
まだ数章しか読んでないけど、とりあえず気づいたことのメモ。
すべての変数がオブジェクト
Java の変数にはプリミティブ型とリファレンス型の 2 種類あって、プリミティブ型の変数はオブジェクトではないけど、 Ruby の変数は全部リファレンス型でオブジェクト。
なので、整数もオブジェクト。
なので、こんなことが出来る。
irb(main):001:0> puts 10.to_f ← 10 を Float に変換し表示 10.0 => nil irb(main):002:0> puts 10.class ← 10 の Class を表示 Fixnum => nil irb(main):003:0> puts 10.to_f.class ← 10 を Float に変換し Class を表示 Float => nil
なんか SmallTalk みたい。
ブロックを関連づけたメソッド呼び出し
なんのこっちゃ。って感じですが。要はクロージャとかコールバックとかそんな感じです。
例えば 1 から 10 までを表示するような処理を行いたい場合、 Perl では
for($i=1; $i<=10; $i++) {
print "$i\n";
}
となるけど、 Ruby では
irb(main):013:0> 1.upto(10) do |i| ← 1 から 10 まで do ~ end ブロックを実行 irb(main):014:1* puts i irb(main):015:1> end 1 2 3 4 5 6 7 8 9 10 => 1..10
のように書ける。
Perl の for は制御構文なのに対して Ruby の upto はブロックが関連づけられたメソッドとなっている。
他にも例えば配列(Array オブジェクト)に対して
irb(main):016:0> array = [1, 3, 5, 7] => [1, 3, 5, 7] irb(main):017:0> array.each do |x| irb(main):018:1* puts x irb(main):019:1> end 1 3 5 7 => [1, 3, 5, 7]
みたいなことが出来たり、 Ruby ではブロックを関連づけたメソッドでループを処理するようなコーディングが好まれている模様です。
