Kotlin
2.17K subscribers
288 photos
124 videos
18 files
413 links
Подборки полезного материала по Kotlin. По всем вопросам @evgenycarter
Download Telegram
Избегайте использования изменяемых коллекций в конструкторе data-классов в Kotlin

В своих предыдущих статьях я показывал, как использование var, Array или лямбды в конструкторе data-класса на Kotlin может привести к неожиданному поведению и трудноуловимым багам.

Эти проблемы часто связаны с тем, как работают equals(), hashCode() и copy() — особенно в логике сравнения коллекций, диффов или рекомпозиции.

https://proandroiddev.com/avoid-using-mutable-collections-in-the-data-class-constructor-in-kotlin-53d17897114e

✍️ @kotlin_lib
👍1
Тёмные стороны inline, crossinline и reified в Kotlin

Конструкции inline, crossinline и reified в Kotlin позиционируются как абстракции без накладных расходов. Действительно, они позволяют избежать лишних выделений памяти, создавать типобезопасные билдеры и улучшать производительность.

Однако неправильное их использование может привести к следующим проблемам:

- Повреждённые stack trace’ы, из-за чего краши трудно отлаживать в продакшене.
- Тонкие баги с отменой корутин или IllegalStateException.
- Непреднамеренные утечки API и жёсткая связка встроенного (inlined) кода.

https://proandroiddev.com/the-dark-corners-of-inline-crossinline-and-reified-in-kotlin-d244eaa07bb1

✍️ @kotlin_lib
👍3
👩‍💻 Как создать свой собственный оператор Flow и использовать его в архитектуре приложения?

🗓 12 августа в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Android Developer. Professional».

На открытом уроке вы научитесь писать свой собственный оператор Flow с нуля. Мы разберём, как интегрировать оператор в архитектуру приложения, а также научимся строить архитектуру для гибкости и масштабируемости.

Этот урок идеально подойдёт разработчикам уровня junior и выше, стремящимся углубить знания и научиться эффективно использовать Flow в своих проектах.

🔗 Ссылка на регистрацию: https://vk.cc/cOkVjY

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
👎1
👍2
Java vs Kotlin: у кого больше преимуществ в 2025 году

В 2018 я впервые познакомился с Kotlin, и он мне практически сразу понравился. Да и как можно не полюбить язык, названный в честь тотемного животного всех программистов? Шучу, на самом деле в честь острова.

Я уже несколько лет пишу бэкенд на Kotlin. До этого писал на Java, но переход совершил практически одномоментно, потому что тогда мне казалось, что Kotlin закрывает множество минусов Java и привносит более простой и лаконичный синтаксис. Но при этом я стараюсь следить за тем, как развивается Java.

https://habr.com/ru/companies/raiffeisenbank/articles/934990/

✍️ @kotlin_lib
👎2👍1
🔥 Нововведения Kotlin 1.9-2.2 для JVM

Приглашаем на открытый урок.

🗓 19 августа в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Kotlin Backend Developer. Professional».

На вебинаре мы рассмотрим:
- изменения в enum
- data objects и data class
- JvmDefault
- компилятор K2
- guard conditions
- break and continue в лямбдах
- multi-dollar string interpolation
- context parameters
- context-sensitive resolution
- @ all

🔗 Ссылка на регистрацию: https://vk.cc/cOvnqv

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Создание WebView-контрола для Compose Desktop

В компании TeamDev мы занимаемся разработкой JxBrowser — коммерческой библиотеки, которая позволяет встраивать Chromium-движок в Java-приложения на десктопах. Ранее нами уже были реализованы контролы BrowserView для классических Java GUI-фреймворков: Swing, JavaFX и SWT. Теперь мы решили расширить поддержку и создать аналогичный компонент для Compose Multiplatform — для Desktop.

Что такое WebView внутри приложения

WebView — это UI-компонент, позволяющий приложению отображать и взаимодействовать с веб-контентом (вроде браузера внутри вашего приложения). Он отображает веб-страницы, обрабатывает JavaScript, куки и другие веб-взаимодействия — полностью в рамках жизненного цикла приложения.

Зачем Compose

Jetpack Compose быстро стал популярен среди Kotlin-разработчиков на Android. Compose Multiplatform расширяет этот подход на десктоп. Однако у Compose нет встроенного десктопного WebView — и мы увидели отличную возможность закрыть этот пробел.

Новая модель UI

Compose использует декларативный подход: UI описывается состоянием, вместо императивного обновления элементов. Компонент отображает текущее состояние, и изменения происходят автоматически по мере смены состояния.

Основная техническая задача: рендеринг

Chromium рендерит страницу в отдельном процессе, а затем результат — пиксели — нужно передать обратно Java/Kotlin для отображения внутри Compose. Мы решили это двумя способами:

1. Копирование пикселей — Chromium рендерит страницу, копирует пиксели в Java-буфер, и затем изображение рисуется в Compose Canvas.
2. Рендеринг на нативной поверхности — более производительно: Chromium отрисовывает контент напрямую на нативной поверхности, встроенной в Compose.

https://teamdev.com/jxbrowser/blog/building-web-view-for-compose/

✍️ @kotlin_lib
👍3
Разница между job.cancel() и scope.cancel() в Kotlin Coroutines

В Kotlin-корутинах часто путают отмену конкретного Job и всей области видимости (Scope). Разберёмся.

Что такое Job и Scope?

- Job - отдельная корутина, возвращается при launch или async.
- CoroutineScope - контейнер для корутин. В нём есть общий Job, управляющий жизненным циклом всех корутин внутри.

job.cancel()

Отменяет только одну корутину.


val scope = CoroutineScope(Dispatchers.Default)

val jobA = scope.launch { delay(5000) }
val jobB = scope.launch { delay(10000) }

jobA.cancel() // Отменится только jobA, jobB продолжит работу


Scope остаётся активным и можно запускать новые задачи.

scope.cancel()

Отменяет все корутины в области видимости и сам scope.


scope.cancel() // Все корутины в scope будут остановлены


После этого новые корутины запустить уже нельзя.

https://medium.com/proandroiddev/kotlin-coroutines-the-real-difference-between-job-cancel-and-scope-cancel-05e1d9dd5245

✍️ @kotlin_lib
👍5
👩‍💻 Пройди тест для 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/cOz4d1

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
Элегантная обработка ошибок в Kotlin: использование runCatching и Result

Обработка исключений — важный аспект написания надёжных приложений, однако традиционные блоки try/catch могут приводить к многословному и вложенному коду, который сложно читать и сопровождать. Kotlin предлагает более изящный подход с помощью функции runCatching и типа Result, которые позволяют обрабатывать исключения в функциональном стиле, сохраняя читаемость кода и предотвращая сбои.

В этой статье рассматривается, как эффективно использовать эти возможности для улучшения вашей стратегии обработки ошибок.

https://carrion.dev/en/posts/runcatching-result-pattern/

✍️ @kotlin_lib
👍4👎1
Media is too big
VIEW IN TELEGRAM
Making native SDKs Multiplatform at RevenueCat
Joop Korteweg

В быстро развивающейся экосистеме Kotlin Multiplatform одним из критических пробелов было отсутствие единого решения для покупок внутри приложения и подписок. До сегодняшнего дня. SDK RevenueCat для Kotlin Multiplatform позволяет написать код работы с подписками один раз и запускать его как на Android, так и на iOS. Но как мы это реализовали? У нас уже были нативные SDK для Android и iOS, и мы не хотели переписывать всю основную логику заново. В этом докладе мы расскажем о стратегиях, подводных камнях и уроках, которые мы извлекли из нашего подхода к переносу нативных SDK в Kotlin Multiplatform.

источник

✍️ @kotlin_lib
🔥2👍1💩1
⌨️ Kotlin: ключ к современным backend-решениям!

Курс «Kotlin Backend Developer. Professional» — всё, что нужно для создания гибких и производительных приложений.

Что вы освоите:

✔️ Работу с Kotlin Multiplatform для JS, JVM, Android, iOS.
✔️ Spring, Ktor, RabbitMQ, Kafka, Postgres.
✔️ Создание архитектуры: монолиты, микросервисы и бессерверные решения.
✔️ Реальные кейсы: разработка стартапа с нуля.

Почему выбирают нас?

✔️ Живые лекции от экспертов топовых компаний.
✔️ Диплом OTUS, который признают крупные работодатели.
✔️ Практика, которая готовит к сложным проектам.

🎫 Курс можно приобрести в рассрочку

➡️ Пройди вступительный тест и присоединяйся к группе: https://vk.cc/cOIuqU

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
Освой Kotlin и Android за 60 часов

Этот обширный курс по Kotlin и Android проведёт вас от основ до продвинутых концепций с практическими заданиями. В ходе курса для начинающих научит вас создавать несколько реальных приложений, включая впечатляющий клон Uber, демонстрирующий профессиональные приёмы разработки.

Курс охватывает Firestore, SQLite, MVVM, Retrofit, Navigation Component, Jetpack Compose и многое другое.

https://www.youtube.com/watch?v=blKkRoZPxLc

✍️ @kotlin_lib
👍4🔥1🤯1
News-KMP-App

Приложение News KMP - это мультиплатформенный проект на Kotlin Compose, цель которого - обеспечить единообразный опыт чтения новостей на различных платформах, включая Android, iOS, Windows, macOS и Linux. В этом проекте используются мультиплатформенные возможности Kotlin для совместного использования кода и логики, а также Compose для пользовательского интерфейса, что обеспечивает бесшовную и естественную работу на каждой платформе.

https://github.com/Coding-Meet/News-KMP-App?tab=readme-ov-file

✍️ @kotlin_lib
👍2
👩‍💻 Хотите стать профи в Android-разработке и вывести свои навыки на новый уровень?

Онлайн-курс «Android Developer. Professional» от OTUS поможет вам освоить самые современные инструменты и фреймворки, такие как Kotlin, Dagger, RxJava и Kotlin coroutines, а также научит проектировать архитектуру приложения и оптимизировать код.

🦾 После обучения вы сможете разбираться в Android SDK, устранять баги, ускорять приложения, проектировать надежную архитектуру и работать с CI/CD.

🎁 Дарим промокод, который дает скидку на обучение - ANDROIDPRO8

➡️ Пройди вступительный тест и присоединяйся к группе: https://vk.cc/cOMqhT

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
1
👩‍💻Исследуем компиляцию Kotlin (native)

Недавно я разбирался с проблемой времени сборки в Kotlin/Native и подумал: «Хм, а что на самом деле делает задача linkReleaseFrameworkIosArm64? Почему она так долго выполняется?» Хотя я понимаю, как работает компиляция на Android, я вдруг осознал, что совершенно не разбираюсь в нативном мире.
Работает ли задача линковки только с моим кодом или ещё и с зависимостями? А что насчёт задачи compileKotlinIosArm64? Что именно она делает? Честно говоря… не знаю. Понятия не имею, но мне определённо хочется разобраться. И я воспользуюсь тобой 🫵, читатель, как мотивацией для исследования и написания этой статьи. Так что спасибо, что остаёшься рядом.

➡️ Читать далее

✍️ @kotlin_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3👎1
📱System Design в мобильной разработке — это про архитектуру, которая выходит за рамки экранов и навигации.

Чтобы приложения масштабировались, выдерживали нагрузку и не ломались при росте — нужен системный подход.

Как выстроить его на практике? Подробно обсудим это на Podlodka Android Crew, 15-19 сентября.

В программе:

🧩 Бинарная совместимость: где с ней сталкиваются мобильные разработчики и какие ошибки чаще всего приводят к проблемам. (Абакар Магомедов, Альфа-Банк)

🏗️ Мобильный архитектор: какие решения он принимает и почему без этой роли сложно развивать сложные приложения. (Эдуард Некрутов, Blink)

⚙️ Dependency Injection в KMP: обзор фреймворков и разбор, как выбрать подходящее решение под проект. (Александр Власюк, РайффайзенБанк)

⚡️BDUI в Android: опыт от DivKit, Beduin и Duit. Как перестать хардкодить экраны и ускорить эксперименты, чтобы быстрее проверять гипотезы.

🔗 Подключайся — будет полезно

По промокоду для подписчиков скидка 500 р: android_crew_14_d9Uzfo
Когда Kotlin-объект перестаёт быть синглтоном

object в Kotlin - это стандартный способ объявления синглтона: единственного, глобально доступного экземпляра, который создаётся один раз на JVM.

На уровне языка это действительно гарантируется. Но в реальных проектах эта гарантия может быть нарушена - без ошибок компиляции и каких-либо заметных предупреждений.

Одна из распространённых причин - сериализация. Некоторые библиотеки во время десериализации создают новый экземпляр, нарушая равенство по ссылке и ломая общий разделяемый стейт.

В этой статье разбирается, когда Kotlin-синглтоны перестают быть настоящими синглтонами - и как этого избежать на практике.

https://proandroiddev.com/when-kotlin-object-stops-being-a-singleton-604a3354e4ec

✍️ @kotlin_lib
👍3
🚀 Подборка Telegram каналов для программистов

Системное администрирование, DevOps 📌

https://t.iss.one/bash_srv Bash Советы
https://t.iss.one/win_sysadmin Системный Администратор Windows
https://t.iss.one/sysadmin_girl Девочка Сисадмин
https://t.iss.one/srv_admin_linux Админские угодья
https://t.iss.one/linux_srv Типичный Сисадмин
https://t.iss.one/devopslib Библиотека девопса | DevOps, SRE, Sysadmin
https://t.iss.one/linux_odmin Linux: Системный администратор
https://t.iss.one/devops_star DevOps Star (Звезда Девопса)
https://t.iss.one/i_linux Системный администратор
https://t.iss.one/linuxchmod Linux
https://t.iss.one/sys_adminos Системный Администратор
https://t.iss.one/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
https://t.iss.one/sysadminof Книги для админов, полезные материалы
https://t.iss.one/i_odmin Все для системного администратора
https://t.iss.one/i_odmin_book Библиотека Системного Администратора
https://t.iss.one/i_odmin_chat Чат системных администраторов
https://t.iss.one/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
https://t.iss.one/sysadminoff Новости Линукс Linux

1C разработка 📌
https://t.iss.one/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С
https://t.iss.one/DevLab1C 1С:Предприятие 8
https://t.iss.one/razrab_1C 1C Разработчик
https://t.iss.one/buh1C_prog 1C Программист | Бухгалтерия и Учёт
https://t.iss.one/rabota1C_rus Вакансии для программистов 1С

Программирование C++📌
https://t.iss.one/cpp_lib Библиотека C/C++ разработчика
https://t.iss.one/cpp_knigi Книги для программистов C/C++
https://t.iss.one/cpp_geek Учим C/C++ на примерах

Программирование Python 📌
https://t.iss.one/pythonofff Python академия.
https://t.iss.one/BookPython Библиотека Python разработчика
https://t.iss.one/python_real Python подборки на русском и английском
https://t.iss.one/python_360 Книги по Python

Java разработка 📌
https://t.iss.one/BookJava Библиотека Java разработчика
https://t.iss.one/java_360 Книги по Java Rus
https://t.iss.one/java_geek Учим Java на примерах

GitHub Сообщество 📌
https://t.iss.one/Githublib Интересное из GitHub

Базы данных (Data Base) 📌
https://t.iss.one/database_info Все про базы данных

Мобильная разработка: iOS, Android 📌
https://t.iss.one/developer_mobila Мобильная разработка
https://t.iss.one/kotlin_lib Подборки полезного материала по Kotlin

Фронтенд разработка 📌
https://t.iss.one/frontend_1 Подборки для frontend разработчиков
https://t.iss.one/frontend_sovet Frontend советы, примеры и практика!
https://t.iss.one/React_lib Подборки по React js и все что с ним связано

Разработка игр 📌
https://t.iss.one/game_devv Все о разработке игр

Библиотеки 📌
https://t.iss.one/book_for_dev Книги для программистов Rus
https://t.iss.one/programmist_of Книги по программированию
https://t.iss.one/proglb Библиотека программиста
https://t.iss.one/bfbook Книги для программистов

БигДата, машинное обучение 📌
https://t.iss.one/bigdata_1 Big Data, Machine Learning

Программирование 📌
https://t.iss.one/bookflow Лекции, видеоуроки, доклады с IT конференций
https://t.iss.one/rust_lib Полезный контент по программированию на Rust
https://t.iss.one/golang_lib Библиотека Go (Golang) разработчика
https://t.iss.one/itmozg Программисты, дизайнеры, новости из мира IT
https://t.iss.one/php_lib Библиотека PHP программиста 👨🏼‍💻👩‍💻
https://t.iss.one/nodejs_lib Подборки по Node js и все что с ним связано
https://t.iss.one/ruby_lib Библиотека Ruby программиста
https://t.iss.one/lifeproger Жизнь программиста. Авторский канал.

QA, тестирование 📌
https://t.iss.one/testlab_qa Библиотека тестировщика

Шутки программистов 📌
https://t.iss.one/itumor Шутки программистов

Защита, взлом, безопасность 📌
https://t.iss.one/thehaking Канал о кибербезопасности
https://t.iss.one/xakep_2 Хакер Free

Книги, статьи для дизайнеров 📌
https://t.iss.one/ux_web Статьи, книги для дизайнеров

Математика 📌
https://t.iss.one/Pomatematike Канал по математике
https://t.iss.one/phis_mat Обучающие видео, книги по Физике и Математике
https://t.iss.one/matgeoru Математика | Геометрия | Логика

Excel лайфхак📌
https://t.iss.one/Excel_lifehack

https://t.iss.one/mir_teh Мир технологий (Technology World)

Вакансии 📌
https://t.iss.one/sysadmin_rabota Системный Администратор
https://t.iss.one/progjob Вакансии в IT
Как Android-разработчик в iOS погружался: мой опыт внедрения Kotlin Multiplatform

Продукт создавали нативно на каждую платформу, без пересечения кода.

В начале года у нас ушло несколько iOS-разработчиков, из-за чего замедлилась поставка новых функций на обеих платформах. Мы решили, что это повод внедрить наконец кроссплатформенную разработку и выровнять поставку фич на обеих платформах.

В этом материале расскажу, почему мы остановились на KMP, как погружались в iOS c опытом в Android и как прошло внедрение этого фреймворка. Спойлер: быстрее и проще, чем мы думали.

https://habr.com/ru/companies/ru_mts/articles/923366/

✍️ @kotlin_lib
👍1