Почему не стоит использовать
🔸 В
🔸 Но
🔸 Из-за этого два объекта с одинаковыми массивами будут не равны:
🔸 Такая «ссылочная» проверка приводит к проблемам с коллекциями (
✅ Решение: вместо
Тогда
https://proandroiddev.com/avoid-using-array-in-the-data-class-constructor-in-kotlin-ebc308e46a95
✍️ @kotlin_lib
Array
в data class
Kotlin:🔸 В
data class
методы equals()
и hashCode()
генерируются автоматически на основе полей.🔸 Но
Array
в Kotlin (и Java) сравнивает не содержимое, а ссылки на объекты.🔸 Из-за этого два объекта с одинаковыми массивами будут не равны:
data class Person(val name: String, val friends: Array<String>)
val p1 = Person("Mike", arrayOf("Mary", "John", "Tom"))
val p2 = Person("Mike", arrayOf("Mary", "John", "Tom"))
println(p1 == p2) // false!
🔸 Такая «ссылочная» проверка приводит к проблемам с коллекциями (
HashSet
, HashMap
) и к «невидимым» багам: дубликаты, неверные кеш-промахи и т. д.✅ Решение: вместо
Array
используйте коллекции, которые сравнивают содержимое:
data class Person(val name: String, val friends: List<String>)
Тогда
equals()
проверит элементы списка по значению, и Person("Mike", listOf("Mary","John","Tom")) == Person("Mike", listOf("Mary","John","Tom"))
вернёт true
.https://proandroiddev.com/avoid-using-array-in-the-data-class-constructor-in-kotlin-ebc308e46a95
✍️ @kotlin_lib
👍3
🧩 Ktorfit — это библиотека, вдохновлённая Retrofit, для HTTP-клиентов на Ktor.
Она позволяет описывать HTTP-запросы с помощью аннотаций прямо в интерфейсах, как в Retrofit. Ktorfit использует KSP (Kotlin Symbol Processing) для генерации кода, поэтому не требует рефлексии и работает быстро.
🔧 Пример использования
Ktorfit создаёт реализацию интерфейса, которую можно использовать вот так:
📦 Особенности:
* Поддержка всех стандартных аннотаций:
* Полная интеграция с
* Генерация кода через KSP — высокая производительность
* Нет зависимости от Android
* Поддержка Kotlin Multiplatform
https://github.com/Foso/Ktorfit
✍️ @kotlin_lib
Она позволяет описывать HTTP-запросы с помощью аннотаций прямо в интерфейсах, как в Retrofit. Ktorfit использует KSP (Kotlin Symbol Processing) для генерации кода, поэтому не требует рефлексии и работает быстро.
🔧 Пример использования
@HttpApi
interface GitHubApi {
@GET("users/{user}/repos")
suspend fun listRepos(@Path("user") user: String): List<Repo>
}
Ktorfit создаёт реализацию интерфейса, которую можно использовать вот так:
val ktorfit = Ktorfit.Builder()
.baseUrl("https://api.github.com/")
.httpClient(HttpClient())
.build()
val api = ktorfit.create<GitHubApi>()
val repos = api.listRepos("Foso")
📦 Особенности:
* Поддержка всех стандартных аннотаций:
@GET
, @POST
, @Query
, @Path
, @Header
, и др.* Полная интеграция с
Ktor HttpClient
* Генерация кода через KSP — высокая производительность
* Нет зависимости от Android
* Поддержка Kotlin Multiplatform
https://github.com/Foso/Ktorfit
✍️ @kotlin_lib
👍5🥱5
Не хотите поговорить о Kotlin Contracts?
За время собеседований я заметил одну любопытную вещь: даже опытные котлиноводы частенько не в курсе такой мощной фичи, как Kotlin Contracts.
Этой серией статей я хочу простым человеческим языком показать, зачем нужны Contracts, как их использовать на практике и как они работают внутри.
Какую проблему решают Kotlin Contracts?
Все мы любим Kotlin за умные проверки типов. Например, напишешь так:
И всё работает!
Но стоит вынести ту же проверку в отдельную функцию:
В чём подвох?
https://habr.com/ru/companies/alfa/articles/916536/
✍️ @kotlin_lib
За время собеседований я заметил одну любопытную вещь: даже опытные котлиноводы частенько не в курсе такой мощной фичи, как Kotlin Contracts.
Этой серией статей я хочу простым человеческим языком показать, зачем нужны Contracts, как их использовать на практике и как они работают внутри.
Какую проблему решают Kotlin Contracts?
Все мы любим Kotlin за умные проверки типов. Например, напишешь так:
fun foo(x: Any) {
if (x is List<*>) {
x.size // Всё ок, компилятор молодец!
}
}
И всё работает!
Но стоит вынести ту же проверку в отдельную функцию:
fun isList(x: Any): Boolean = x is List<*>
fun foo(x: Any) {
if (isList(x)) {
x.size // Ошибка: "Unresolved reference: size"
}
}
В чём подвох?
https://habr.com/ru/companies/alfa/articles/916536/
✍️ @kotlin_lib
👍3
Media is too big
VIEW IN TELEGRAM
Klibs.io — the dream of creating a Kotlin Package Index
Ignat Beresnev
So you want to build a Kotlin package index.. What is a package anyway, is it the same as an artifact? What makes a project a library then? And why is it an index and not a repository?
источник
✍️ @kotlin_lib
Ignat Beresnev
So you want to build a Kotlin package index.. What is a package anyway, is it the same as an artifact? What makes a project a library then? And why is it an index and not a repository?
источник
✍️ @kotlin_lib
👍3
Media is too big
VIEW IN TELEGRAM
Подводные камни Kotlin Coroutines
Корутины не так уж сложно понять, когда вы разобрались с основами, но есть несколько подводных камней, которые могут сбить с толку. В сегодняшнем видео я поделюсь распространёнными ошибками, которые могут застать врасплох, если не быть внимательным.
✍️ @kotlin_lib
Корутины не так уж сложно понять, когда вы разобрались с основами, но есть несколько подводных камней, которые могут сбить с толку. В сегодняшнем видео я поделюсь распространёнными ошибками, которые могут застать врасплох, если не быть внимательным.
✍️ @kotlin_lib
👎5👍1🤡1
KotlinJS в GitHub Actions
GitHub Actions (GHA) — отличный инструмент для настройки CI/CD, а в GitHub Marketplace можно найти тысячи готовых GHA под любые задачи. Но всегда же найдётся процесс, который захочется настроить под себя. Тогда нам придётся написать кастомный GHA.
Привет! Это Макс Качинкин, Android Tech Lead в Додо. В этой статье я покажу, как создать свой GHA на Kotlin/JS, используя плагин Kotlin Multiplatform, и поделюсь готовым шаблоном в GitHub, с помощью которого вы сможете быстро написать собственный экшен на Kotlin/JS. Погнали!
https://habr.com/ru/companies/dododev/articles/898704/
✍️ @kotlin_lib
GitHub Actions (GHA) — отличный инструмент для настройки CI/CD, а в GitHub Marketplace можно найти тысячи готовых GHA под любые задачи. Но всегда же найдётся процесс, который захочется настроить под себя. Тогда нам придётся написать кастомный GHA.
Привет! Это Макс Качинкин, Android Tech Lead в Додо. В этой статье я покажу, как создать свой GHA на Kotlin/JS, используя плагин Kotlin Multiplatform, и поделюсь готовым шаблоном в GitHub, с помощью которого вы сможете быстро написать собственный экшен на Kotlin/JS. Погнали!
https://habr.com/ru/companies/dododev/articles/898704/
✍️ @kotlin_lib
👍3❤1