2
0

More than 1 year has passed since last update.

「たのしいRuby」繰り返し処理 times, for, while, until, each, break, next

Last updated at Posted at 2022-12-13

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

times.rb
sum = 0
10.times do |i|
    sum += ( i + 1 )
end
puts "\n",sum
command_line
~ % ruby times.rb
55

timesは駐車場ではなく回の意味だろう。つまり駐車場が10個ではなく、10回timesからendまでの間を繰り返す。+=は右辺の値を左辺に足し算する。変数iには0から9が自動的に入る。1足しているので1から10になる。
変数iは変数nに変えても結果は同じだった。あとdo, endは{}に置き換えても良い。

times2.rb
sum = 0
10.times { |n| sum += (n + 1) }
puts sum
command_line
~ % ruby times2.rb
55

Green_helmet@bethlehem4099·7月15日

for

for.rb
sum = 0
for i in 1..10 do
    sum += i
end
puts sum
command_line
~ % ruby for.rb
55

まあ、普通。stepは無いのか?

Green_helmet@bethlehem4099·7月15日

forでリストからデータを取り出す

Pythonにも同じ構文がある。

for_names.rb
# for_names.rb
names=["光源氏","桐壺更衣","藤壺"]
for name in names do
    puts name
end
console_command
~ % ruby names.rb
光源氏
桐壺更衣
藤壺

まあ、まあよく出来ている
Green_helmet@bethlehem4099·7月15日

while

Green_helmet@bethlehem4099·7月16日

while3.rb
i = 0
sum = 0
while sum<55
    i += 1
    sum += i
end
print "i=", i, "\n"
print "sum=", sum, "\n"
command_line
~ % ruby while3.rb
i=10
sum=55

ごく標準的
Green_helmet@bethlehem4099·7月16日

until

until.rb
i = 0
sum = 0
until sum>=55
    i += 1 
    sum += i
end
print "i=",i,"\n"
print "sum=",sum,"\n"
command_line
~ % ruby until.rb
i=10
sum=55

う〜ん、untilは過剰なような…
Green_helmet@bethlehem4099·7月16日

loop

loop.rb
loop do
    puts "loop"
end
command_line
~ % 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

break.rb
i=0
["Perl","Python","Ruby","Scheme"].each do |lang|
    i += 1
    if i == 3
        break
    end
    p [i,lang]
end
command_line
~ % ruby break.rb
[1, "Perl"]
[2, "Python"]

breakで終了、はい
Green_helmet@bethlehem4099·7月17日

つぎ、next

next.rb
i=0
["Perl","Python","Ruby","Scheme"].each do |lang|
    i += 1
    if i == 3
        next
    end
    p [i,lang]
end
command_line
~ % ruby next.rb
[1, "Perl"]
[2, "Python"]
[4, "Scheme"]

nextで次へ行く、はい
Green_helmet@bethlehem4099·7月17日
繰り返し処理はこれでおしまい、どっとはらい。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0