puts "hello"
"hello\n"と出力される。
Rubyはメソッドの括弧を省略できる。上の文は
puts("hello")
と同じ
Rubyは繰り返しも簡単にできる。
10.times do
puts "hello"
end
これは10回 puts "hello" を実行するという意味。 つまり do-endでくくられた部分を繰り返し実行する。 C言語風に書きたいなら、次のようにも書ける。
10.times {
puts "hello"
}
do-endが{}に置き換わっただけ。do-endと{}は厳密には扱いは違うけど、初めのうちは気にしなくても問題ない。
ちなみにこのdo-endや{}で囲まれている部分をブロックという。 上のプログラムを詳しく説明すると、timesメソッドにブロックを引数として渡して、timesメソッドがそれを10回繰り返し実行している、という感じ。(JavaScriptが分かるならブロックを無名関数、timesメソッドを高階関数とあてはめてみると分かりやすい)
でもそんなこと気にしなくても、ただ10回puts "hello"を繰り返してくれるプログラム、と覚えておけば問題ない。
次にこれを実行してみる。
10.times { |i|
puts i
}
多分どういう動作をしているのかすぐわかるはず。
|i|とは何か、timesは何をしたのか、詳しい解説は『初めてのRuby』を参照。
少し解説しておくと、iにはそのブロックを実行しているときのループ回数が入っている、ということ。
timesメソッドの他にも繰り返しができるメソッドがある。
1.upto(10) do
puts "hello"
end
意味は大体想像できると思うので省略。
次にこれを実行してみる。
1.upto(10) do |i|
puts i
end
これでtimesメソッドとuptoメソッドの違いが分かってくる。 つまりiの値を100から始めて150までループしたい場合は
100.upto(150) do |i|
puts i
end
とすればいいので使い勝手がいいということ。
以上
ちなみに、ここでは文字列リテラルを書くのに"hello"みたいにしてきたけど、実はこれはあまりいい書き方ではない。
Rubyの文字列リテラルの指定には二種類の方法がある。""と''である。この2つの違いは、「""のほうが遅い」ととりあえずは覚えておくべき。つまり先程の場合、"hello"は実行速度が遅いから'hello'と書くべき、ということ(もちろん実際にはほとんど実行速度に違いはない)
(追記)
とあるのでどちらでもよさそう。少し調べてみると、基本的には""を使うべきだというコーディング規約を上げているところもあれば、普段は''を使っているという人もいたりで、あまり深く考える必要はないらしい。(実際、sinatraのソースなど、同一ファイル内ですら両者の書き方が混在しているところもある)
参考
Rubyのシングルクォートとダブルクォートは、実行速度には差が無い /var/log/maeda.log
蛇足
values = [10, 20, 30]
puts values[0]
puts values[1]
values.each do |value|
puts value
end
puts rand
puts rand(5)
`ls` # `はバッククオート
`pwd`