Skip to content

Instantly share code, notes, and snippets.

@i09158knct
Last active October 4, 2015 13:18
Show Gist options
  • Save i09158knct/2643569 to your computer and use it in GitHub Desktop.
Save i09158knct/2643569 to your computer and use it in GitHub Desktop.
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`
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment