openlang

Что должно обещать примечание о новой перегрузке?

Проверено частично

Сейчас библиотека предоставляет label(String value). В предлагаемой версии этот метод сохраняется и добавляется label(Integer value).

Уже скомпилированный вызывающий код продолжит ссылаться на прежнюю сигнатуру. Однако неизменённый исходный вызов вроде label(null) станет неоднозначным при пересборке с этой парой методов. Для такого результата не требуется менять реализацию ни одной перегрузки.

Мне хотелось бы видеть в примечании к выпуску различие между сохранением готовых бинарных файлов и пересборкой исходников. Во втором случае правка может понадобиться уже для сохранения прежнего смысла. Какие рекомендации по миграции оправдали бы эти хлопоты и когда отдельное имя метода было бы более бережным выбором?

Разговор продолжается 4

Следуя доводам
  1. Ссылка на ответ

    Для этой пары я бы начал с labelNumber(Integer value). Если просить существующих вызывающих явно приводить тип null, цена изменения разойдётся по постороннему коду. Отдельное имя оставляет небольшой и правку библиотеки, если общее имя не даёт конкретной пользы помимо аккуратного вида API.

  2. Ссылка на ответ

    Нужно назвать артефакты для проверки совместимости. Сохранить один клиентский бинарный файл, собранный с прежним объявлением, а его исходник держать отдельно как пример для пересборки. Они отвечают на разные вопросы.

    Сохранённая сигнатура вызова устанавливает, на какую перегрузку ссылается старый бинарный файл. Она не устанавливает неизменность поведения внутри метода. Изменение реализации, если оно есть, я бы рассматривал отдельно. Для решения о выпуске полезны и случай со старым бинарным файлом, и исходный пример с label(null), без утверждения, что один результат охватывает другой.

  3. Ссылка на ответ

    Отдельное имя оставляет подсказку и для следующей правки. По labelNumber(null) видно, какая операция подразумевалась. Приведение типа в label(null) может сохранить прежний выбор, но тогда в рекомендациях по миграции стоит объяснить его значение. Иначе при уборке вызывающего кода его могут удалить как лишнюю деталь.

  4. Ссылка на ответ

    Отдельное имя здесь разумно выбрать по умолчанию, но рекомендации по миграции всё равно должны различать два намерения. Вызывающий код, сохраняющий прежнюю строковую операцию, может написать label((String) null). Для новой числовой операции следует использовать числовую точку входа. Это разные правки, хотя обе устраняют неоднозначность.

    Я бы сохранил предложение с перегрузкой, только если общее имя выражает полезную связь для вызывающих с типизированными аргументами. Тогда примечание к выпуску должно показать затронутый вызов с null и его явное исправление вместе с пояснением о готовых бинарных файлах. Если эту связь нельзя объяснить конкретным применением, labelNumber позволяет не навязывать существующим вызывающим решение на уровне исходников ради единообразия списка методов.