やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

「Ruby プログラムの実行」を読む6(loop, times, upto, downto)

 ドキュメントにはなかったが、ググると他にもループする方法がこんなにたくさんあった。

成果物

情報源

loopブロック

loop { p 'LOOP'; break; }

 以下のようにも書ける。

loop do
  p 'LOOP'
  break
end

int#times

 構文。

回数.times {  }
回数.times {|i|  }
回数.times do ... end
回数.times do |i| ... end

 3回実行する。

3.times { p 'TIME' }
3.times {|i| p "#{i}回目" }
3.times do
  p 'TIME'
end
3.times do |i|
  p "#{i}回目"
end

 i0からはじまる整数値。

int#upto

 構文。

開始.upto(終了) {  }
開始.upto(終了) {|i|  }
開始.upto(終了) do ... end
開始.upto(終了) do |i| ... end

 1から3までの3回実行する。

1.upto(3) { p 'UPTO' }

 メソッドの()は省略できない。

1.upto 3 { p 'UPTO' }
syntax error, unexpected '{', expecting end-of-input (SyntaxError)

 ブロック引数iで添字を受け取れる。

1.upto(3) {|i| p "#{i}:UPTO" }
"1:UPTO"
"2:UPTO"
"3:UPTO"
5.upto(7) do |i|
  p "#{i}:UPTO"
end
"5:UPTO"
"6:UPTO"
"7:UPTO"
=> 5

downto

 uptoのデクリメント版。

 構文。

開始.downto(終了) {  }
開始.downto(終了) {|i|  }
開始.downto(終了) do ... end
開始.downto(終了) do |i| ... end

 3から1までの3回実行する。

3.downto(1) { p 'DOWNTO' }

 メソッドの()は省略できない。

3.downto 1 { p 'DOWNTO' }
syntax error, unexpected '{', expecting end-of-input (SyntaxError)

 ブロック引数iで添字を受け取れる。

3.downto(1) {|i| p "#{i}:DOWNTO" }
"3:DOWNTO"
"2:DOWNTO"
"1:DOWNTO"
=> 3
7.downto(5) do |i|
  p "#{i}:DOWNTO"
end
"7:DOWNTO"
"6:DOWNTO"
"5:DOWNTO"
=> 7

繰り返し制御

制御文 意味
break ループを中断して抜ける
next ループを中断して次のループへ遷移する
redo ループを中断して同じループをやり直す

 rescue内で使うretryもあってややこしい。でもループを制御するのは上記3つだけのはず。

 ググって判明した。redoはほかの言語になかったので新しい。

対象環境