2015-06-17 3 views
1

Как сделать чище такой код:Очистка цепь зависимых вызовов

def some_public_method(arg) 
    var1 = private_method(arg) 
    var2 = private_method1(var1) if var1 
    var3 = private_method2(var2) if var2 
    var4 = private_method3(var3) if var3 
    private_method4(var4) if var4 
end 

UPDATE: извините, забыл изменить имена методов

+1

это стоит проверить: [рефакторинга рубиновый с монады] (https://www.youtube.com/watch?v= J1jYlPtkrqQ) – dax

ответ

1

Это один из способов вы можете сделать это.

Код

def some_public_method(private_methods, arg) 
    private_methods.reduce(arg) { |x,m| x && send(m, x) } 
end 

private 

def pm1(arg); arg+1; end 
def pm2(arg); arg+2; end 
def pm3(arg); arg+3; end 

Примеры

private_methods = [:pm1, :pm2, :pm3] 

some_public_method(private_methods, 0) #=> 6 

def pm2(arg); nil; end 
some_public_method(private_methods, 0) #=> nil 
+0

Хорошо, я вижу. Спасибо. – zuba

Смежные вопросы