Question

Je cherche à utiliser DbC dans nos projets Perl et j'essaie de trouver le meilleur moyen de vérifier les contrats dans la source (par exemple, en vérifiant les conditions préalables / postérieures, les invariants, etc.)

Classe :: Contrat a été écrit par Damian Conway et est maintenant maintenu par C. Garret Goebel, mais il semble qu'il n'ait pas été touché depuis 8 ans.

Il semble que ce que je veux utiliser, c'est Moose , comme si cela pouvait sembler utile. fonctionnalité qui pourrait être utilisée pour DbC, mais je me demandais si quelqu'un avait des ressources (articles, etc.) sur la façon de s'y prendre, ou s'il existe des modules utiles que je n'ai pas pu trouver.

Est-ce que quelqu'un fait DbC avec Perl? Devrais-je juste "sauter dans" & à Moose et voir ce que je peux le faire pour moi?

Était-ce utile?

La solution

Moose vous donne beaucoup d’outils (sinon tout le sucre) pour faire du DbC. Plus précisément, vous pouvez utiliser les crochets de méthode avant, après et autour ( voici quelques exemples ) pour effectuer toutes les assertions que vous souhaitez associer aux arguments et renvoyer des valeurs.

Au lieu de "lancer votre propre DbC" vous pouvez utiliser un module tel que MooseX :: Method :: Signatures ou MooseX :: Method pour prendre en charge la validation des paramètres transmis à un sous-programme. Ces modules ne gèrent pas le & post; post " ou " invariant " les validations que DbC fournit généralement, cependant.

EDIT: Motivés par cette question, j'ai piraté ensemble MooseX :: Contract et chargé sur le CPAN. Je serais curieux d’obtenir des retours sur l’API car je n’ai jamais vraiment utilisé DbC de première main.

Autres conseils

Moose est un excellent système pour Perl, et je le recommande vivement à quiconque de coder des objets en Perl. Vous pouvez spécifier des "sous-types". pour les membres de votre classe qui seront appliqués lorsqu'ils seront définis par des accesseurs ou des constructeurs (le même système peut être utilisé avec le package Moose :: Methods pour les fonctions). Si vous codez plus d’une doublure, utilisez Moose;

En ce qui concerne DbC, eh bien, il se peut que ce ne soit pas la meilleure solution pour perl5. Cela va être difficile dans une langue qui ne vous offre que très peu de garanties. Personnellement, dans beaucoup de langages dynamiques, mais surtout en perl, j'ai tendance à faire de ma philosophie directrice un DRY et un développement piloté par les tests.

Je recommanderais également l’utilisation de Moose.

Cependant comme "alternative" " consultez Sub :: Contract .

Pour citer l'auteur ....

  

Sub :: Contract offre un moyen pragmatique de mettre en œuvre une partie du paradigme de la programmation par contrat en Perl.

     

Sub :: Contract n'est pas un framework de conception par contrat.

     

Sub :: Contract a pour but de rendre très facile la contrainte des arguments d’entrée et des valeurs de sous-routines afin d’émuler le typage fort au moment de l’exécution.

Si vous n'avez pas besoin d'invariants de classe, j'ai trouvé que la recommandation de livre Perl Hacks suivante était une bonne solution pour certains programmes. Voir Smart :: Commentaires .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top