ループ処理 (1)
2008/07/22
1 以上の整数 n を引数として取り、1 から n までを画面に表示するメソッド foo を作りなさい。
ただし、以下の条件を満たすこと。
- 5個ずつ改行する。
- 数字と数字の間にはコンマを置く。
- 行末にはコンマを置かない。
解答と解説の表示・非表示
2008/07/22
1 以上の整数 n を引数として取り、1 から n までを画面に表示するメソッド foo を作りなさい。
ただし、以下の条件を満たすこと。
今回は、ペンネーム MTG さんの解答を掲載いたします。
def foo(n) 1.upto(n) do |i| print i if i % 5 == 0 print "\n" else print "," if i != n end end end
Integer クラスのインスタンスメソッド upto
は、1個の引数とブロックを取ります。1.upto(n)
は 1 から n までの整数値を、繰り返しブロック引数 i に代入してブロックを実行します。
ブロックとは、メソッドの後ろに付いている do
から end
まで、あるいは {
から }
までのコードを指します。
5 行目の %
は演算子のように見えますが、Fixnum クラスのインスタンスメソッドで、引数で割った余りを返します。それが 0 に等しいかどうかを調べています。つまり、i
が 5 で割り切れれば、条件式が成立して 6 行目のコードが実行されます。
8 行目では、修飾子(modifier)としての if
が使われています。i
と n
が等しくなければ、コンマを画面に表示しています。
upto
を使って書くと、Ruby プログラムらしい感じがしますが、次のように書いても同じです。
def foo(n) i = 0 while i < n i += 1 print i if i % 5 == 0 print "\n" else print "," if i != n end end end
MTG さんのとあまり変わりませんが、筆者の作ったプログラムは次の通りです。
def foo(n) 1.upto(n) do |i| print i if i % 5 == 0 print "\n" elsif i != n print "," end end end
システム開発の発注先を検討されているお客様は、 ご相談フォーム をご利用ください。
本サイトの記事に関するご質問、
Railsのコンサルティングやセミナーのお問い合わせは、
お問い合わせフォーム、または
hermes@oiax.jp まで。
2019年12月20日発売!
Ruby on Rails 6 実践ガイド
読者サポートページ