ループ処理 (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 まで。
2020年1月21日発売!
Elixir/Phoenix 初級① 第3版:
フォーム構造体とチェンジセット
(OIAX BOOKS) Kindle版
読者サポートページ<