Rubyのfor文で降順の繰り返しをする方法
初級の話なのですが、自分がやり方を調べて時間を無駄にしたのでもし同じような方がいればと思い、綴ります。
ツクールのスクリプトを組むときに降順の繰り返しをする必要がでてきたのでfor文で繰り返そうと思ったのですがRubyにはfor文での降順の繰り返しが出来ないので別の方法を考える必要があります。
C#では以下のようになる。
for(int i = 100; i >= 0; i--)
{
console.WriteLine("無駄");
console.WriteLine("あと" + i.ToString() + "回無駄って言います。");
}
console.Writeline("無駄ァアアア!");
のですが、その流れでRubyのfor文を以下のように書こうと思うとうまく動きません。
for i in 100..1 do
puts "無駄"
puts "あと" + i.to_s + "回無駄って言います。"
end
puts("無駄ァアアア!")
Rubyだと次の方法で降順の繰り返しをする必要があるようです。
Rubyで降順の繰り返し文をする方法その1
100.downto(1){
|i|
puts "無駄"
puts "あと" + i.to_s + "回無駄って言います。"
}
puts "無駄ァアアア!"
Rubyで降順の繰り返し文をする方法その2
((1..100).to_a).reverse
{|i|
puts "無駄"
puts "あと" + i.to_s + "回無駄って言います。"
}
puts "無駄ァアアア!"
ツクールのヘルプはloop do文が好きなのでそれを使うと以下の方法
Rubyで降順の繰り返し文をする方法その3
i = 100
loop do
puts "無駄"
puts "あと" + i.to_s + "回無駄って言います。"
i = i -1
if i == 0 then
break
end
end
puts "無駄ァアア!"
と色々出てきたのですがイマイチ自分の好きな方法じゃなかった。
上二つの方法は|i|が絶対値に見えてしまって違和感を感じてしまうから。これは完全に好き嫌い。
loop do文に関しては行も長くなっちゃうし。
for文に慣れている自分にとって可読性を良くしたいのでfor文で済むところはfor文にしたい。
で、ふと閃いたのが以下の方法
Rubyのfor文で降順の繰り返しをする方法
for i in 1..100 do
i = 101 - i
puts "無駄"
puts "あと" + i.to_s + "回無駄って言います。"
end
puts("無駄ァアアア!")
そう、「あれ、変数にマイナスつければ良くね?そんで上手く引けば良くね?」というだけのことでした。
for文内で複雑な操作をしようとするとこの方法は使えないかもしれませんが簡単な操作だったらこれで間に合うかと思います。
こんな単純なことに態々1時間かけてしまったので恥を落とすつもりで記事にします。
◯参考ページ
rubyで降順forループを実現する

にほんブログ村