ループ

p.57内容を読んで "ループ"より"リピート"じゃないのと思っちゃいました。

while

プログラミングではしばしば、コンピュータに同じことを何度も繰り返し行なわせたくなることがあると思います。これこそがコンピュータの得意技なのです。 (略)
コンピュータは飽きることを知らないので止める方法を教えないと自動的に止まることはありません。ということで、ある特定の条件が正しい(true)間 (while)、プログラムのある部分を繰り返すようにコンピュータに教えることにします

リファレンスを読んでも理解しづらい、実際コードを実行してみましょう。

input = '一休さん'
while input != 'さようなら'
  puts input
  input = gets.chomp
end

puts 'また来てね'

なるほどけっこう楽しいな。言葉で説明するより実行結果見た方がわかるかも。

moomin:ProgrammingRuby tomomi$ ruby whileend.rb
一休さん
一休さん
一休さん
とんちんかんちん
とんちんかんちん
気にしない
気にしない
ららら
ららら
れれれ
れれれ
おじさん
おじさん
のんのん
のんのん
にょろ
にょろ
ムー民
ムー民
さようなら
また来てね

while以下を直訳してみると

  • input情報結果が ("さようなら"と異なってますか?=true)の間は入力を繰り返し、 =falseになれば(つまりinputが"さようなら"になれば)endし、"また来てね"を出力します

ここで発生した疑問

  • whileをuntilに置換えたらどうなるか(直訳感覚だと untilの方がすっきり感があるようにおもう)

untilに置換えてみる

input = '一休さん'
until input == 'さようなら'
  puts input
  input = gets.chomp
end

puts 'また来てね'

おお出た!やっぱり!こっちの方がきれいじゃないかしら。自分はuntilを使った方がしっくりきますね。

  • while → until にした時の変更点
    • while input != 'ごにょ'→ until input = = 'ごにょ' )

リファレンス(p.57)にはwhileの使用例しか書かれていないが、なんでも一度トライしてみるといい。

moomin:ProgrammingRuby tomomi$ ruby whileend.rb
一休さん
一休さん
一休さん
とん
とん
 ちん
ちん
かん
かん
さようなら
また来てね

ややこしい。