71 votes

Meilleure pratique: essayez vs sauvetage

Quelle est la meilleure pratique? Utiliser try ou utiliser rescue ?

 user.try(:email)
 

CONTRE

 user.email rescue nil
 

 post.try(:comments).try(:first).try(:author)
 

CONTRE

 post.comments.first.author rescue nil
 

Y a-t-il une différence dans l'utilisation de l'un d'entre eux?

110voto

Jack Chu Points 3795

Essayez de sauvetage et servent à des fins différentes. Le but de faire est d'essayer de vous éviter d'avoir à le faire:

if user && user.email

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 la délivrance est pour gérer les exceptions obtenir jeté par votre invocation de méthode. Si vous vous attendez à une exception à la règle de l'utilisateur appelant.e-mail, puis vous pouvez sauver néant pour empêcher l'exception de remonter.

En général, je dirais d'éviter l'utilisation de sauvetage néant, 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 que le sauvetage nil vous empêcherait de les voir. À tout le moins peut-être que vous pourriez vous connecter:

begin
  ...some code...
rescue => ex
  logger.error ex.message

7voto

Adam Byrtek Points 5791

Les deux semblent louche et peuvent masquer d'autres insectes. Etes-vous sûr de vouloir vraiment y arriver? Peut-être serait-il préférable de vérifier s'il y a des commentaires en premier et de couvrir explicitement le cas vide?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X