Является ли изменение типа, возвращаемого функцией, обратно несовместимым изменением, если поведение остается прежним? - PullRequest
1 голос
/ 31 января 2020

Если у меня есть такая функция, как resolve и в версии 1.0.0 моего API, и resolve возвращает SomeObject, а ожидание SomeObject отвечает #success? и #failure?, если я должен был измениться resolve для возврата SomeNewObject и SomeNewObject реагирует на #success? и #failure? требует ли это увеличения основной версии моего API? Или из-за того, что SomeNewObject ведет себя точно так же, как и SomeObject, могу ли я увеличивать только младший?

Следует отметить, что этот API-интерфейс написан не строго типизированным языком (Ruby)

1 Ответ

2 голосов
/ 31 января 2020

Квалификатор, если он может взломать код. Строго говоря, критическое изменение - это то, что потенциально может нарушить код тех, кто использует ваш API. В не строго типизированном языке, если вы можете гарантировать, что объекты достаточно похожи, поэтому, если любой код, который работает с SomeObject, также работает с SomeNewObject, то это не принципиальное изменение.

В строго типизированном языке изменение типа будет автоматически классифицировано как критическое изменение, поскольку переменная с типом SomeObject не сможет получить объект типа SoneNewObject. неразрывное изменение будет, например, если вы добавите новую функцию.

...