私は現在、多くのパブリックな用途があるライブラリを管理しており、セマンティックバージョン管理について質問がありました。正しく実装されていないライブラリのかなり重要な部分をリファクタリングしたい-そして常に正しく実装されていない。ただし、これを行うと、パブリックAPIが変更されることになり、これは大きな決断です。
私が行いたい変更は、イテレータの使用方法を中心に展開します。現在、ユーザーはこれを行う必要があります。
while ($element = $iterator->next()) {
// ...
}
少なくともPHPのネイティブIteratorインターフェイスでは、これは正しくありません。これに置き換えたい:
while ($iterator->valid()) {
$element = $iterator->current();
// ...
$iterator->next();
}
これは次のようなものです:
foreach ($iterator as $element) {
// ...
}
トムのセマンティックバージョニングのガイドを見ると、パブリックAPIへの変更(つまり、下位互換性のないもの)はメジャーリリースを正当化すべきであると明確に述べています。したがって、ライブラリは1.7.3から2.0.0にジャンプしますが、これは私にとってはあまりにも大きな一歩です。修正される機能は1つだけです。
最終的に2.0.0をリリースする計画はありますが、ライブラリを完全に書き直し、多数のパブリックAPIの変更を実装したときだと思いました。このリファクタリングの導入は、メジャーバージョンリリースを保証しますか?私は本当にそれがどのように見えるかわかりません-私は1.8.0または1.7.4としてそれをリリースすることをより快適に感じます。誰かアドバイスがありますか?
next()
メソッドを使用して現在の要素を取得し、内部ポインタを前方に移動します。それは間違っています。next()
ポインターを移動する必要があり、current()
取得に使用されます
next()
では、ポインターを移動するだけの戻り値を気にする必要はありません。これは互換性を実際に壊しません