0. はじめに
rubyには、「繰り返し処理」というものが存在します。具体的なメソッドで言うと、eachやtimes, whileなどです。
この記事では、私がこれまでによく利用していたeachメソッドの、少し応用系である2つのメソッドを記していきます。あと追加で、私が開発中に作って没になった「好きな場所で繰り返しを止める」メソッドを紹介します。また、具体例では以下の配列を扱います。
array = ["一郎", "二郎", "三郎"]
1. each_with_index
【Ruby each_with_indexの書き方】
配列名.each_with_index do |item, i|
# 処理
end
array.each_with_index do |item, i|
puts "#{item}は#{i}番目です"
end
=>
一郎は0番目です
二郎は1番目です
三郎は2番目です
each_with_index
は、配列の要素地震が何番目なのか、そしてその番号(index)も処理で同時に扱うことができるメソッドです。indexを扱うことができる繰り返し処理で、処理内で一意性を与えたい時に特に用いていました。
しかし、配列のindexは0から始まります。数え初めが1である人間にとっては、少し馴染みにくい印象があります。そこで便利なのが、次のeach.with_index(数字)
メソッドです。
2. each.with_index(数字)
【Ruby each.with_indexの書き方】
配列名.each.with_index(開始させたい値) do |item, i|
# 処理
end
array.each_with_index(1) do |item, i|
puts "#{item}は#{i}番目です"
end
=>
一郎は1番目です
二郎は2番目です
三郎は3番目です
each.with_index(数字)
では、始まりの数字を指定できます。(上記例では始まりが"1")
このメソッドは自由度があり、意味もいくらか伝わりやすい気もします。使い分けが重要ですね。
3. 好きな場所で繰り返しを止める
具体例から示します。
例えば、5つの要素を持つ配列が存在するとします。この配列を2回繰り返し、3回目は要素の2つ目で繰り返しを止めたい、といった場合に使います(笑)。以下は例です。
配列:①②③④⑤
①②③④⑤ | ①②③④⑤ | ①②
↑ココマデ!
この場面で用いるのが、2個のtimes
メソッドと、繰返しを中断させるbreak
です。
3.times do |i|
5.times do |ii|
puts "#{ii}"
break if i==2 && ii==1
end
end
# 実際の結果
3.times do |i|
5.times do |ii|
puts "#{ii}"
break if i==2 && ii==1
end
end
=>
0
1
2
3
4
0
1
2
3
4
0
1
timesメソッドは、指定回数繰り返しを行います。
breakメソッドは、条件分岐により途中で繰返しを中断します。
これらを組み合わせて「好きな場所で繰り返しを止める」メソッドを開発しました。
まぁ、こんなメソッドいつ使うんだよ、って感じですけどね(笑)。
4. さいごに
最後までお読みいただきありがとうございました。
今回の記事のようにこれまで学習した内容について、徐々にアウトプットしていきたい。
自分がアウトプットした内容が誰かの役に立てば幸いです。
余談ですが...
今回この記事で扱った「繰り返し処理」というのは、プログラミング技術発達の過程で生まれた「構造化プログラミング」から優位的に導入されました。プログラムを遂行する三大ロジックのうちの一つです。
「繰り返し処理」の他には、「順次進行」「条件分岐」があります。
「順次進行」は命令を上から実行するロジック、基本的なロジックですね。
「条件分岐」は何らかの判定を行い、その結果で次の命令を決めるロジック。rubyだとif文とかですね。
命令を実行するロジックという切り口では、「繰り返し処理」は中々重要な立ち位置にあるそうですね。
参考
「オブジェクト指向でなぜつくるのか」/ 平澤 章 / 日経BP社 / 2004年6月初版