Kotlin
رفتن به کانال در Telegram
Подборки полезного материала по Kotlin. По всем вопросам @evgenycarter
نمایش بیشتر2 093
مشترکین
اطلاعاتی وجود ندارد24 ساعت
-47 روز
+330 روز
در حال بارگیری داده...
کانالهای مشابه
ابر برچسبها
اشارات ورودی و خروجی
---
---
---
---
---
---
جذب مشترکین
ژوئن '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 کانالها
| تاریخ | رشد مشترکین | اشارات | کانالها | |
| 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 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 с аннотациями
https://github.com/kingg22/ktorgen
✍️ @kotlin_lib | 276 |
| 3 | 🧩 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 | 494 |
| 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 | 638 |
| 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 Свежие новости Москвы | 241 |
| 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 | 468 |
| 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 Свежие новости Москвы | 250 |
| 8 | Освой Kotlin и Android за 60 часов
Этот обширный курс по Kotlin и Android проведёт вас от основ до продвинутых концепций с практическими заданиями. В ходе курса для начинающих научит вас создавать несколько реальных приложений, включая впечатляющий клон Uber, демонстрирующий профессиональные приёмы разработки.
Курс охватывает Firestore, SQLite, MVVM, Retrofit, Navigation Component, Jetpack Compose и многое другое.
https://www.youtube.com/watch?v=blKkRoZPxLc
✍️ @kotlin_lib | 490 |
| 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 Свежие новости Москвы | 406 |
اکنون در دسترس! پژوهش تلگرام ۲۰۲۵ — مهمترین بینشهای سال 
