Je gère actuellement une bibliothèque qui a beaucoup d'utilité publique, et j'avais une question sur le versioning sémantique . Je veux refactoriser une partie assez importante de la bibliothèque qui est implémentée incorrectement - et a toujours été implémentée incorrectement. Mais cela signifierait des modifications de l'API publique, ce qui est une décision majeure.
Le changement que je veux faire tourne autour de la façon dont les itérateurs sont utilisés. Actuellement, les utilisateurs doivent faire ceci:
while ($element = $iterator->next()) {
// ...
}
Ce qui est incorrect, du moins dans l' interface Iterator native de PHP . Je veux remplacer par ceci:
while ($iterator->valid()) {
$element = $iterator->current();
// ...
$iterator->next();
}
ce qui est analogue à:
foreach ($iterator as $element) {
// ...
}
Si vous regardez le guide de Tom sur le versioning sémantique, il déclare clairement que toute modification de l'API publique (c'est-à-dire celles qui ne sont pas rétrocompatibles), devrait justifier une version majeure. La bibliothèque passerait donc de 1.7.3 à 2.0.0, ce qui est pour moi un pas trop loin. Nous ne parlons que d'une fonctionnalité en cours de correction.
J'ai l'intention de publier la version 2.0.0, mais je pensais que c'était lorsque vous avez complètement réécrit la bibliothèque et mis en œuvre de nombreux changements d'API publics. L'introduction de ce refactoring justifie-t-elle une sortie de version majeure? Je ne vois vraiment pas comment cela se passe - je me sens plus à l'aise de le publier en tant que 1.8.0 ou 1.7.4. Quelqu'un a-t-il des conseils?
next()
méthode est utilisée pour récupérer l'élément actuel ET déplacer le pointeur interne vers l'avant. Ce qui est faux. next()
devrait déplacer le pointeur, et current()
est utilisé pour récupérer ...
next()
celle qui déplace le pointeur, cela ne rompt vraiment pas la compatibilité