Saat ini saya mengelola perpustakaan yang memiliki banyak penggunaan publik, dan saya punya pertanyaan tentang versi semantik . Saya ingin memperbaiki satu bagian yang cukup penting dari perpustakaan yang diimplementasikan secara tidak benar - dan selalu diimplementasikan dengan salah. Tetapi melakukan ini berarti perubahan pada API publik, yang merupakan keputusan besar.
Perubahan yang ingin saya lakukan berkisar pada bagaimana iterator digunakan. Saat ini, pengguna harus melakukan ini:
while ($element = $iterator->next()) {
// ...
}
Yang salah, setidaknya di antarmuka PHP asli Iterator . Saya ingin mengganti dengan ini:
while ($iterator->valid()) {
$element = $iterator->current();
// ...
$iterator->next();
}
yang analog dengan:
foreach ($iterator as $element) {
// ...
}
Jika Anda melihat panduan Tom untuk versi semantik, ia dengan jelas menyatakan bahwa setiap perubahan pada API publik (yaitu yang tidak kompatibel ke belakang), harus membenarkan rilis utama. Jadi perpustakaan akan melompat dari 1.7.3 ke 2.0.0 yang, bagi saya, adalah langkah terlalu jauh. Kami hanya berbicara tentang satu fitur diperbaiki.
Saya memang punya rencana untuk merilis 2.0.0, tetapi saya pikir ini adalah ketika Anda benar-benar menulis ulang perpustakaan dan mengimplementasikan banyak perubahan API publik. Apakah pengenalan refactoring ini menjamin rilis versi utama? Saya benar-benar tidak bisa melihat bagaimana caranya - saya merasa lebih nyaman melepaskannya sebagai 1.8.0 atau 1.7.4. Adakah yang punya saran?
next()
metode ini digunakan untuk mengambil elemen saat ini DAN menggerakkan pointer internal ke depan. Yang salah. next()
harus menggerakkan pointer, dan current()
digunakan untuk mengambil ...
next()
hanya yang menggerakkan pointer, ini benar-benar tidak merusak kompatibilitas