这篇博文已在Hacker News上发表,并有几篇推荐。来自C ++的大多数示例似乎与我所教的内容背道而驰。
例如示例2:
坏:
def check_for_overheating(system_monitor)
if system_monitor.temperature > 100
system_monitor.sound_alarms
end
end
与好:
system_monitor.check_for_overheating
class SystemMonitor
def check_for_overheating
if temperature > 100
sound_alarms
end
end
end
C ++中的建议是,您应该更喜欢自由函数而不是成员函数,因为它们会增加封装性。两者在语义上是相同的,那么为什么更喜欢可以访问更多状态的选择呢?
范例4:
坏:
def street_name(user)
if user.address
user.address.street_name
else
'No street name on file'
end
end
与好:
def street_name(user)
user.address.street_name
end
class User
def address
@address || NullAddress.new
end
end
class NullAddress
def street_name
'No street name on file'
end
end
为什么User
要格式化不相关的错误字符串?如果我'No street name on file'
没有印刷品,但又没有街道,该怎么办?如果这条街的名字相同,该怎么办?
有人可以启发我“讲,不要问”的好处和理由吗?我不是在寻找更好的方法,而是试图了解作者的观点。