我正在使用pull review并要求我考虑以下代码,有人可以帮我解决这个问题吗?
@start_time = (params[:start_time].to_time.hour.to_i < @room.opening_time.hour.to_i)? @room.opening_time.hour_minutes : params[:start_time]
@end_time = (params[:end_time].to_time.hour.to_i > @room.closing_time.hour.to_i)? @room.closing_time.hour_minutes : params[:end_time]
答案 0 :(得分:0)
首先,你可以把你正在比较的一些疯狂的长链扔进像这样的变量
opening_time = @room.opening_time.hour.to_i
closing_time = @room.closing_time.hour.to_i
starting_time = params[:start_time].to_time.hour.to_i
ending_time = params[:end_time].to_time.hour.to_i
open_minutes = @room.opening_time.hour_minutes
close_minutes = @room.closing_time.hour_minutes
然后你可以做
@start_time = starting_time < opening_time ? start_minutes : params[:start_time]
@end_time = ending_time > closing_time ? end_minutes : params[end_time]
更具可读性。
从那里我建议提取出两种方法来运行实际的条件,使英语更清楚代码尝试做什么。例如:
def get_start_time(time)
starting_time = time.to_time.hour.to_i
opening_time = @room.opening_time.hour.to_i
open_minutes = @room.opening_time.hour_minutes
starting_time < opening_time ? start_minutes : time
end
def get_end_time(time)
ending_time = time.to_time.hour.to_i
closing_time = @room.closing_time.hour.to_i
close_minutes = @room.closing_time.hour_minutes
ending_time > closing_time ? end_minutes : time
end
@start_time = get_start_time(params[:start_time])
@end_time = get_end_time(params[:end_time])
虽然它可能是更多的物理代码,但阅读起来更清晰,更简单,这是重构的一个重要部分,尤其是在与团队合作时。