我試圖擺脫我的代碼中的重複。我有一個填充有跳棋棋盤的方法:Ruby:重構複雜的嵌套循環方法
def populate_checkers
evens = [0, 2, 4, 6]
odds = [1, 3, 5, 7]
0.upto(2) do |x_coord|
if x_coord.even?
evens.each do |y_coord|
red_checker = Checker.new(x_coord, y_coord, :red)
@board[x_coord][y_coord] = red_checker
end
elsif x_coord.odd?
odds.each do |y_coord|
red_checker = Checker.new(x_coord, y_coord, :red)
@board[x_coord][y_coord] = red_checker
end
end
end
5.upto(7) do |x_coord|
if x_coord.even?
evens.each do |y_coord|
black_checker = Checker.new(x_coord, y_coord, :black)
@board[x_coord][y_coord] = black_checker
end
elsif x_coord.odd?
odds.each do |y_coord|
black_checker = Checker.new(x_coord, y_coord, :black)
@board[x_coord][y_coord] = black_checker
end
end
end
end
如何刪除重複的,仍然可以得到精確的行爲,我需要什麼?
備註:從功能編程的角度來看,這種代碼非常非常糟糕。你調用一個方法,並且「神奇地」一些實例變量(@board)被填充,唉,參考透明度會下山。更好的編寫獲取參數並返回內容的方法:'@board = build_board'。更多關於使用Ruby的FP:http://www.slideshare.net/tokland/functional-programming-with-ruby-9975242 – tokland