2016-06-02 6 views
-1

Я создал игру Tic Tac Toe и хочу реорганизовать два подобных метода в один.Методы рефакторинга

def computer_offense(brd, square='') 
    WINNING_LINES.each do |line| 
    square = find_at_risk_square(line, brd, COMPUTER_MARKERR) 
    break if square 
    end 
    square 
end 

def computer_defense(brd, square) 
    WINNING_LINES.each do |line| 
    square = find_at_risk_square(line, brd, PLAYER_MARKER) 
    break if square 
    end 
    square 
end 
+10

этот вопрос должен быть перемещен в сеть codereview – Ilya

+0

Спасибо llya, я сделаю это в будущем. –

ответ

1

вы можете реорганизовать как это:

def computer_offense_or_defense(brd, square='', offense=true) 
    WINNING_LINES.each do |line| 
    square = find_at_risk_square(line, brd, offense ? COMPUTER_MARKERR : PLAYER_MARKER) 
    break if square 
    end 
    square 
end 

Так где раньше называли computer_offense теперь вы можете позвонить computer_offense_or_defense(brd, square,true) и computer_defense можно назвать

computer_offense_or_defense(brd, square,false) 
+0

Спасибо. Это кажется таким простым, но я не смог туда добраться. –

0

Вы можете реорганизовать это так

def computer_offense(brd, square='') 
    get_square(brd, square, COMPUTER_MARKERR) 
end 

def computer_defense(brd, square) 
    get_square(brd, square, PLAYER_MARKER) 
end 

def get_square(brd, square, marker) 
    WINNING_LINES.each do |line| 
    break if square = find_at_risk_square(line, brd, marker) 
    end 
    square 
end