Refactoring3-1
下記のコード書き換えに関する試験を受けてください.
コードの初期状態
グラフを表示するsvgを出力するコードを改良していきます.
まずは,下記コードrrwb.rbをダウンロードしてください.
NUMBER_OF_TOSSES = 10
def toss
2 * (rand(2)*2 - 1)
end
def values(n)
a = [0]
n.times { a << (toss + a[-1]) }
a
end
def spark(centre_x, centre_y, value)
%Q{<rect x="#{centre_x-2}" y="#{centre_y-2}"
width="4" height="4"
fill="red" stroke="none" stroke-width="0" />
<text x="#{centre_x+6}" y="#{centre_y+4}"
font-family="Verdana" font-size="9"
fill="red" >#{value}</text>}
end
$tosses = values(NUMBER_OF_TOSSES)
points = []
$tosses.each_index { |i| points << "#{i},#{200-$tosses[i]}" }
data = %Q{<svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" >
<polyline fill="none" stroke="#333" stroke-width="1"
points = "#{points.join(' ')}" />
#{spark(NUMBER_OF_TOSSES-1, 200-$tosses[-1], $tosses[-1])}
</svg>}
puts "#{data}"
class導入[50点]
class化を行います.下のようなひな形を参考にしてSparklineクラスを作ってください.
NUMBER_OF_TOSSES = 10
def toss
2 * (rand(2)*2 - 1)
end
def values(n)
a = [0]
n.times { a << (toss + a[-1]) }
a
end
class Sparkline
def initialize
end
def spark(centre_x, centre_y, value)
end
def to_svg(points)
end
end
$tosses = values(NUMBER_OF_TOSSES)
points = []
$tosses.each_index { |i|
points << "#{i},#{200-$tosses[i]}"
}
puts Sparkline.new.to_svg(points)
Keyword(s):
References:[RubyPrimary]