PRETTYGEEKNOTES Telegram 1772
🏝 В Kotlin 2.2.20 прокачали contracts — механизм, который позволяет компилятору делать больше проверок на этапе компиляции и давать дополнительные гарантии.

❗️ Все новые функции пока экспериментальные — их использование требует аннотаций или специальных флагов компилятора.


1️⃣ Контракты в get/set у property
val Any.isHelloString: Boolean
get() {
contract { returns(true) implies (this@isHelloString is String) }
return "hello" == this
}


2️⃣ returnsNotNull() — новая функция в контрактах, которая гарантирует, что функция вернёт не null
fun decode(encoded: String?): String? {
contract { (encoded != null) implies (returnsNotNull()) }
if (encoded == null) return null
return java.net.URLDecoder.decode(encoded, "UTF-8")
}


3️⃣ holdsIn() — новая функция, которая позволяет зафиксировать, что условие будет true в пределах указанной лямбды
Документация
fun <T> T.alsoIf(
condition: Boolean,
block: (T) -> Unit,
): T {
contract {
// Объявляет, что лямбда будет вызвана не более одного раза
callsInPlace(block, InvocationKind.AT_MOST_ONCE)
// Объявляет, что условие считается истинным внутри лямбды
condition holdsIn block
}
if (condition) block(this)
return this
}


4️⃣ Поддержка generic типов в контрактах типов
fun <T, F : Failure> Result<T, F>.isHttpError(): Boolean {
contract {
returns(true) implies (this@isHttpError is Result.Failed<Failure.HttpError>)
}
return this is Result.Failed && this.failure is Failure.HttpError
}


Зачем это нужно
Контракты помогают компилятору и IDE лучше понимать поведение функций и условий в коде. Это значит: меньше лишних !!, меньше кастов типов, больше подсказок от IDE и меньше багов на рантайме. По сути, вы даёте компилятору «дополнительные знания», и он становится умнее при анализе вашего кода.


#kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥111👍1



tgoop.com/prettygeeknotes/1772
Create:
Last Update:

🏝 В Kotlin 2.2.20 прокачали contracts — механизм, который позволяет компилятору делать больше проверок на этапе компиляции и давать дополнительные гарантии.

❗️ Все новые функции пока экспериментальные — их использование требует аннотаций или специальных флагов компилятора.


1️⃣ Контракты в get/set у property
val Any.isHelloString: Boolean
get() {
contract { returns(true) implies (this@isHelloString is String) }
return "hello" == this
}


2️⃣ returnsNotNull() — новая функция в контрактах, которая гарантирует, что функция вернёт не null
fun decode(encoded: String?): String? {
contract { (encoded != null) implies (returnsNotNull()) }
if (encoded == null) return null
return java.net.URLDecoder.decode(encoded, "UTF-8")
}


3️⃣ holdsIn() — новая функция, которая позволяет зафиксировать, что условие будет true в пределах указанной лямбды
Документация
fun <T> T.alsoIf(
condition: Boolean,
block: (T) -> Unit,
): T {
contract {
// Объявляет, что лямбда будет вызвана не более одного раза
callsInPlace(block, InvocationKind.AT_MOST_ONCE)
// Объявляет, что условие считается истинным внутри лямбды
condition holdsIn block
}
if (condition) block(this)
return this
}


4️⃣ Поддержка generic типов в контрактах типов
fun <T, F : Failure> Result<T, F>.isHttpError(): Boolean {
contract {
returns(true) implies (this@isHttpError is Result.Failed<Failure.HttpError>)
}
return this is Result.Failed && this.failure is Failure.HttpError
}


Зачем это нужно
Контракты помогают компилятору и IDE лучше понимать поведение функций и условий в коде. Это значит: меньше лишних !!, меньше кастов типов, больше подсказок от IDE и меньше багов на рантайме. По сути, вы даёте компилятору «дополнительные знания», и он становится умнее при анализе вашего кода.


#kotlin

BY Записки разработчицы


Share with your friend now:
tgoop.com/prettygeeknotes/1772

View MORE
Open in Telegram


Telegram News

Date: |

To upload a logo, click the Menu icon and select “Manage Channel.” In a new window, hit the Camera icon. The SUCK Channel on Telegram, with a message saying some content has been removed by the police. Photo: Telegram screenshot. End-to-end encryption is an important feature in messaging, as it's the first step in protecting users from surveillance. Activate up to 20 bots Today, we will address Telegram channels and how to use them for maximum benefit.
from us


Telegram Записки разработчицы
FROM American