6
votes

Valider les arguments dans Ruby?

Je me demande si on devrait valider que les arguments passés à une méthode sont d'une certaine classe.

par exemple par exemple. xxx

est-il intelligent de le faire ou est Il suffit de jouer et de perdre du temps pour valider tous les arguments passés?

Existe-t-il des circonstances lorsque vous souhaitez avoir cette sécurité supplémentaire et que vous ne vous dérangerez pas?

Partager vos expériences!


0 commentaires

5 Réponses :


2
votes

Je pense que c'est inutile. J'ai une fois lu sur un blog quelque chose comme "Si vous avez besoin de protéger votre code de personnes stupides, Ruby n'est pas la langue pour vous."


2 commentaires

c'est vrai. Pourquoi valider vos programmeurs =)


L'implication que Ruby nécessite des développeurs très intelligents ou que vous ne devez pas utiliser de rubis pour des programmes nécessitant une exactitude? Je ne trouve pas cette réponse particulièrement utile.



10
votes

Je ne recommanderais pas cette approche spécifique, car vous ne parveniez pas à accueillir des classes qui fournissent une sémantique de hachage ou de tableau, mais ne sont pas cette classe. Si vous avez besoin de ce type de validation, vous ferez mieux d'utiliser réponse_to? avec un nom de méthode. Les tableaux mettent en œuvre la méthode: [], pour ce que ça vaut.

OpenStruct a une sémantique de sémantique Hash and Attribut-Accessor, mais ne retournera pas vrai pour la condition hash.class == hachage . Cela fonctionnera comme un hasch dans la pratique, cependant.

Pour le mettre en perspective, même dans une langue non dynamique que vous ne voudriez pas le faire de cette façon; Vous préférez vérifier qu'un objet implémente ITHINITION . RUBY préférerait idiomatiquement que, si nécessaire, vous vérifiez que la méthode existe, car si elle le fait, le développeur est probablement l'intention de son objet d'agir de la même manière. Vous pouvez fournir une santé mentale supplémentaire avec des tests unitaires autour du code client comme alternative à forcer des éléments non dynamiques.


0 commentaires

1
votes

Si vous souhaitez des contrats de code compilateur / exécutoire, puis Ruby n'est pas pour vous. Si vous voulez une langue malléable et une testabilité facile, alors ruby ​​est.


0 commentaires

6
votes

Il n'est généralement pas nécessaire de valider que les arguments sont d'une certaine classe. Dans Ruby, vous êtes encouragé à utiliser dactylographie de canard .


0 commentaires

3
votes

J'ai constaté que valider que les paramètres d'entrée répondent à vos conditions préalables est une pratique très précieuse. La personne stupide que sa vous sauve de vous est. Cela est particulièrement vrai pour RUBY car il n'a pas de chèque de temps de compilation. S'il y a certaines caractéristiques de l'entrée de votre méthode que vous savez, il est vrai que SENES doit les vérifier au moment de l'exécution et soulever des erreurs avec des messages d'erreur significatifs. Sinon, le code commence simplement à produire des ordures pour les ordures et vous obtenez une mauvaise réponse ou une exception sur la ligne.


0 commentaires