ruby note no.1

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 ではブロックを関連づけたメソッドでループを処理するようなコーディングが好まれている模様です。

Comments are closed.