🔥 “val” — не панацея: когда immutable переменные создают проблемы
Kotlin приучает нас к
На практике это может привести к багам, особенно при работе с
💥 Пример проблемы:
Вроде бы
- передаёте
- работаете с кэшем или shared state;
- делаете
🧠 Хуже в многопоточке:
Если доступ к
✅ Как писать безопаснее:
- Используйте
- Если нужно менять данные — лучше явно использовать
- Для shared state — применяйте
🧵 Ещё пример — data class:
Снаружи кажется, что
⚠️ Вывод
✍️ @kotlin_lib
Kotlin приучает нас к
val
: "если переменная не меняется — сделай её immutable". Это правильно, но есть нюанс: val
не гарантирует неизменяемость объекта, а только то, что ссылка не переназначится.На практике это может привести к багам, особенно при работе с
MutableList
, var
- свойствами в data-классах, или в многопоточном коде.💥 Пример проблемы:
val items = mutableListOf("A", "B")
items.add("C") // OK, но items всё ещё val
Вроде бы
val
, значит безопасно? Нет — items
мутируются. Это особенно критично, если вы:- передаёте
val
в другие слои архитектуры;- работаете с кэшем или shared state;
- делаете
val
глобальными или синглтонами.🧠 Хуже в многопоточке:
class Cache {
val data = mutableMapOf<String, Any>()
}
Если доступ к
data
не синхронизирован — ловите гонки. А val
создаёт ложное ощущение защищённости.✅ Как писать безопаснее:
- Используйте
List
, Map
(immutable интерфейсы), а не MutableList
, MutableMap
, если нет необходимости в мутации.
val items: List<String> = listOf("A", "B")
- Если нужно менять данные — лучше явно использовать
var
, чтобы было видно, что объект изменчив.
var state = State()
- Для shared state — применяйте
StateFlow
, Mutex
, atomic
-типы и пр. инструменты контроля доступа.🧵 Ещё пример — data class:
data class User(var name: String)
val user = User("Alice")
user.name = "Bob" // mutable, хотя user — val
Снаружи кажется, что
user
не меняется. Но его внутренности - легко. В больших командах это ведёт к багам.⚠️ Вывод
val
— это про неизменность ссылки, не объекта. Не полагайтесь на val
как на гарантию иммутабельности. Будьте явными в намерениях: или делайте объект действительно immutable, или давайте понять, что он может меняться.✍️ @kotlin_lib
👍6❤1👎1
Мастерство отмены корутин в Kotlin: лучшие практики, частые ошибки и безопасная работа с повторяющимися задачами
При использовании корутин в Kotlin для повторяющихся задач — таких как опрос API, периодическое обновление данных или выполнение по расписанию — крайне важно чётко понимать, как работает отмена корутин. Неправильная обработка отмены может привести к скрытым ошибкам, бесконечным циклам или «зомби-корутинам».
Эта статья подробно объясняет механизм отмены корутин, типичные ошибки и лучшие практики для их правильного управления.
https://proandroiddev.com/age-mastering-coroutine-cancellation-in-kotlin-best-practices-common-pitfalls-and-safe-handling-41f702503977
✍️ @kotlin_lib
При использовании корутин в Kotlin для повторяющихся задач — таких как опрос API, периодическое обновление данных или выполнение по расписанию — крайне важно чётко понимать, как работает отмена корутин. Неправильная обработка отмены может привести к скрытым ошибкам, бесконечным циклам или «зомби-корутинам».
Эта статья подробно объясняет механизм отмены корутин, типичные ошибки и лучшие практики для их правильного управления.
https://proandroiddev.com/age-mastering-coroutine-cancellation-in-kotlin-best-practices-common-pitfalls-and-safe-handling-41f702503977
✍️ @kotlin_lib
❤3
Приглашаем на открытый урок «Стиль разработки 2020-х и среда окружения современного бэкенд-приложения».
🗓 30 июля в 19:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Kotlin Backend Developer. Professional».
На открытом уроке вы узнаете, как поменялся стиль разработки в 2020-х и какие компоненты уже не нужно писать самому. Поговорим о том, как в современном бэкенде выполнять только ключевую бизнес-логику.
🔗 Ссылка на регистрацию: https://vk.cc/cNTF4N
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
Вышел Coil 3.3.0 - загрузчик картинок с поддержкой KMP
https://github.com/coil-kt/coil/blob/main/CHANGELOG.md#330---july-22-2025
✍️ @kotlin_lib
https://github.com/coil-kt/coil/blob/main/CHANGELOG.md#330---july-22-2025
✍️ @kotlin_lib
GitHub
coil/CHANGELOG.md at main · coil-kt/coil
Image loading for Android and Compose Multiplatform. - coil-kt/coil
❤4👍1
Animate.compose — мощная библиотека анимаций Kotlin Multiplatform для Jetpack Compose с более чем 90 готовыми к использованию анимациями.
Фичи: более 90 готовых анимаций, простой API, на основе ключевых кадров — плавная, естественная анимация с плавными переходами, поддержка Android, iOS, Desktop, и Web, быстродействующая, настраиваемая, с интерактивной игровой площадкой для тестирования.
https://github.com/nomanr/animate-compose
✍️ @kotlin_lib
Фичи: более 90 готовых анимаций, простой API, на основе ключевых кадров — плавная, естественная анимация с плавными переходами, поддержка Android, iOS, Desktop, и Web, быстродействующая, настраиваемая, с интерактивной игровой площадкой для тестирования.
https://github.com/nomanr/animate-compose
✍️ @kotlin_lib
👍8
🤖 Пройди тест для Android-разработчиков и проверь свои знания, готов ли ты к обучению на курсе.
Ответишь — пройдешь на продвинутый курс "Android Developer. Professional " от OTUS.
За 5 месяцев обучения ты освоишь:
— Проектирование архитектуры: Clean Architecture, MV*, многомодульные приложения и профессиональное использование DI.
— Современный стек: Kotlin, Jetpack Compose, Coroutines/Flow, Dagger 2/Hilt, Gradle.
— Разработку кросс-платформенных приложений с использованием Kotlin Multiplatform.
— Глубокое понимание Android SDK: оптимизация, безопасность и производительность приложений.
— Организацию инфраструктуры: CI/CD, Docker, линтеры, автоматизация сборки и мониторинг.
— Написание надежных тестов: интеграционные, UI-тесты и работа с фреймворками.
👉 ПРОЙТИ ТЕСТ: https://vk.cc/cNXvF1
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Ответишь — пройдешь на продвинутый курс "Android Developer. Professional " от OTUS.
За 5 месяцев обучения ты освоишь:
— Проектирование архитектуры: Clean Architecture, MV*, многомодульные приложения и профессиональное использование DI.
— Современный стек: Kotlin, Jetpack Compose, Coroutines/Flow, Dagger 2/Hilt, Gradle.
— Разработку кросс-платформенных приложений с использованием Kotlin Multiplatform.
— Глубокое понимание Android SDK: оптимизация, безопасность и производительность приложений.
— Организацию инфраструктуры: CI/CD, Docker, линтеры, автоматизация сборки и мониторинг.
— Написание надежных тестов: интеграционные, UI-тесты и работа с фреймворками.
👉 ПРОЙТИ ТЕСТ: https://vk.cc/cNXvF1
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
👍1
Media is too big
VIEW IN TELEGRAM
Однопоточные корутины в Kotlin
Причина, по которой многим разработчикам сложно разобраться с корутинами в Kotlin, заключается не в том, что они сами по себе трудны для понимания. Проблема в том, что корутины часто подаются слишком перегруженно — сразу с погружением в асинхронный код. Но по своей сути корутины — это не про асинхронность. Это про конкурентное (параллельное) выполнение кода. И вот это как раз гораздо проще понять.
источник
✍️ @kotlin_lib
Причина, по которой многим разработчикам сложно разобраться с корутинами в Kotlin, заключается не в том, что они сами по себе трудны для понимания. Проблема в том, что корутины часто подаются слишком перегруженно — сразу с погружением в асинхронный код. Но по своей сути корутины — это не про асинхронность. Это про конкурентное (параллельное) выполнение кода. И вот это как раз гораздо проще понять.
источник
✍️ @kotlin_lib
👍5👎1
Media is too big
VIEW IN TELEGRAM
Алина Гребёнкина — как сделать так, чтобы разработчики использовали Kotlin
Тайм-коды:
00:00 — Избранные моменты выпуска
00:37 — Начало выпуска
00:50 — Расскажи подробнее, что ты делаешь на работе?
01:30 — Что такое Kotlin?
03:34 — Кем ты хотела стать, когда вырастешь?
05:10 — Про школу и интересы в школьное время
08:03 — Про ЕГЭ и обучение в СУНЦ НГУ
14:34 — Как ты выбирала универ и как тебе там было после СУНЦа?
16:45 — Как появилась твоя первая работа и что ты делала?
19:29 — Как происходил твой рост в работе за эти два года?
21:05 — Почему ты решила уйти и как искала новую работу?
23:00 — Про собеседования в Москве
24:21 — Работа в СММ-агентстве и переход к разработке брендинговых стратегий
26:33 — «Поняла, что хочется перейти на сторону продукта»
29:03 — Что ты делала в Bookmate?
31:22 — Почему ты ушла?
33:32 — Как ты попала в JetBrains?
37:55 — Что ты посоветуешь человеку, который хочет в IT?
40:45 — Ты работаешь в IT, но ты не пишешь код. Тебе с этим ок?
42:03 — Подкаст выходит при поддержке школы karpov.courses
42:27 — Cпасибо Haos Community Space за предоставленное место для съемки
источник
✍️ @kotlin_lib
Тайм-коды:
00:00 — Избранные моменты выпуска
00:37 — Начало выпуска
00:50 — Расскажи подробнее, что ты делаешь на работе?
01:30 — Что такое Kotlin?
03:34 — Кем ты хотела стать, когда вырастешь?
05:10 — Про школу и интересы в школьное время
08:03 — Про ЕГЭ и обучение в СУНЦ НГУ
14:34 — Как ты выбирала универ и как тебе там было после СУНЦа?
16:45 — Как появилась твоя первая работа и что ты делала?
19:29 — Как происходил твой рост в работе за эти два года?
21:05 — Почему ты решила уйти и как искала новую работу?
23:00 — Про собеседования в Москве
24:21 — Работа в СММ-агентстве и переход к разработке брендинговых стратегий
26:33 — «Поняла, что хочется перейти на сторону продукта»
29:03 — Что ты делала в Bookmate?
31:22 — Почему ты ушла?
33:32 — Как ты попала в JetBrains?
37:55 — Что ты посоветуешь человеку, который хочет в IT?
40:45 — Ты работаешь в IT, но ты не пишешь код. Тебе с этим ок?
42:03 — Подкаст выходит при поддержке школы karpov.courses
42:27 — Cпасибо Haos Community Space за предоставленное место для съемки
источник
✍️ @kotlin_lib
👍3❤1🤡1
🏆 Пройди тест из 10 вопросов, проверь свой уровень знаний и приходи учиться на онлайн-курс «Kotlin Backend Developer. Professional» от OTUS!
На курсе:
🎫 Курс можно приобрести в рассрочку
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
😁1💊1
Паттерн Декоратор в Kotlin — следуя принципу «Открытости/Закрытости»
В предыдущей статье мы рассмотрели принцип открытости/закрытости (Open/Closed Principle, OCP) — краеугольный камень SOLID, который гласит, что программные сущности должны быть открыты для расширения, но закрыты для модификации. Мы взяли жёсткую систему валидации одноразовых паролей (OTP) и переработали её с использованием паттерна «Стратегия», получив чистый и легко сопровождаемый код, где каждый набор правил валидации стал отдельным классом.
Это был огромный шаг вперёд. Но путь к действительно гибкой архитектуре редко заканчивается на первом решении. По мере усложнения требований ограничения одного паттерна часто подталкивают к применению другого.
https://itnext.io/decorator-pattern-in-kotlin-embracing-open-closed-principle-b469adc2ab7b
✍️ @kotlin_lib
В предыдущей статье мы рассмотрели принцип открытости/закрытости (Open/Closed Principle, OCP) — краеугольный камень SOLID, который гласит, что программные сущности должны быть открыты для расширения, но закрыты для модификации. Мы взяли жёсткую систему валидации одноразовых паролей (OTP) и переработали её с использованием паттерна «Стратегия», получив чистый и легко сопровождаемый код, где каждый набор правил валидации стал отдельным классом.
Это был огромный шаг вперёд. Но путь к действительно гибкой архитектуре редко заканчивается на первом решении. По мере усложнения требований ограничения одного паттерна часто подталкивают к применению другого.
https://itnext.io/decorator-pattern-in-kotlin-embracing-open-closed-principle-b469adc2ab7b
✍️ @kotlin_lib
👍3🤔1
Media is too big
VIEW IN TELEGRAM
Опыт внедрения Kotlin и Compose Multiplatform в продакшн-решение
Леонид Емельянов (SberAutoTech)
Поделюсь опытом перехода на Kotlin и Compose Multimplatform. Расскажу, почему мы выбрали именно эти решения, как переходили на новый технологический стек, являясь частью более крупного Android-приложения, и что из всего этого вышло.
источник
✍️ @kotlin_lib
Леонид Емельянов (SberAutoTech)
Поделюсь опытом перехода на Kotlin и Compose Multimplatform. Расскажу, почему мы выбрали именно эти решения, как переходили на новый технологический стек, являясь частью более крупного Android-приложения, и что из всего этого вышло.
источник
✍️ @kotlin_lib
👍1
🤖 Тест по Flutter проверь свои знания, готов ли ты к обучению на курсе.
Ответишь — пройдешь на курс "Flutter Mobile Developer" от OTUS по специальной цене + получишь доступ к записям открытых уроков курса
За 6 месяцев вы освоите Dart, Flutter и ключевые инструменты разработки, создадите несколько приложений, получите поддержку преподавателей и выполните проект для портфолио.
➡️ ПРОЙТИ ТЕСТ И ОЗНАКОМИТСЯ С ПРОГРАММОЙ: https://vk.cc/cO9FnG
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Ответишь — пройдешь на курс "Flutter Mobile Developer" от OTUS по специальной цене + получишь доступ к записям открытых уроков курса
За 6 месяцев вы освоите Dart, Flutter и ключевые инструменты разработки, создадите несколько приложений, получите поддержку преподавателей и выполните проект для портфолио.
➡️ ПРОЙТИ ТЕСТ И ОЗНАКОМИТСЯ С ПРОГРАММОЙ: https://vk.cc/cO9FnG
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Media is too big
VIEW IN TELEGRAM
Организация кода в проекте | В какой пакет положить Kotlin класс
0:00 Введение
1:16 Куда можно класть Kotlin файлы
2:42 Интеграция
3:39 Как разделить код по Gradle модулям
6:23 Несколько папок с исходным кодом
7:42 Пакеты с кодом
14:03 Выделение кода в AAR/JAR библиотеки
15:37 Заключение
источник
✍️ @kotlin_lib
0:00 Введение
1:16 Куда можно класть Kotlin файлы
2:42 Интеграция
3:39 Как разделить код по Gradle модулям
6:23 Несколько папок с исходным кодом
7:42 Пакеты с кодом
14:03 Выделение кода в AAR/JAR библиотеки
15:37 Заключение
источник
✍️ @kotlin_lib
👍1
Приглашаем на открытый урок, создадим приложение «Фото дня»
🗓 05 августа в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Android Developer. Professional».
На вебинаре:
- Разберемся с API сервера для скачивания фотографии и описания к ней
- Сверстаем простой экран для отображения данных
- Пропишем выход в интернет для скачивания данных
- Пропишем бизнес-логику для отображения данных на экране приложения
🔗 Ссылка на регистрацию: https://vk.cc/cO9GpJ
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👎1
Богатые ошибки в Kotlin | Михаил Зареченский
Модель null-безопасности в Kotlin — одна из её ключевых особенностей. В этом докладе мы рассмотрим, как эту модель можно обобщить до ограниченных объединённых типов, специально предназначенных для обработки ошибок.
Кроме того, мы обсудим, как ошибки могут быть представлены в Kotlin сегодня, включая такие подходы, как nullable-типы, исключения, иерархии sealed-классов и классы, подобные Result.
https://www.youtube.com/watch?v=IUrA3mDSWZQ
✍️ @kotlin_lib
Модель null-безопасности в Kotlin — одна из её ключевых особенностей. В этом докладе мы рассмотрим, как эту модель можно обобщить до ограниченных объединённых типов, специально предназначенных для обработки ошибок.
Кроме того, мы обсудим, как ошибки могут быть представлены в Kotlin сегодня, включая такие подходы, как nullable-типы, исключения, иерархии sealed-классов и классы, подобные Result.
https://www.youtube.com/watch?v=IUrA3mDSWZQ
✍️ @kotlin_lib
YouTube
Rich Errors in Kotlin | Michail Zarečenskij
Recording brought to you by American Express. https://americanexpress.io/kotlin-jobs
Kotlin's nullability model is one of its core features. In this talk, we’ll explore how this model can be generalized to restricted union types specifically designed for…
Kotlin's nullability model is one of its core features. In this talk, we’ll explore how this model can be generalized to restricted union types specifically designed for…
❤2👍1