Cet article a été publié dans Hacker News avec plusieurs votes positifs. Venant du C ++, la plupart de ces exemples semblent aller à l’encontre de ce que j’ai appris.
Tels que l'exemple n ° 2:
Mauvais:
def check_for_overheating(system_monitor)
if system_monitor.temperature > 100
system_monitor.sound_alarms
end
end
contre bon:
system_monitor.check_for_overheating
class SystemMonitor
def check_for_overheating
if temperature > 100
sound_alarms
end
end
end
Le conseil en C ++ est que vous devriez préférer les fonctions libres aux fonctions membres car elles augmentent l'encapsulation. Ces deux éléments sont sémantiquement identiques, alors pourquoi préférer le choix qui a accès à plus d’état?
Exemple 4:
Mauvais:
def street_name(user)
if user.address
user.address.street_name
else
'No street name on file'
end
end
contre bon:
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
Pourquoi est-il de la responsabilité de User
formater une chaîne d'erreur sans rapport? Que faire si je veux faire autre chose que d’imprimer 'No street name on file'
s’il n’ya pas de rue? Et si la rue porte le même nom?
Est-ce que quelqu'un pourrait m'éclairer sur les avantages et la raison d'être du programme «Dites, ne demandez pas»? Je ne cherche pas ce qui est préférable, mais j'essaie plutôt de comprendre le point de vue de l'auteur.