Rubyの本、買ってきた。「たのしいRuby」勉強しながらtwitterに投稿した文を加筆訂正してQiitaに投稿する。繰り返し処理。
Twitter、Green_helmet@bethlehem4099
Qiita、@dosaidon
参考文献
この記事は以下の情報を参考にして執筆しました。
-たのしいRuby、高橋征義、後藤裕蔵著、 まつもとゆきひろ監修、SBクリエイティブ株式会社、第6版2019年
-『たのしいRuby 第6版』サポートページ、ソースコード
つぎ、繰り返し処理。まず、1から10までの和を計算してみた、なお答えは55。
そのほか、リストから文字列を順番に取り出す方法のサンプルも。
Rubyでは呆れるぐらい色々な方法で繰り返し処理できる。ここに書いてない方法もある。Pythonではforだけど、Rubyではとりあえずtimesだけあれば用は足りる気がする。あと、forよりtimesの方を推薦しているみたいだ。
Green_helmet@bethlehem4099·7月15日
times
sum = 0
10.times do |i|
sum += ( i + 1 )
end
puts "\n",sum
~ % ruby times.rb
55
timesは駐車場ではなく回の意味だろう。つまり駐車場が10個ではなく、10回timesからendまでの間を繰り返す。+=は右辺の値を左辺に足し算する。変数iには0から9が自動的に入る。1足しているので1から10になる。
変数iは変数nに変えても結果は同じだった。あとdo, endは{}に置き換えても良い。
sum = 0
10.times { |n| sum += (n + 1) }
puts sum
~ % ruby times2.rb
55
Green_helmet@bethlehem4099·7月15日
for
sum = 0
for i in 1..10 do
sum += i
end
puts sum
~ % ruby for.rb
55
まあ、普通。stepは無いのか?
Green_helmet@bethlehem4099·7月15日
forでリストからデータを取り出す
Pythonにも同じ構文がある。
# for_names.rb
names=["光源氏","桐壺更衣","藤壺"]
for name in names do
puts name
end
~ % ruby names.rb
光源氏
桐壺更衣
藤壺
まあ、まあよく出来ている
Green_helmet@bethlehem4099·7月15日
while
Green_helmet@bethlehem4099·7月16日
i = 0
sum = 0
while sum<55
i += 1
sum += i
end
print "i=", i, "\n"
print "sum=", sum, "\n"
~ % ruby while3.rb
i=10
sum=55
ごく標準的
Green_helmet@bethlehem4099·7月16日
until
i = 0
sum = 0
until sum>=55
i += 1
sum += i
end
print "i=",i,"\n"
print "sum=",sum,"\n"
~ % ruby until.rb
i=10
sum=55
う〜ん、untilは過剰なような…
Green_helmet@bethlehem4099·7月16日
loop
loop do
puts "loop"
end
~ % ruby loop.rb
loop
loop^Cloop.rb:3:in `write`: Interrupt
from loop.rb:3:in `puts`
from loop.rb:3:in `puts`
from loop.rb:3:in `block in <main>`
from loop.rb:2:in `loop`
from loop.rb:2:in `<main>`
controlとCを同時押しで強制終了した
さすがにwhileがあればloopは要らないだろう
Green_helmet@bethlehem4099·7月17日
つぎ、break
i=0
["Perl","Python","Ruby","Scheme"].each do |lang|
i += 1
if i == 3
break
end
p [i,lang]
end
~ % ruby break.rb
[1, "Perl"]
[2, "Python"]
breakで終了、はい
Green_helmet@bethlehem4099·7月17日
つぎ、next
i=0
["Perl","Python","Ruby","Scheme"].each do |lang|
i += 1
if i == 3
next
end
p [i,lang]
end
~ % ruby next.rb
[1, "Perl"]
[2, "Python"]
[4, "Scheme"]
nextで次へ行く、はい
Green_helmet@bethlehem4099·7月17日
繰り返し処理はこれでおしまい、どっとはらい。