Описание тега kotlin-contracts

1 ответ

Котлин контракты: ссылка не-ноль из двух свойств

Скажем, у меня есть такой класс: data class URLAndPath( val baseUrl: URL, val path: String? ) { val url get(): URL? = try { path?.let { URL(baseUrl, it) } } catch(_: Exception) { null } init { require(path == null || url != null) { "Invalid URL $bas…
12 дек '18 в 07:58
4 ответа

Контракты Kotlin: экземпляр assert на параметре reified type

Я пытаюсь написать функцию assert, которая проверяет, является ли данный объект типа T: @UseExperimental(ExperimentalContracts::class) inline fun <reified T> assertIsInstance(value: Any?) { contract { returns() implies (value is T) } Assertion…
1 ответ

После обновления до Kotlin 1.3 я до сих пор не могу использовать контракт

Я обновил плагин Kotlin в IDEA с 1.2.71 до 1.3.0 и убедился, что новый SDK - это Project SDK: Я ожидал, что смогу использовать новый kotlin.contracts.contract, но он темно-красный! Information:Kotlin: kotlinc-jvm 1.3.0 (JRE 1.8.0_181-b13) Error:(9, …
1 ответ

Контракт Kotlin выводит возвращаемое значение вместо значения аргумента

У меня есть функция, которая выглядит примерно так: fun MyInput?.toOutput() : Output? { if (this == null) return null return Output(this.someValue) } В местах, где я знаю, что мой MyInput не является нулевым (например, внутри метода, который принима…
25 апр '19 в 16:24
2 ответа

kotlin - убрать допустимость значения NULL из свойств класса

У меня есть класс с некоторыми свойствами, допускающими значение NULL data class RequestModel( val description: String? ) и функция проверки fun validate(model: RequestModel): RequestModel{ if(model.description == null) throw IllegalArgumentExceptio…
3 ответа

Как написать следующий контракт Kotlin?

Вопрос очень простой: (используя Kotlin 1.3.71) У меня есть следующие данные, похожие на эти: data class Location(val lat: Double, val lng: Double) Я хочу добиться безопасности типов с помощью такого вызова: val loc = location { lat = 2.0 lng = 2.0 …
02 апр '20 в 01:07
1 ответ

Использование контрактов Kotlin для приведения типа внутри предиката функции Iterable

У меня этот закрытый класс PictureEvent: sealed class PictureEvent { data class PictureCreated(val pictureId: String, val url: String) : PictureEvent() //more classes extending PictureEvent } Теперь из списка PictureEvents, я хочу получить первый Pi…
06 май '20 в 18:54
0 ответов

Дополнительные ограничения для компилятора kotlin с использованием контрактов

Я пытаюсь ввести дополнительные ограничения для компилятора kotlin: fun main() { val list = listOf(1) val bigList = listOf(3) list.second() } fun List<Int>.second(): Int { require(size > 1) return this[1] } Я ожидаю, что в этом случае компи…
20 сен '19 в 20:41
1 ответ

Kotlin - Почему контракты компилятора допускают только ссылки на параметры функции

При написании функции проверки часто эти функции проверки проверяют допустимость значения NULL. Несмотря на то, что после вызова этих функций члены-объекты можно безопасно использовать, как если бы они не допускали значения NULL, контракты компилято…
07 апр '21 в 02:19
0 ответов

Как работает контракт компилятора с нулевой проверкой Kotlin?

У меня есть пара настраиваемых функций области видимости, которые все похожи на эту: @OptIn(ExperimentalContracts::class) inline fun <R> R.applyIf(condition: Boolean, block: R.() -> Unit): R { contract { callsInPlace(block, InvocationKind.E…
17 сен '21 в 21:25
1 ответ

Каковы преимущества контракта Kotlin callInPlace?

Может ли кто-нибудь объяснить мне, в чем преимущества Kotlin?callsInPlace договор? Как компилятор использует знание того, что лямбда-функция будет вызвана на месте? Кроме того, разработчик получает какую-либо выгоду от этого? Например, смарткаст или…
01 фев '21 в 07:04
0 ответов

Контракты Kotlin не работают для нулевой проверки в функции расширения

Я пытаюсь написать функцию расширения, которая возвращает значение, если значение неnullили 0 и использовать контракт, чтобы гарантировать компилятору, что если я верну значение, отличное от нуля. Однако, похоже, он не работает с умным литьем. Он по…
19 янв '23 в 21:06
1 ответ

Может ли контракт Kotlin подразумевать невозможность обнуления всех vararg-аргументов функции?

Я хотел бы написать функцию верхнего уровня следующим образом: @ExperimentalContracts fun containsNull(vararg objs: Any?): Boolean { contract { returns(false) implies (/* ???? */) } for (o in objs) if (o == null) return true return false } так что я…
23 окт '22 в 22:00