« Rubyを始めてみる | トップページ | カラオケ »

2008年9月 3日 (水)

hello, world

まずはhello, worldからでしょってことで、3回hello, worldを表示するスクリプトを作ってみた↓

3.times do
  print "hello, world!\n"
end

3回「hello, world!」を表示する、ということを的確に表現できてるなぁと感心。

このコードのポイントは2つあるみたい。

  1. 「3」という数値もオブジェクトであるということ
  2. メソッドにブロックというコードの固まりを引き渡せるということ

ポイント1は、ずーーーーーっとC(とちょこっとC++)だった私には違和感がある。Rubyでは、とにかく全てがオブジェクトらしい。つまりプリミティブ型が存在しないということ。

ポイント2はまだよく理解していないんやけど、Rubyの神髄の機能らしい。「3.times do~end」は一見制御構文のように見えるけど、実態はメソッド呼び出しに過ぎない。

「3」というオブジェクトのtimesメソッドに「print "hello, world!\n"」というコードを引数として渡していると。で、timesメソッドでは自オブジェクトの回数(ここでは3)分ループで「print "hello, world!\n"」というコードを実行している(ということでいいのかな?)。ブロックはコールバック関数みたいなものと認識した。ふーんって感じ。

たった3行のコードでも奥が深いもんだ。

|

« Rubyを始めてみる | トップページ | カラオケ »

Ruby」カテゴリの記事

コメント

ポイント2の構文は制御文っぽいけど実は
コードを渡せるというこのRubyのポイントは、
結局何に影響してくるんだろう??

制御文とは違うメリットか何かがあるのかな?
これからもこれ読んで勉強に便乗

投稿: High16 | 2008年9月 4日 (木) 10:11

> High16

イテレータ(制御構造の抽象化)が簡単に使えるというのが理由の一つかな?
このスクリプトと同じことをCで書こうとすると

int i;

for (i = 0; i < 3; i++) {

  printf("hello, world!\n");

}

って感じになるよね。これだと境界条件チェックの部分でバグる可能性がある。同じループを何回も使えばそれだけ危険性も増す。でもイテレータを使うと境界条件なんて気にしなくてよくなるよね。

投稿: きたへい | 2008年9月 4日 (木) 23:29

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック


この記事へのトラックバック一覧です: hello, world:

« Rubyを始めてみる | トップページ | カラオケ »