KOTLIN_BROADCAST Telegram 1932
🏝 В 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
👍46🔥9



tgoop.com/kotlin_broadcast/1932
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 Kotlin Multiplatform Broadcast


Share with your friend now:
tgoop.com/kotlin_broadcast/1932

View MORE
Open in Telegram


Telegram News

Date: |

Add the logo from your device. Adjust the visible area of your image. Congratulations! Now your Telegram channel has a face Click “Save”.! So far, more than a dozen different members have contributed to the group, posting voice notes of themselves screaming, yelling, groaning, and wailing in various pitches and rhythms. A Telegram channel is used for various purposes, from sharing helpful content to implementing a business strategy. In addition, you can use your channel to build and improve your company image, boost your sales, make profits, enhance customer loyalty, and more. Telegram message that reads: "Bear Market Screaming Therapy Group. You are only allowed to send screaming voice notes. Everything else = BAN. Text pics, videos, stickers, gif = BAN. Anything other than screaming = BAN. You think you are smart = BAN. Read now
from us


Telegram Kotlin Multiplatform Broadcast
FROM American