繰り返し処理を行う「while文」「for文」、要素を順に取り出す「eachメソッド」について解説します。
while文
一定の条件を満たしている時、指定した処理を繰り返し行うことができる。記入方法は以下の内容です。
while 条件を記入 do
処理内容 # 条件がtrueの間処理を繰り返す
end
number = 1
while number <=3 do
number += 1
end
【結果】
1
2
3
【詳細】
1.number = 1と定義する
2.number が3になると終了するような条件式
3.number を画面に出力させる
4.number に1ずつ足していく
5.繰り返しを終了させるend
【その他】
条件を設定するときに!=とすることで一致しないときは、など設定も可能。
for文
whileと異なり順番に値を表示してくれるものが、for文です。
for ~ in ~ do を記述することで、endまでの処理を繰り返し実行。
for 変数 in 範囲、ハッシュ、配列などを指定 do
処理
end
for number in 1..5 do
puts number
end
【結果】
1
2
3
4
5
【詳細】
1..5とすることで1~5までの範囲を示す。
eachメソッド
指定したデータから「eachメソッド」で、オブジェクト内の要素を順に取り出す。
||で囲ったものがブロック変数になります。「do~end」までの範囲がブロック。
<% @books.each do |book| %>
members = {"taro"=>1, "jiro"=>2, "ace"=>3}
members.each do |name, id|
puts "#{name}は#{id}番です。"
end
【結果】
taroは1番です。
jiroは2番です。
aceは3番です。
【詳細】
ハッシュタグの内容を順にキーをname、値をidに代入して繰り返す。
実例
投稿のタイトルや感想の一覧を掲載するときに使用したものです。
<table>
<thead>
<tr>
<th>タイトル</th>
<th>感想</th>
<th></th>
<th colspan="3"></th>
</tr>
</thead>
<tbody>
<% @books.each do |book| %>
<tr>
<td><%= book.title %></td>
<td><%= book.body %></td>
<td><%= link_to 'show', book %></td>
<td><%= link_to 'edit', edit_book_path(book) %></td>
<td><%= link_to 'destroy', book, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
</tbody>
</table>
【解説】|book|という変数を立てて@booksに保存されているデータを表示しようというものです。データの中でも欲しいもの、title・bodyなどを表示するためbook.〇〇という形で記述。
【ワンポイント】
・edit_book_path(book) という記述がある。これはbookという記事1つずつに対してLinkを設定することができる。'edit'という文字リンクを作成しそれによって遷移できることを示している。
・data: { confirm: 'Are you sure?' } これによって削除の時に一度エラー分を発生させることができるようになる。
まとめ
繰り返し処理というものはRubyではよく使われている。ユーザーの情報や投稿記事の一覧などにも用いられるため必ずと言っていいほど使用しているため大切なところだ。
繰り返しの方法が様々あるためこれを確認して用途に合った繰り返しを行う必要がある。