このブログ投稿は、いくつかの賛成票とともに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'
ストリートがない場合に印刷以外の何かをしたい場合はどうすればよいですか?通りの名前が同じものである場合はどうなりますか?
誰かに「教えて、聞かないで」の利点と理論的根拠を教えてもらえますか?どちらが良いかを探しているのではなく、著者の視点を理解しようとしています。