ch
Feedback
Kotlin

Kotlin

前往频道在 Telegram

Подборки полезного материала по Kotlin. По всем вопросам @evgenycarter

显示更多
2 091
订阅者
-124 小时
-57
+230
吸引订阅者
六月 '26
六月 '26
+3
在0个频道中
五月 '26
+29
在0个频道中
Get PRO
四月 '26
+16
在0个频道中
Get PRO
三月 '26
+19
在0个频道中
Get PRO
二月 '26
+17
在0个频道中
Get PRO
一月 '26
+18
在0个频道中
Get PRO
十二月 '25
+20
在0个频道中
Get PRO
十一月 '25
+36
在32个频道中
Get PRO
十月 '25
+26
在0个频道中
Get PRO
九月 '25
+46
在36个频道中
Get PRO
八月 '25
+26
在1个频道中
Get PRO
七月 '25
+44
在27个频道中
Get PRO
六月 '25
+40
在20个频道中
Get PRO
五月 '25
+56
在44个频道中
Get PRO
四月 '25
+50
在37个频道中
Get PRO
三月 '25
+61
在39个频道中
Get PRO
二月 '25
+62
在32个频道中
Get PRO
一月 '25
+75
在34个频道中
Get PRO
十二月 '24
+67
在35个频道中
Get PRO
十一月 '24
+79
在34个频道中
Get PRO
十月 '24
+79
在30个频道中
Get PRO
九月 '24
+75
在29个频道中
Get PRO
八月 '24
+53
在18个频道中
Get PRO
七月 '24
+38
在0个频道中
Get PRO
六月 '24
+42
在24个频道中
Get PRO
五月 '24
+55
在19个频道中
Get PRO
四月 '24
+43
在0个频道中
Get PRO
三月 '24
+67
在21个频道中
Get PRO
二月 '24
+56
在18个频道中
Get PRO
一月 '24
+99
在24个频道中
Get PRO
十二月 '23
+62
在24个频道中
Get PRO
十一月 '23
+56
在17个频道中
Get PRO
十月 '23
+73
在18个频道中
Get PRO
九月 '23
+86
在0个频道中
Get PRO
八月 '23
+71
在0个频道中
Get PRO
七月 '23
+68
在0个频道中
Get PRO
六月 '23
+198
在0个频道中
Get PRO
五月 '23
+66
在0个频道中
Get PRO
四月 '23
+58
在0个频道中
Get PRO
三月 '23
+20
在0个频道中
Get PRO
二月 '23
+60
在0个频道中
Get PRO
一月 '23
+70
在0个频道中
Get PRO
十二月 '22
+93
在0个频道中
Get PRO
十一月 '22
+62
在0个频道中
Get PRO
十月 '22
+153
在0个频道中
Get PRO
九月 '22
+161
在0个频道中
Get PRO
八月 '22
+237
在0个频道中
Get PRO
七月 '22
+298
在0个频道中
Get PRO
六月 '22
+2 205
在0个频道中
日期
订阅者增长
提及
频道
11 六月0
10 六月0
09 六月+1
08 六月+1
07 六月0
06 六月+1
05 六月0
04 六月0
03 六月0
02 六月0
01 六月0
频道帖子
Яндекс обновил Yandex Mobile Ads SDK для монетизации мобильных приложений — и это интересно Во-первых, Yandex Mobile Ads SDK
Яндекс обновил Yandex Mobile Ads SDK для монетизации мобильных приложений — и это интересно Во-первых, Yandex Mobile Ads SDK 8 поддерживает Kotlin Coroutines и Swift async/await. А значит, рекламу можно загружать линейно и предсказуемо. Во-вторых, в новой версии появился скрипт для автогенерации идентификаторов SKAdNetwork в Info.plist. Данные о конверсиях в установку теперь точнее для iOS-приложений. В-третьих, переход на новый SDK автоматизирован. ИИ-агент анализирует код и адаптирует его под API версии 8 — на переход уходит около 15 минут. При всех этих фичах SDK стал весить на 30% меньше для Android и на 15% — для iOS. Приложение скачивается быстрее и весит меньше — а это влияет на конверсию в установку. Подробнее об изменения и переходе на новую версию читайте здесь.

2
ktorgen - Kotlin + KSP + Ktor Client Code Generator Легкий процессор Kotlin KSP для генерации клиентского кода Ktor с аннотац
ktorgen - Kotlin + KSP + Ktor Client Code Generator Легкий процессор Kotlin KSP для генерации клиентского кода Ktor с аннотациями https://github.com/kingg22/ktorgen ✍️ @kotlin_lib
281
3
🧩 Kotlin учится деструктурировать не по позиции, а по имени В Kotlin 2.3.20 появилась экспериментальная фича name-based dest
🧩 Kotlin учится деструктурировать не по позиции, а по имени В Kotlin 2.3.20 появилась экспериментальная фича name-based destructuring. Раньше деструктуризация работала через componentN() и зависела от порядка полей: data class User( val firstName: String, val lastName: String ) val user = User("Alice", "Husseini") val (lastName, firstName) = user И всё: переменные названы красиво, но значения уже перепутаны. Теперь Kotlin предлагает другой подход - связывать переменные с property по имени, а не по позиции: (val firstName = firstName, val lastName = lastName) = user Это делает код безопаснее, особенно когда: — в data class много полей — порядок полей меняется — деструктуризация используется в лямбдах, маппингах и UI-моделях — имя переменной важнее позиции Фича пока экспериментальная и включается через compiler option: freeCompilerArgs.add("-Xname-based-destructuring=only-syntax") Есть несколько режимов: only-syntax - включает явный синтаксис без изменения старого поведения name-mismatch - предупреждает, если имена не совпадают с полями complete - делает деструктуризацию в круглых скобках name-based, а позиционную переносит в квадратные скобки: val [firstName, lastName] = user Похоже, Kotlin постепенно уходит от магии component1, component2 к более читаемой и безопасной деструктуризации. Для Android-разработки это особенно приятно: меньше шансов тихо перепутать title, subtitle, id, state или другие поля в UI-моделях. https://proandroiddev.com/beyond-positions-kotlins-new-name-based-destructuring-eee347d1bb5c Экспериментальная фича, но направление очень здравое. ✍️ @kotlin_lib
498
4
🛑 Как задушить свое приложение, используя Dispatchers.IO Мы привыкли думать, что Dispatchers.IO - это бездонная бочка. Закинул туда сетевой запрос или чтение файла, и корутины сами всё разрулят. Но у Dispatchers.IO есть жесткий лимит - 64 потока (или количество ядер процессора, если их больше). Сценарий катастрофы: Вам нужно скачать 100 картинок или сделать батч-запросы к очень мееееедленному стороннему API. Вы запускаете 100 корутин на IO. Первые 64 запроса занимают все доступные потоки пула и зависают в ожидании ответа от сервера (I/O block). В этот момент пользователь нажимает кнопку "Сохранить профиль". Метод сохранения идет в локальную БД (Room/Realm), которая тоже использует Dispatchers.IO. Результат: Запрос в БД не выполняется. Он встает в очередь и ждет, пока хотя бы одна из 64 картинок скачается и освободит системный поток. Пользователь видит бесконечный лоадер. Приложение кажется "зависшим", хотя ANR нет. 🛠 Как это лечат Джуны? Создают свой пул: Executors.newFixedThreadPool(100).asCoroutineDispatcher(). Почему это плохо: Вы плодите тяжеловесные системные потоки в обход общего механизма корутин. Это жрет память и ломает шаринг ресурсов. 👑 Как это лечат Сеньоры? Используют limitedParallelism. У этого метода есть две суперсилы. Суперсила 1: Расширение лимита // Да, этот вызов легально расширяет лимит для конкретной задачи! val ImageDownloadDispatcher = Dispatchers.IO.limitedParallelism(100) Документация гласит: вызов limitedParallelism на Dispatchers.IO создает независимый пул, который может превышать глобальный лимит в 64 потока, при этом используя общий elastic thread pool под капотом. Картинки будут качаться в 100 потоков, не блокируя остальные задачи на дефолтном IO. Суперсила 2: Изоляция узких бутылочных горлышек (Bottlenecks) Допустим, у вашей базы данных (SQLite/Room) пул коннектов равен 4. Если вы отправите 20 корутин писать в БД на Dispatchers.IO, 4 будут писать, а 16 - тупо заблокируют потоки IO, ожидая свободного коннекта к БД. Делаем так: val DbDispatcher = Dispatchers.IO.limitedParallelism(4) Теперь, если вы запустите 20 корутин на DbDispatcher, только 4 потока будут заняты. Остальные 16 корутин будут приостановлены (suspended), не блокируя системные потоки. Ваш основной IO диспетчер останется свободным для сети и файлов. Чек-лист: Выделяйте кастомные диспетчеры через limitedParallelism для: 1. Массовых долгих сетевых операций. 2. Работы с БД (по размеру connection pool). 3. Работы с Legacy SDK, которые не поддерживают асинхронность. Кто из вас уже сталкивался с Thread Starvation в корутинах? Искали долго? 👇 ✍️ @kotlin_lib
641
5
🚀 Подборка полезных IT каналов в Max Системное администрирование, DevOps 📌 https://max.ru/i_odmin Все для системного администратора https://max.ru/bash_srv Bash Советы https://max.ru/sysadminof Книги для админов, полезные материалы https://max.ru/i_odmin_book Библиотека Системного Администратора https://max.ru/i_devops DevOps: Пишем о Docker, Kubernetes и др. 1C разработка 📌 https://max.ru/odin1c_rus Cтатьи, курсы, советы, шаблоны кода 1С Программирование C++📌 https://max.ru/cpp_lib Библиотека C/C++ разработчика Программирование Go📌 https://max.ru/golang_lib Библиотека Go (Golang) разработчика Программирование React📌 https://max.ru/react_lib React Программирование Python 📌 https://max.ru/python_of Python академия. https://max.ru/BookPython Библиотека Python разработчика Java разработка 📌 https://max.ru/bookjava Библиотека Java разработчика GitHub Сообщество 📌 https://max.ru/githublib Интересное из GitHub Базы данных (Data Base) 📌 https://max.ru/database_info Все про базы данных Фронтенд разработка 📌 https://max.ru/frontend_1 Подборки для frontend разработчиков Библиотеки 📌 https://max.ru/programmist_of Книги по программированию https://max.ru/proglb Библиотека программиста https://max.ru/bfbook Книги для программистов Программирование 📌 https://max.ru/bookflow Лекции, видеоуроки, доклады с IT конференций https://max.ru/itmozg Программисты, дизайнеры, новости из мира IT https://max.ru/php_lib Библиотека PHP программиста 👨🏼‍💻👩‍💻 Шутки программистов 📌 https://max.ru/itumor Шутки программистов Защита, взлом, безопасность 📌 https://max.ru/thehaking Канал о кибербезопасности https://max.ru/xakkep_1 Хакер Free Книги, статьи для дизайнеров 📌 https://max.ru/odesigners Статьи, книги для дизайнеров Математика 📌 https://max.ru/Pomatematike Канал по математике https://max.ru/phismat_1 Обучающие видео, книги по Физике и Математике Вакансии 📌 https://max.ru/progjob Вакансии в IT Мир технологий 📌 https://max.ru/mir_teh Канал для любознательных Бонус 📌 https://max.ru/piterspb_78 Свежие новости Санкт-Петербурга https://max.ru/mockva_life Свежие новости Москвы
0
6
🧨 SharedFlow для Side Effects - это ошибка. Разбираем официально лучший подход В MVI/MVVM есть вечная проблема: разовые события (Side Effects). Показать Snackbar, перейти на другой экран, проиграть звук. Это не стейт, это событие, которое должно произойти ровно один раз. Долгое время комьюнити пыталось решить это через SharedFlow. Выглядело это так: private val _effects = MutableSharedFlow<Effect>() val effects = _effects.asSharedFlow() Почему это выстрел в ногу? По дефолту SharedFlow не имеет буфера (replay = 0). Если ViewModel пушит событие (_effects.emit(...)), когда UI находится в фоне (пользователь свернул приложение или открыл другой экран), у потока в этот момент нет активных подписчиков. Результат? Событие просто дропается. Улетает в пустоту. Юзер разворачивает апп - а перехода или сообщения об ошибке нет. Как это обычно пытаются костылить? Начинают играться с буфером: replay = 1. Событие перестает теряться, но появляется новая проблема: оно кэшируется! Пользователь видит ошибку, поворачивает экран, UI переподписывается на SharedFlow, считывает кэш, и старый Snackbar показывается второй раз. ✅ Как правильно? (Рекомендация Google) Использовать Channel. Каналы созданы именно для паттерна Producer-Consumer и имеют встроенный буфер из коробки. class ProfileViewModel : ViewModel() { // 1. Создаем канал private val _effects = Channel<Effect>() // 2. Отдаем наружу как холодный Flow val effects = _effects.receiveAsFlow() fun saveProfile() { viewModelScope.launch { repository.save() // 3. Отправляем событие. Если UI в фоне — оно ложится в буфер. _effects.send(Effect.ShowSnackbar("Сохранено")) } } } Почему Channel - это идеальное решение: 1. Guarantee Delivery: Если UI ушел в фон (подписчиков нет), Channel просто ставит событие в буфер ожидания. 2. Exactly-Once: Как только UI возвращается (например, Fragment снова в onStart) и делает collect, он забирает событие из очереди. Событие доставляется ровно один раз и удаляется из канала. 3. Никаких дублей: При повороте экрана новый collect просто начнет слушать пустой канал. Старое событие уже было "съедено". Единственный нюанс: на стороне UI нужно собирать такие события правильно, учитывая жизненный цикл (например, через Lifecycle.repeatOnLifecycle или кастомные Compose-эффекты). ✍️ @kotlin_lib
0
7
🚀 Подборка полезных IT каналов в Max Системное администрирование, DevOps 📌 https://max.ru/i_odmin Все для системного администратора https://max.ru/bash_srv Bash Советы https://max.ru/sysadminof Книги для админов, полезные материалы https://max.ru/i_odmin_book Библиотека Системного Администратора https://max.ru/i_devops DevOps: Пишем о Docker, Kubernetes и др. 1C разработка 📌 https://max.ru/odin1c_rus Cтатьи, курсы, советы, шаблоны кода 1С Программирование C++📌 https://max.ru/cpp_lib Библиотека C/C++ разработчика Программирование Python 📌 https://max.ru/python_of Python академия. https://max.ru/BookPython Библиотека Python разработчика Java разработка 📌 https://max.ru/bookjava Библиотека Java разработчика GitHub Сообщество 📌 https://max.ru/githublib Интересное из GitHub Базы данных (Data Base) 📌 https://max.ru/database_info Все про базы данных Фронтенд разработка 📌 https://max.ru/frontend_1 Подборки для frontend разработчиков Библиотеки 📌 https://max.ru/programmist_of Книги по программированию https://max.ru/proglb Библиотека программиста https://max.ru/bfbook Книги для программистов Программирование 📌 https://max.ru/bookflow Лекции, видеоуроки, доклады с IT конференций https://max.ru/itmozg Программисты, дизайнеры, новости из мира IT https://max.ru/php_lib Библиотека PHP программиста 👨🏼‍💻👩‍💻 Шутки программистов 📌 https://max.ru/itumor Шутки программистов Защита, взлом, безопасность 📌 https://max.ru/thehaking Канал о кибербезопасности https://max.ru/xakkep_1 Хакер Free Книги, статьи для дизайнеров 📌 https://max.ru/odesigners Статьи, книги для дизайнеров Математика 📌 https://max.ru/Pomatematike Канал по математике https://max.ru/phismat_1 Обучающие видео, книги по Физике и Математике Вакансии 📌 https://max.ru/progjob Вакансии в IT Мир технологий 📌 https://max.ru/mir_teh Канал для любознательных Бонус 📌 https://max.ru/piterspb_78 Свежие новости Санкт-Петербурга https://max.ru/mockva_life Свежие новости Москвы
0
8
Освой Kotlin и Android за 60 часов Этот обширный курс по Kotlin и Android проведёт вас от основ до продвинутых концепций с пр
Освой Kotlin и Android за 60 часов Этот обширный курс по Kotlin и Android проведёт вас от основ до продвинутых концепций с практическими заданиями. В ходе курса для начинающих научит вас создавать несколько реальных приложений, включая впечатляющий клон Uber, демонстрирующий профессиональные приёмы разработки. Курс охватывает Firestore, SQLite, MVVM, Retrofit, Navigation Component, Jetpack Compose и многое другое. https://www.youtube.com/watch?v=blKkRoZPxLc ✍️ @kotlin_lib
0
9
🚀 Подборка полезных IT каналов в Max Системное администрирование, DevOps 📌 https://max.ru/i_odmin Все для системного администратора https://max.ru/bash_srv Bash Советы https://max.ru/sysadminof Книги для админов, полезные материалы https://max.ru/i_odmin_book Библиотека Системного Администратора https://max.ru/i_devops DevOps: Пишем о Docker, Kubernetes и др. 1C разработка 📌 https://max.ru/odin1c_rus Cтатьи, курсы, советы, шаблоны кода 1С Программирование C++📌 https://max.ru/cpp_lib Библиотека C/C++ разработчика Программирование Python 📌 https://max.ru/python_of Python академия. https://max.ru/BookPython Библиотека Python разработчика Java разработка 📌 https://max.ru/bookjava Библиотека Java разработчика GitHub Сообщество 📌 https://max.ru/githublib Интересное из GitHub Базы данных (Data Base) 📌 https://max.ru/database_info Все про базы данных Фронтенд разработка 📌 https://max.ru/frontend_1 Подборки для frontend разработчиков Библиотеки 📌 https://max.ru/programmist_of Книги по программированию https://max.ru/proglb Библиотека программиста https://max.ru/bfbook Книги для программистов Программирование 📌 https://max.ru/bookflow Лекции, видеоуроки, доклады с IT конференций https://max.ru/itmozg Программисты, дизайнеры, новости из мира IT https://max.ru/php_lib Библиотека PHP программиста 👨🏼‍💻👩‍💻 Шутки программистов 📌 https://max.ru/itumor Шутки программистов Защита, взлом, безопасность 📌 https://max.ru/thehaking Канал о кибербезопасности https://max.ru/xakkep_1 Хакер Free Книги, статьи для дизайнеров 📌 https://max.ru/odesigners Статьи, книги для дизайнеров Математика 📌 https://max.ru/Pomatematike Канал по математике https://max.ru/phismat_1 Обучающие видео, книги по Физике и Математике Вакансии 📌 https://max.ru/progjob Вакансии в IT Мир технологий 📌 https://max.ru/mir_teh Канал для любознательных Бонус 📌 https://max.ru/piterspb_78 Свежие новости Санкт-Петербурга https://max.ru/mockva_life Свежие новости Москвы
0