カテゴリー「Ruby」の記事

2008年10月30日 (木)

Ruby オブジェクトの情報を見るには「p」を使う

p関数を使えばオブジェクトを人間に分かりやすい表現で表示してくれる。

これはデバッグする際に便利。

サンプルコード↓

# 文字列
string = "hello, world!"
p string 

# 配列
ary = [1, 2, 3]
p ary 

# クラス
class Sample
end
p Sample.new

出力↓

"hello, world!"
[1, 2, 3]
#<Sample:0x2f21c6c>

p関数についての詳細はこちら

| | コメント (0) | トラックバック (0)

2008年9月 7日 (日)

配列とイテレータ

今日は配列について調べてみた。

array = [1,2,3,4,5,6,7,8,9] 

array.each do |i|
  print i
end 

print "\n" 

array.each_index do |i|
  print array[i]
end

このスクリプトは配列の要素を順に表示するもの。

出力

123456789
123456789

ポイント

  1. 配列は[]で直接定義できる
  2. 配列もオブジェクト
  3. ブロックにはパラメータを付けることができ、||で囲んで定義する
  4. eachメソッドで全配列要素にアクセスできる
  5. each_indexメソッドの全配列要素のインデックスにアクセスできる
  6. array[i]でarrayのi番目の要素にアクセスできる

ポイント3以外はそんなもんなんだと理解。ポイント3だけちょっと難しかったな。

前回の記事でブロックについて書いたけど、そのブロックは引数を取ることができるみたい。それが|i|の部分。eachメソッドやeach_indexメソッドで引数を与えてブロックをコールバックしてると考えればいいのかな。

| | コメント (3) | トラックバック (0)

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行のコードでも奥が深いもんだ。

| | コメント (2) | トラックバック (0)

2008年9月 2日 (火)

Rubyを始めてみる

私はスクリプト言語がろくに使えない。

今の仕事ではスクリプトが書けると結構便利な状況が多いので、この際Rubyを勉強してみることにした。

なぜRubyなのかというと、「プログラムを書くのが楽しくなる」というテーマに基づいて設計された言語であるというところに惹かれたため。

とりあえず開発環境の準備。ザウルスのコンソールでガリガリ書いてもええんやけど、やっぱり統合開発環境が便利だろうということで調べてみたところ、「RDE」と「Eclipse+RDT」の2つがヒット。

ざっと使ってみたところRDEよりもEclipse+RDTの方が使いやすかった(Eclipseを使ったことがあるからそう感じただけかもしれないけど)のでEclipse+RDTにしたよ↓

Eclipse + RDT

Eclipseのインタフェースがそのまま使えるので慣れていると便利。

今後は小さなスクリプトを書いて慣れていこうと思う。作ったスクリプトはブログにも書く予定。ブログに書いておくと仕事中に参照できるので便利なんよね。

| | コメント (3) | トラックバック (0)