@android_broadcast · Post #8794 · 13.03.2025 г., 11:04
Сравнение Dagger 2, Dagger Hilt и Koin (4м) Быстрый рассказ про популярные DI для Android. Полезно тем, кто выбирает свой первый DI или сомневается в выборе #android#di
TGINSIGHT SIMILAR POSTS
Изворен канал @pythonotes · Post #146 · 16 сеп.
Функция sub в regex может принимать функцию в качестве аргумента repl. 📄 Из документации: If repl is a function, it is called for every non-overlapping occurrence of pattern. The function takes a single match object argument, and returns the replacement string. То есть для каждого совпадения будет вызвана функция для вычисления замены вместо замены на одну и ту же строку для всех совпадений. Иными словами, для замены разных совпадений на разные строки не потребуется запускать re.sub() много раз для каждой строки замены. Достаточно определить функцию, которая вернёт строку для каждого из совпадений. Описание слишком запутанное🤔, давайте лучше рассмотрим на простом примере: Создаем карту замены. То есть какие строки на какие требуется менять. remap = { 'раз': '1', 'два': '2', 'три': '3', 'четыре': '4', 'пять': '5', } Пишем функцию поиска строки для замены. Единственным аргументом будет объект re.Match. Используя данные этого объекта мы вычисляем замену on-the-fly! def get_str(match: re.Match): word = match.group(1) return remap.get(word.lower()) or word Пример текста. text = '''Раз Два Три Четыре Пять Вместе будем мы считать Пять Четыре Три Два Раз Мы считать научим вас ''' Теперь запускаем re.sub и вместо строки замены (repl) подаём имя функции. (Данный паттерн ищет отдельные слова в тексте) >>> print(re.sub(r'(\w+)', get_str, text)) 1 2 3 4 5 Вместе будем мы считать 5 4 3 2 1 Мы считать научим вас Думаю, достаточно наглядно 🤓 #libs#regex
Пребарај: #di
@android_broadcast · Post #8794 · 13.03.2025 г., 11:04
Сравнение Dagger 2, Dagger Hilt и Koin (4м) Быстрый рассказ про популярные DI для Android. Полезно тем, кто выбирает свой первый DI или сомневается в выборе #android#di
@android_broadcast · Post #9349 · 21.07.2025 г., 12:06
🤯Команда Anvil решила прекратить развитие проекта в пользу другого решения Anvil - Kotlin плагина для расширения возможностей Dagger 2 и упрощения работы с ним решили прекратить развивать. Коллега автором решения сделал Metro и компания будет переходить на него и участвовать в его развитии. Metro - это compile-time DI фреймворк с поддержкой KMP, который вдохновлялся Dagger, Anvil, Kotlin-Inject. #di#kmp
@d_wusun · Post #5752 · 06.03.2026 г., 11:12
名称:王菲 - 1995年专辑 - Di-dar -Flac 描述:专辑依然受英伦新潮音乐影响深刻,主导专辑方向的幕后主创人员C.Y.KONG、ALEX SAN、张亚东都是钟情英式舞曲的创作新锐,尤其几位香港班底,都是长期与王菲合作的御用人员,之间的默契毋庸赘言。 1. Di-Dar 2. 假期 3. 迷路 4. 暧昧 5. 或者 6. 我想 7. 享受 8. 一半 9. 无题 10. 流星 链接:https://pan.quark.cn/s/62a31f054088 📁 大小:253MB 🏷 标签:#王菲#Di-dar #音乐#无损音乐#猪儿虫
@android_broadcast · Post #9343 · 18.07.2025 г., 18:24
🤯Вышел Dagger 2.57 и из полезных изменений там... НИЧЕГО. Просто работают под капотом. Может над поддержкой KSP, может еще над чем Вам нужен Dagger? #dagger#di
@android_broadcast · Post #9975 · 28.04.2026 г., 06:12
🏝Вышла первая стабильная версия Metro DI — чистого Kotlin-решения с валидацией графа на этапе компиляции. Решение вобрало в себя всё самое лучшее от Dagger, Anvil и kotlin-inject, чтобы стать тем стандартом для KMP-проектов, который искали после Dagger. Metro DI не использует KSP или KAPT. Вся генерация осуществляется с помощью плагина компилятора Kotlin. #Kotlin#KMP#DI
@android_broadcast · Post #8888 · 02.04.2025 г., 06:00
Разработчик из Ozon делится опытом, как организовали с помощью фич языка Kotlin хранилище Dagger-компонентов, доступное из любого модуля, управляющее их жизненным циклом и забравшее другую рутину на себя. #android#dagger#di
@android_broadcast · Post #8823 · 20.03.2025 г., 09:03
Вышел Dagger 2.56 В новой версии Dagger нет новых фичей, а вот то что может сломать код есть 👉 В рамках поддержки Jakarta: удалили старый способ создания Factory (возможно, отвалится код под старые версии Dagger) и больше нельзя использоваться dagger.internal.Provider 👉 В Kotlin исходниках при использовании для multibinding теперь НАДО использовать Set/MAP из kotlin.collections, а не версии из java.util 🛠 Исправили немного багов #di#java
@android_broadcast · Post #8912 · 07.04.2025 г., 06:04
Metro - Новый DI фреймворк на чистом Kotlin (ещё в разработке) @DependencyGraph interface AppGraph { val httpClient: HttpClient @Provides private fun provideFileSystem(): FileSystem = FileSystem.SYSTEM } @Inject class HttpClient(private val fileSystem: FileSystem) @Inject @Composable fun App(circuit: Circuit) #kotlin#di#ksp
@android_broadcast · Post #8910 · 06.04.2025 г., 17:51
Как найти неиспользуемые зависимости в Dagger Component (EN,11м) С помощью Dagger SPI автор написал анализатор графа Dagger c целью поиска неиспользуемых зависимостей и описал подход в статье. Также подход можно использовать для визуализации графа зависимостей, считать разные метрики графа и пр. 🐱Исходный код на GitHub 🔗Альтернативная ссылка #dagger#di#opensource
Hashtags
@android_broadcast · Post #8795 · 13.03.2025 г., 15:41
📺Обзор Kotlin Inject или как будет выглядеть Dagger на Kotlin Multiplatform Обзор библиотеки Kotlin Inject - DI для KMP, API которого аналогично Dagger. В видео происходит демонстрация возможностей, сравнение с другими DI и личное мнение о том стоит ли использовать эту библиотеку в проде. #видео#kmp#di
@android_broadcast · Post #8639 · 05.02.2025 г., 16:15
🤯Не нужно делать инжект всех зависимостей в конструктор Встретил код в проекте: class MyViewModel( ... private val sendDataUseCase: SendDataUseCase, ... ): ViewModel() { // Вызывается, когда пользователь в UI нажмёт на "Send" fun onSendClicked(...) { viewModelScope.launch { sendDataUseCase.invoke(...) // либо sendDataUseCase(...) } } } sendDataUseCase не нужен сразу при создании объекта, а нужен только если пользователь нажмёт на кнопку "Send" в UI, что может и не произойти. Так как эта зависимость нужна в конструкторе, то при получении в DI будет сразу происходить создание этой зависимости, что приводит к ненужной нагрузке. Я рекомендую делать отложенное получение зависимостей с помощью механизма Provider или Lazy. Первый будет ходить за зависимостью в граф каждый раз, а второй - при первом обращении и сохранит её. // При использовании Dagger или Hilt class MyViewModel( ... private val sendDataUseCase: javax.inject.Provider<SendDataUseCase>, // или dagger.Lazy ... ): ViewModel() { fun onSendClicked(...) { viewModelScope.launch { sendDataUseCase.get() .invoke(...) } } } Если вы используете Koin на момент написания поста (актуальная версия 4.0), делать отложенный инжект в конструктор возможности нет: // При использовании Koin class MyViewModel(): ViewModel() { // отложенное получение зависимости в Koin private val sendDataUseCase: SendDataUseCase by inject() fun onSendClicked(...) { viewModelScope.launch { // аналог Provider - получение зависимости каждый раз из графа val sendDataUseCase: SendDataUseCase = getKoin().get() sendDataUseCase.invoke(...) } } } Результат оптимизации ✅ более быстрый старт экранов (зависит от сложности графов) ✅ уменьшение расхода памяти ❌ KOIN потеря явной зависимости в конструкторе. Мне бы очень хотелось увидеть аналог Provider и Lazy в Koin через конструктор, но пока приходится делать свои обертки 😔 #dagger#di#лучшиепрактики
Hashtags
@yxhmd · Post #1638 · 06.05.2023 г., 05:59
中文名: 跳水男孩/DIVE!! 话数: 12 放送开始: 2017年7月6日 放送星期: 星期四 原作: 森絵都「DIVE!!」 (角川文庫刊) 导演: 鈴木薫 ☺️评分:4.8 不过不失 🟢故事简介 “那里,有着只有我才能看见的景色——” 自幼开始一心持续跳水的14岁少年·坂井知季。 最初的开端,是他与比自己大3岁的天才跳水员·富士谷要一的相遇。 知季与伙伴们一起进入水木跳水俱乐部·通称MDC,然而某天,名叫麻木夏阳子的女性以新任教练的身份出现了。 “如果这之中没有人能进入奥运会的话,俱乐部就要解散了” 夏阳子宣告的MDC存续的条件,是如此严酷的事情。 以身体为武器在空中起舞,在这一瞬间赌上全部,少年们热烈而漫长的战斗就此开幕!! 🌐OneDrive:点击下载 🗂百度网盘:点击下载 📁往期番剧汇总表格:打开 🔐解压:blackcatunderthemoon 引索:#T#TS#D#DI 标签:#轻改#运动