LotosLabo

プログラミング技術とか気になった情報を載せていきます

Ruby言語について3

繰り返し

while文

while 条件式 do
実行する処理1
実行する処理2
end

trueの間繰り返す

例:

num = 0
while num < 2 do
  print("num = ", num)
end
print("End")

これだと何回繰り返しても0になるので無限ループとなる。

例:

num = 0
while num < 2 do
  print("num = ", num)
  num = num + 1
end
print("End")



until


偽の間繰り返す

until 条件式 do
実行する処理1
実行する処理2
end

例:

num = 2
until num <= 0 do
  print("num = ", num)
  num = num - 1
end
print("End")


for文

for 変数 in オブジェクト do
実行する処理1
実行する処理2
end


例:

for num in 1..3 do
  print("num = ", num, "\n")
end
print("End")



1~3まで代入していく
初期値は1

範囲オブジェクト

first..last
.. 演算子を使う

range1 = 5..10
range2 = "d".."g"

またよく似た演算子
... がある

この場合、範囲オブジェクトが持つ範囲に最後の値

Rangeクラス

.. ...により作成できるのがこれでも作成可能
Range.new(first,last[, exclude_end])

firstには最初の値を
lastには最後の値
exclude_endは最後の値を要素として含めるかどうかを指定

真の値を指定した場合は含めない

例:

range1 = Range.new(5, 10)
range2 = Range.new(5, 10, true)


eachメソッド


配列や範囲オブジェクトなどのメソッド
オブジェクトに含まれている要素を順に取り出す。

オブジェクト.each{|変数|
実行する処理1
実行する処理2
}

オブジェクト.each do |変数|
実行する処理1
実行する処理2
end


例:

range = 5..10
range.each{|num|
  print("num = ", num , "\n")

(5..10).each{|num|
  print("num = ", num)
}

for num in 5..10 do
  print("num = ", num)
end


イテレータ

{}付きのメソッドイテレータという。

timesメソッド

オブジェクト.times{|変数|
実行する処理1
実行する処理2
}

オブジェクト.times do |変数|
実行する処理1
実行する処理2
end


「times」メソッドは、変数に「0」から「対象のオブジェクトが持つ数値 - 1」を順に代入しながら「{」から「}」までの処理(又は「do」から「end」までの処理)を実行します。

1回繰り返す毎に1ずつ数値は増加します。


例:

10.times{
  print("Hello\n")
}



出力
Helloを10個表示

uptoメソッド

オブジェクト.upto(max){|変数|
実行する処理1
実行する処理2
}
オブジェクト.upto(max) do |変数|
実行する処理1
実行する処理2
end


例:

3.upto(7){|num|
  print("num = ", num, "\n")
}

num = 3
num = 4
num = 5
num = 6
num = 7


downtoメソッド


オブジェクト.downto(min){|変数|
実行する処理1
実行する処理2
}
オブジェクト.downto(min) do |変数|
実行する処理1
実行する処理2
end

例:

7.downto(3){|num|
  print("num = ", num, "\n")
}



出力
7
6
5
4
3

stepメソッド

指定した回数だけ繰り返し処理


オブジェクト.step(limit, stepno){|変数|
実行する処理1
実行する処理2
}
オブジェクト.step(limit, stepno) do |変数|
実行する処理1
実行する処理2
end


例:

2.4.step(5.3, 0.8){|num|
  print("num = ", num, "\n")
}



初期値が2.4 で 0.8加算しながら5.3まで出力

出力
num = 2.4
num = 3.2
num = 4.0
num = 4.8

loopメソッド

loop{
実行する処理1
実行する処理2
}

無限ループを行う

例:

num = 1
loop{
  print("num = ", num, "\n")
  num += 1
  if num > 10 then
    break
  end
}



出力
num = 1
num = 2
num = 3
num = 4
num = 5
num = 6
num = 7
num = 8
num = 9
num = 10

numが1で出力した後に1を増やし、numが10より大きくなった時にbreakしてこのループを抜け出す。

break文


例:

count = 1
("aa".."az").each{|str|
print(str + "\n");
count += 1
if count > 10 then
break
end
}


next文

next以降の処理が行われずスキップする


例:

count = 0
("aa".."az").each{|str|
count += 1
if count % 3 != 0 then
next
end
print(str + "\n");
}



出力
ac
af
ai
al
ao
ar
au
ax

redo文

count = 0
("aa".."ae").each{|str|
count += 1
if count % 3 == 0 then
redo
end
print(count, ":" + str + "\n");
}



「next」との違いは「next」は次の繰り返しへ進みますが「redo」は同じ繰り返しを最初から行います。

num修飾子

num = 2
num *= 2 while num < 1000

例:

num *= 2 while num < 1000
print("num = ", num, "\n");