たし算ジェネレータ
下記テキストをtasizan.rtxtとして保存。「erb tasizan.rtxt」で実行できる。
たし算ドリル 次のたし算を計算しなさい。制限時間は3分です。 <% 10.times do |i| %> <% n = i + 1 %> <% a = rand(10) %> <% b = rand(10) %> (第<%= n %>問) <%= a %> + <%= b %> = <%= a + b %> <% end %>
うわ、これじゃ無駄な空行入りまくり(追記:erbコマンドに「-T 2」を渡せば無駄な改行はなくなる。ERB.newの場合はtrim_modeを2にする)。HTMLにすれば空行を無視できるけど、HTMLのタグが入ると<% 〜 %>が見えにくくなるんだよなあ。文字の濃さや色を工夫すれば読みやすくなるかなあ。あと、これだと答えも一緒に出力されてしまう。答えは配列に積んで、あとでeachで回して出力するべき。
HTML版。Rubyコードを差別化するために、HTMLタグは大文字にしてみた。どうかな。
<HTML> <BODY> <H1>たし算ドリル</H1> <P>次のたし算を計算しなさい。制限時間は3分です。</P> <% 10.times do |i| %> <% a = rand(10) %> <% b = rand(10) %> (第<%= i + 1 %>問) <%= a %> + <%= b %> = <%= a + b %><BR /> <% end %> </BODY> </HTML>
思ったより複雑にならなかった。わりといい気がする。
答えを別で出力するバージョン。上記からここへの流れで解説すればいい気がする。
<HTML> <BODY> <H1>たし算ドリル</H1> <P>次のたし算を計算しなさい。制限時間は3分です。</P> <H2>問題</H2> <% answers = [] %> <% 10.times do |i| %> <% a = rand(10) %> <% b = rand(10) %> <% answers << a + b %> (第<%= i + 1 %>問) <%= a %> + <%= b %> = <BR /> <% end %> <H2>答え</H2> <% answers.each_with_index do |a, i| %> (問<%= i + 1 %>) <%= a %><BR /> <% end %> </BODY> </HTML>
うん、このHTMLを使ったサンプルはいいかもしれない。これをRubyコードに埋め込もうとするとちょっと面倒なことになりそうだから、これにはERBを使うメリットが現れている。
HTMLバージョーン1の出力結果を張っておく。
<HTML> <BODY> <H1>たし算ドリル</H1> <P>次のたし算を計算しなさい。制限時間は3分です。</P> (第1問) 4 + 9 = 13<BR /> (第2問) 1 + 8 = 9<BR /> (第3問) 1 + 3 = 4<BR /> (第4問) 0 + 3 = 3<BR /> (第5問) 4 + 6 = 10<BR /> (第6問) 9 + 4 = 13<BR /> (第7問) 7 + 0 = 7<BR /> (第8問) 7 + 6 = 13<BR /> (第9問) 3 + 2 = 5<BR /> (第10問) 5 + 2 = 7<BR /> </BODY> </HTML>