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 упомянул, что некоторые улучшения контрактов появятся после нового интерфейса компилятора, который сам по себе все еще находится в дорожной карте .

Другие вопросы по тегам