Ruby初心者の学習過程まとめ記事#6

#はじめに
こんにちは。
この記事はRuby初心者の私がRubyを学習した過程をまとめた記事です。
目的は学習した内容を自分の手でまとめることで知識の定着をさせることです。
また、公開する事でたくさんの人の意見を聞くことが出来れば幸いです。
恐縮ではありますが、間違っている箇所や改善点があればご教示願います。

#学習環境
環境：AWS Cloud9
バージョン：Ruby２.５.1
教材：Udemy "はじめてのRuby on Rails入門-RubyとRailsを基礎から学びWebアプリケーションをネットに公開しよう"

#繰り返し処理each
構文

配列orハッシュ.each do |変数|
　　繰り返し実行したい処理
end

要素を順番に取り出しながら変数に代入していき処理をくりかえす
変数名は基本的に配列名の単数系で表す

例：配列playersから要素を取り出して出力する

```qiita.rb
players = ['Seiya Suzuki', 'Hayato Sakamoto', 'Munetaka Murakami']
players.each do |player|
    puts "Hello,#{player}"
end
```
出力結果

```
Hello,Seiya Suzuki
Hello,Hayato Sakamoto
Hello,Munetaka Murakami
```
解説：配列playersの要素を順番にplayerに代入してHello,の後に出力

例：ハッシュnamesからキーと値を取り出して出力する

```qiita.rb
names = {name1: 'Kensuke', name2: 'Naoto', name3: 'Takato'}
names.each do |key,name|
    puts "キー『#{key}』の値は『#{name}』です"
end
```
出力結果

```
キー『name1』の値は『Kensuke』です
キー『name2』の値は『Naoto』です
キー『name3』の値は『Takato』です
```
解説：ハッシュnamesからキーと値を順番に取り出しそれぞれkey,nameに代入して出力

#繰り返し処理for
構文

for 変数 in 配列orハッシュ do
　　繰り返したい処理
end

注意点
・forは原則使わない（慣習としてeachでもforでも書けるときはeachを用いる）

例：先程のハッシュをforで出力

```qiita.rb
for key,name in names do
    puts "キー『#{key}』の値は『#{name}』です"
end
```
出力結果

```
キー『name1』の値は『Kensuke』です
キー『name2』の値は『Naoto』です
キー『name3』の値は『Takato』です
```
解説：ハッシュnamesからキーと値を順番に取り出しそれぞれkey,nameに代入して出力

#繰り返し処理times
構文

繰り返し回数.times do |i|
　　繰り返し実行したい処理
end

※|i|は繰り返し回数が代入されるだけなので省略可能

用途：配列を使わずに単純にn回処理を繰り返したい時に便利

例：ピザって10回言ってって言われた時の処理

```qiita.rb
10.times do
    puts 'ピザ'
end
```
出力結果

```
ピザ
ピザ
ピザ
ピザ
ピザ
ピザ
ピザ
ピザ
ピザ
ピザ
```
解説：繰り返し回数を10回に設定してピザと出力

#繰り返し処理while
構文

while 条件式 do
　　繰り返し実行したい処理
end

指定した処理が真である場合に繰り返す
※無限ループに注意。指定した処理が偽にならないと終わらない。もしなったらcontrol+Cキーで強制終了

例：変数iが5になるまで出力

```qiita.rb
i = 0
while i<=5 do
    puts i
    i += 1
end
```
出力結果

```
0
1
2
3
4
5
```
解説：変数iが5以下の時に処理を実行。iを出力した後にインクリメント。

#繰り返し処理upto
構文

開始値.upto(終了値){|n|繰り返し実行したい処理}

nからmまで数値を1ずつ増やしながら何かしらの処理を実行したい場合に使う
※|n|はその時の数値を代入するだけなので省略可能

例：1から5まで数値を増やしながら今の数値を出力

```qiita.rb
1.upto(5){|n|puts "今の数値は#{n}です"}
```
出力結果

```
今の数値は1です
今の数値は2です
今の数値は3です
今の数値は4です
今の数値は5です
```
解説：開始値1終了値5の間に今の数値をnに代入して出力

#繰り返し処理downto
構文

開始値.downto()終了値{|n|繰り返し実行したい処理}

nからmまで数値を1ずつ減らしながら何かしらの処理を実行したい場合に使う
※|n|はその時の数値を代入するだけなので省略可能

例：5から1まで数値を減らしながら今の数値を出力

```qiita.rb
5.downto(1){|n|puts "今の数値は#{n}です"}
```
出力結果

```
今の数値は5です
今の数値は4です
今の数値は3です
今の数値は2です
今の数値は1です
```
解説：開始値5終了値1の間に今の数値をnに代入して出力

#繰り返し処理step
構文

開始値.step(上限値,一度に増減する大きさ){|n|実行したい処理}

nからmまでxずつ値を増やしながら何かしらの処理を実行したい時に利用

例：1から9まで値を2ずつ増やしながら今の数値を出力

```qiita.rb
1.step(9,2){|n|puts "今の数値は#{n}です"}
```
出力結果

```
今の数値は1です
今の数値は3です
今の数値は5です
今の数値は7です
今の数値は9です
```
解説：開始値1終了値9の間に2ずつ数値を増やしながら今の数値を出力

#繰り返し処理loop
構文

loop do
　　繰り返し実行したい処理
end

あえて無限ループを作りたい時に利用する
無限ループはcontrol+Cキーで強制終了

例：変数i（i=1）を1ずつ増やして今の数値を出力

```qiita.rb
i = 1
loop do
    puts "今の数値は#{i}です"
    i += 1
end
```
出力結果

```
今の数値は1です
今の数値は2です
今の数値は3です
・・・
・・・
#無限に続く
```
解説：変数iを1ずつ増やして無限ループさせた

#ループを終了・スキップする方法
ループを終了させる：break if 終わらせたい条件
ループをスキップする：next if スキップしたい条件

例：先程の無限ループをiが9になった時に終了させる

```qiita.rb
i = 1
loop do
    puts "今の数値は#{i}です"
    i += 1
    break if i > 9
end
```
出力結果

```
今の数値は1です
今の数値は2です
今の数値は3です
今の数値は4です
今の数値は5です
今の数値は6です
今の数値は7です
今の数値は8です
今の数値は9です
```
解説：iが9より大きくなった時にループを終了させる

例：先程の無限ループをiが偶数の時にスキップさせる(iが9で終了)

```qiita.rb
i = 0
loop do
    i += 1
    break if i > 9
    next if i % 2 == 0
    puts "今の数値は#{i}です"
end
```
出力結果

```
今の数値は1です
今の数値は3です
今の数値は5です
今の数値は7です
今の数値は9です
```
解説：iが偶数の時にスキップ。iが9の時に終了。

#まとめ
今回は繰り返し処理についてまとめました。次はクラスについてまとめます。