Meilleure Pratique: Essayez de vs de Sauvetage
Ce qui est une bonne pratique? Pour utiliser try
ou de l'utilisation rescue
?
user.try(:email)
VS
user.email rescue nil
post.try(:comments).try(:first).try(:author)
VS
post.comments.first.author rescue nil
Est là toute la différence dans l'utilisation de ces?
Vous devez vous connecter pour publier un commentaire.
Essayer et de sauvetage servent à des fins différentes. Le but de
try
est pour vous éviter d'avoir à faire:Ou toute situation où le parent de l'objet peut éventuellement être nul, ce qui serait la cause d'une NoMethodError sur NilClass. Le but de
rescue
est de gérer les exceptions obtenir jeté par votre invocation de méthode. Si vous vous attendez à une exception d'appeleruser.email
, alors vous pouvezrescue nil
pour empêcher l'exception de remonter.En général, je dirais d'éviter d'utiliser
rescue nil
, sauf si vous savez de manière explicite que les exceptions vous sauver parce que vous pourriez être sauver une autre exception, et vous ne savez parce querescue nil
vous empêcherait de les voir. À tout le moins peut-être que vous pourriez vous connecter c':ActiveSuppot#try
.Les deux semblent louche et peut masquer d'autres bugs. Êtes-vous sûr que vous voulez vraiment obtenir nul là-bas? Il serait peut-être préférable de vérifier s'il y a des commentaires en premier, et de couvrir le vide les cas explicitement?
Rien est quelque Chose est un excellent exposé par Sandi Metz qui permet de comprendre pourquoi @AdamByrtek est sur place, et pourquoi nous devrions tous être marquant l'échec de cas, plus intelligemment, plus orienté objet manière que
x ? y : nil