Dieser Blogpost wurde in den Hacker News mit mehreren positiven Stimmen gepostet. Aus C ++ stammend, scheinen die meisten dieser Beispiele gegen das zu verstoßen, was mir beigebracht wurde.
Zum Beispiel # 2:
Schlecht:
def check_for_overheating(system_monitor)
if system_monitor.temperature > 100
system_monitor.sound_alarms
end
end
gegen gut:
system_monitor.check_for_overheating
class SystemMonitor
def check_for_overheating
if temperature > 100
sound_alarms
end
end
end
Der Rat in C ++ ist, dass Sie freie Funktionen anstelle von Member-Funktionen bevorzugen sollten, da diese die Kapselung erhöhen. Beide sind semantisch identisch. Warum also die Wahl bevorzugen, die Zugriff auf mehr Status hat?
Beispiel 4:
Schlecht:
def street_name(user)
if user.address
user.address.street_name
else
'No street name on file'
end
end
gegen gut:
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
Warum liegt es in der Verantwortung User
, eine nicht verwandte Fehlerzeichenfolge zu formatieren? Was ist, wenn ich etwas anderes als Drucken machen möchte, 'No street name on file'
wenn es keine Straße gibt? Was ist, wenn die Straße den gleichen Namen hat?
Könnte mich jemand über die Vorteile und Gründe von "Tell, Don't Ask" aufklären? Ich suche nicht, was besser ist, sondern versuche, den Standpunkt des Autors zu verstehen.