我正在写一些代码,结果却让我觉得太难看了.反正我是否可以重构它以便我不使用嵌套的if语句?
def hours_occupied(date)
#assuming date is a valid date object
availability = get_work_hours(date)
focus = "work"
if availability.nil
availability = get_family_hours(date)
focus = "family"
if availability.nil
availability = get_friend_hours(date)
focus = "friends"
end
end
end
Run Code Online (Sandbox Code Playgroud)
我知道我可以做这样的事情以获得可用性
availability = get_work_hours(date) || get_family_hours(date) || get_friend_hours(date)
Run Code Online (Sandbox Code Playgroud)
但是如何相应地设置焦点变量?
我会做类似下面的事情,因为它清楚地表明每个案例是互斥的:
def hours_occupied(date)
if availability = get_work_hours(date)
focus = "work"
elsif availability = get_family_hours(date)
focus = "family"
elsif availability = get_friend_hours(date)
focus = "friends"
end
end
Run Code Online (Sandbox Code Playgroud)
另一种方法是在需要时重新分配值:
def hours_occupied(date)
availability, focus = get_work_hours(date), "work"
availability, focus = get_family_hours(date), "family" unless availability
availability, focus = get_friend_hours(date), "friend" unless availability
end
Run Code Online (Sandbox Code Playgroud)
或使用迭代器:
def hours_occupied(date)
availability = focus = nil
%w(work family friend).each {|type| availability, focus = self.send(:"get_#{type}_hours", date), type unless availability}
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18727 次 |
| 最近记录: |