Kotlin - Почему контракты компилятора допускают только ссылки на параметры функции
При написании функции проверки часто эти функции проверки проверяют допустимость значения NULL. Несмотря на то, что после вызова этих функций члены-объекты можно безопасно использовать, как если бы они не допускали значения NULL, контракты компилятора Kotlin не позволяют указать такое поведение.
Например:
data class EmployeeDto(
val name: String?,
val longitude: String?,
val latitude: String?
) {
@ExperimentalContracts
fun validate() {
//contract { returns() implies (this.name != null && this.longitude != null && this.latitude != null) }
// Error in contract description: only references to parameters are allowed in contract description
if (name.isNullOrEmpty())
throw RequiredValueNotSetException("Name was set to \"$name\" but can not be null or empty")
if (longitude.isNullOrEmpty())
throw RequiredValueNotSetException("Longitude was set to \"$longitude\" but can not be null or empty")
if (latitude.isNullOrEmpty())
throw RequiredValueNotSetException("Latitude was set to \"$latitude\" but can not be null or empty")
}
В чем причина этого ограничения, или это функция, которую планируется добавить в будущем?
1 ответ
В чем причина этого ограничения?
Контракты Kotlin - это экспериментальная функция как при разработке, так и при реализации. Множество ограничений просто потому, что легче / быстрее реализовать контракты с этими ограничениями.
Планируется ли добавить эту функцию в будущем?
Вероятно, что в будущем будет снято ограничение на использование только параметров метода ссылок.
Трудно сказать, что произойдет с контрактами на котлине, поскольку на самом деле нет никакой официальной дорожной карты для контрактов, кроме того, что есть в KEEP и соответствующем обсуждении . В комментариях к этому посту член команды kotlin упомянул, что некоторые улучшения контрактов появятся после нового интерфейса компилятора, который сам по себе все еще находится в дорожной карте .