Kotlin
2.17K subscribers
273 photos
123 videos
18 files
396 links
Подборки полезного материала по Kotlin. По всем вопросам @evgenycarter
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
Texty — это библиотека Compose Multiplatform, разработанная Арджуном Джадежей, предназначенная для отображения текста с различными стилями, эффектами и анимациями. Она построена на основе Jetpack Compose Foundation's Basic Text и предоставляет высококонфигурируемый API для создания динамичных и визуально привлекательных текстовых элементов в приложениях для Android, iOS, настольных и веб-платформ.

Основные возможности Texty:

- Разнообразие стилей: Поддержка таких стилей, как скольжение, прокрутка, мигание, затухание, постепенное раскрытие, печать по буквам и базовый стиль.
- Стили для списков: Анимация текста или кадров последовательно, создание плавного потока, а также стили, такие как Motion, OneByOne, Sliding List и Scrolling List.
- Утилиты: Функции загрузки и отображения времени с возможностью настройки формата и интервала обновления.

Установка:

Для использования Texty в вашем проекте добавьте следующую зависимость в файл build.gradle.kts вашего модуля:


dependencies {
implementation("com.arjunjadeja:texty-android:1.0.0-alpha")
}


Убедитесь, что mavenCentral() включен в список репозиториев.

Пример использования:


import com.arjunjadeja.texty.Texty
import com.arjunjadeja.texty.DisplayStyle

@Composable
fun TextyExample() {
Texty(
text = "Привет, Texty!",
displayStyle = DisplayStyle.Typing()
)
}


https://github.com/ArjunJadeja/Texty

✍️ @kotlin_lib
👍4
Media is too big
VIEW IN TELEGRAM
UUID в Kotlin Multiplatform

0:00 Intro
0:24 What's UUID
0:53 Creating UUIDs
1:52 Parsing
2:21 Working with individual bits
3:30 Long to UUID
3:55 Java interop
4:10 Conclusion

источник

✍️ @kotlin_lib
👍5
🔥 Хотите писать функциональный и выразительный код? Kotlin и DSL — вот ваш путь!

На открытом вебинаре мы научим вас создавать доменно-специфические языки на Kotlin. Разберём, как сделать код компактным, выразительным и удобным для решения узкопрофильных задач.

Это не просто теория. Мы покажем реальные примеры и расскажем, как применять DSL для автоматизации, работы с конфигурациями и других задач.

Спикер Сергей Прощаев — ведущий инженер-Java-разработчик в компании ПАО «Сургутнефтегаз».

➡️ Регистрируйтесь на вебинар 11 февраля в 19:00 мск и получите скидку на большое обучение «Kotlin Backend Developer. Professional»: https://vk.cc/cIflRd

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
📕 KMP for Mobile Native Developers: The Book
by Santiago Mattiauda.

https://santimattius.github.io/kmp-for-mobile-native-developers-book/

✍️ @kotlin_lib
👍9
1Sec Temporary Mail App (Создано с Compose Multiplatform)

1Sec Temporary Mail — это кроссплатформенное приложение на Kotlin, которое предоставляет пользователям временные адреса электронной почты, действительные всего одну секунду. С его помощью можно быстро генерировать одноразовые email-адреса и использовать их для различных целей, таких как регистрация на сайтах, получение проверочных писем или защита основного почтового ящика от спама.

https://github.com/KapilYadav-dev/1SecMail

✍️ @kotlin_lib
👍3
🔥 Открытый урок «Разработка монолитного приложения со Spring»

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

На вебинаре рассмотрим:
✔️ монолитную архитектуру (преимущества и недостатки);
✔️ фреймворк Spring;
✔️ особенности разработки со Spring в Kotlin;
✔️ интеграцию транспортных моделей в приложение;
✔️ упаковку и запуск в Docker.

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

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

Обработка исключений в Kotlin Coroutines — это важная тема, особенно когда дело касается асинхронного программирования в Android. В статье рассматриваются следующие ключевые аспекты:

- Общая стратегия обработки исключений
Различие между try-catch, CoroutineExceptionHandler и supervisorScope.
- Глобальная обработка исключений
Использование CoroutineExceptionHandler и его ограничение — он работает только с незахваченными исключениями.
- Обработка исключений в структурированных корутинах
Применение supervisorScope для предотвращения отмены всей иерархии корутин.
- Отлов исключений в async
Важно помнить, что async возвращает Deferred, а исключения в нем не всплывают автоматически. Их нужно ловить через await().
- Ошибка распространения исключений в launch
Запущенные через launch корутины выбрасывают исключения вверх по иерархии, что может привести к неожиданному завершению приложения.

https://proandroiddev.com/advanced-exception-handling-in-kotlin-coroutines-a-guide-for-android-developers-e1aede099252

✍️ @kotlin_lib
👍3
👩‍💻 А ты справишься с тестом по Kotlin?

🏆 Пройди тест из 10 вопросов, проверь свой уровень знаний и получи скидку на онлайн-курс «Kotlin Backend Developer. Professional» от OTUS!

Если успешно пройдешь тест, сможешь забронировать место в группе по выгодной цене! И еще дарим промокод Kotlin5

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

➡️ Пройти тест и забрать скидку: https://vk.cc/cIK1jj

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Принцип единственной ответственности (SRP) в Kotlin: глубокий разбор

Принцип единственной ответственности (Single Responsibility Principle, SRP) из SOLID гласит, что класс должен иметь только одну причину для изменения. В статье рассматриваются следующие важные аспекты:

- Почему SRP важен?
Код становится более читаемым, тестируемым и удобным для сопровождения.

- Признаки нарушения SRP
- Класс выполняет несколько несвязанных задач.
- Частые изменения одной части кода затрагивают другие части.
- Усложняется тестирование, так как приходится проверять несколько функциональностей сразу.

- Как применять SRP в Kotlin?
- Разделение ответственности: деление класса на несколько более мелких, каждый из которых отвечает только за свою функцию.
- Использование делегирования: передача отдельных задач вспомогательным классам.
- Функциональный подход: использование функций высшего порядка и композиции вместо огромных классов.

- Пример рефакторинга
В статье показан код, который нарушает SRP, и варианты его исправления с помощью грамотного разделения логики.

Применение SRP в Kotlin позволяет писать более чистый, поддерживаемый и расширяемый код, который легче тестировать и модифицировать.

https://itnext.io/the-single-responsibility-principle-srp-in-kotlin-deep-dive-34f478064848

✍️ @kotlin_lib
👍2
Пошаговое руководство по выполнению анализа данных с помощью Kotlin DataFrame

Это первая из серии обучающих статей о том, как легко манипулировать и визуализировать данные с помощью библиотек Kotlin DataFrame и Kandy. Эти уроки предназначены для обычных разработчиков на Kotlin, поэтому предыдущий опыт в области анализа данных или работы с аналогичными фреймворками (например, pandas или Apache Spark) не требуется. Однако, вы должны быть знакомы с языком Kotlin и ранее создавать проекты на Kotlin в IntelliJ IDEA.

https://blog.jetbrains.com/kotlin/2024/04/a-step-by-step-guide-to-performing-data-analysis-with-kotlin-dataframe/

✍️ @kotlin_lib
👍5
😴 Ваши Android-приложения «умирают» в фоне, а как пользоваться сервисами непонятно?

Разбираем фоновые процессы на открытом вебинаре!
– Узнаем, какие ограничения Google накладывает на работу приложений в фоновом режиме и как с этим бороться.
– Разберём все актуальные методы.

🚀 Освойте лучшие практики фоновой работы, чтобы создавать эффективные и отзывчивые Android-приложения. А ещё получите 🎁скидку на обучение «Android Developer. Professional»!

📅 Встречаемся 26 февраля в 20:00 мск!

👉 Регистрация открыта: https://vk.cc/cISnPc

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
👍21
Media is too big
VIEW IN TELEGRAM
Непростые вопросы про Kotlin Coroutines
Александр Гирев


Однажды пятничным вечером Александр и его коллега задумались над вопросом: где живут корутины, когда запустивший их coroutineScope героически погибает в жерновах GC? Субботнее утро было проведено за чтением статей и исходников.

Вот так и родилась идея доклада. В нем — ответы на вопросы об устройстве и работе корутин для самых любознательных.

Материал доклада рассчитан на участников, которые знакомы как минимум с теоретическими основами Kotlin Coroutines.

источник

✍️ @kotlin_lib
👍3
Koin Annotations 2.0: что нового?

Команда Koin выпустила Koin Annotations 2.0, значительно улучшив поддержку аннотаций для DI в Kotlin. Этот релиз нацелен на упрощение работы с Koin и упрощение интеграции аннотаций с компиляторным плагином KSP.

🔥 Основные изменения:
- Оптимизированный KSP-обработчик – компиляция теперь быстрее и стабильнее.
- Обновленный DSL – улучшенная поддержка модулей и более гибкие аннотации.
- Упрощенные Scopes & Qualifiers – декларативный стиль позволяет писать меньше кода.
- Новый механизм Inject – еще более удобный способ внедрения зависимостей.

Этот релиз делает DI с Koin еще проще, позволяя писать меньше кода и получать максимум производительности. Если используешь Koin – обязательно обновись!

https://blog.insert-koin.io/koin-annotations-2-0-release-is-out-445c27a569b9

✍️ @kotlin_lib
👍5
Ko-iso

Это репозиторий ko-iso, который предоставляет ISO-коды стран и регионов в виде Kotlin-библиотеки. Полезен для работы с международными стандартами, например, при обработке страновых кодов в приложениях. Поддерживает ISO 3166-1 (страны) и 3166-2 (регионы).

https://github.com/jillesvangurp/ko-iso

✍️ @kotlin_lib
👍8
moko-resources — это библиотека для управления ресурсами (строки, изображения, цвета и т.д.) в Kotlin Multiplatform проекте. Она позволяет использовать ресурсы из общего кода commonMain.

Основные возможности:
- Доступ к ресурсам из commonMain
- Поддержка string, string formatting, plurals, colors, images
- Генерация кода на основе .xml/.strings файлов
- Поддержка Android, iOS, desktop (JetBrains Compose)

Пример использования:


val str = MR.strings.some_string.desc()
textView.text = str.localized()


Поддержка платформ:
- Android
- iOS
- Desktop (Compose Multiplatform)


https://github.com/icerockdev/moko-resources

✍️ @kotlin_lib
👍5
Открытие браузера по умолчанию на разных платформах

Иногда приложение должно открыть веб-страницу в браузере по умолчанию. Хотя это кажется простой задачей, реализация может различаться в зависимости от платформы. Давайте посмотрим, как справиться с этим в разных средах.

Kotlin Multiplatform

В многоплатформенных проектах (например, с использованием Kotlin Multiplatform) приходится учитывать реализацию для каждой целевой платформы. Один из подходов — использовать ожидания/реализации (expect/actual), чтобы объявить функцию в общем коде и реализовать её отдельно для каждой платформы.

https://dev.to/tkuenneth/open-the-default-browser-across-platforms-3cbh

✍️ @kotlin_lib
👍2
🧵 Kotlin Coroutines без макияжа: что скрывается под капотом

Когда вы запускаете корутину с помощью launch или async, компилятор Kotlin создаёт специальный объект, реализующий интерфейс Continuation. Этот объект содержит состояние выполнения корутины и позволяет ей приостанавливаться и возобновляться. Внутри него хранятся все локальные переменные и текущая точка выполнения.

🔄 Жизненный цикл корутины:
1. Создание — с помощью launch или async.
2. Запуск — автоматически или через start().
3. Приостановка — при вызове suspend -функций, таких как delay() или await().
4. Возобновление — после завершения асинхронной операции.
5. Завершение — когда весь код выполнен или корутина отменена.

🧠 Что такое Continuation?

Continuation — это объект, представляющий состояние выполнения корутины. Он позволяет приостанавливать и возобновлять выполнение, сохраняя информацию о том, где именно корутина была приостановлена. Интерфейс Continuation выглядит следующим образом:


interface Continuation<in T> {
val context: CoroutineContext
fun resumeWith(result: Result<T>)
}


📌 Пример:


suspend fun mySuspendFunction() {
println("Start")
delay(1000)
println("End")
}

launch {
mySuspendFunction()
}


Компилятор преобразует этот код в класс, который можно представить следующим образом:


class GeneratedContinuation extends SuspendLambda {
int label;

@Override
Object invokeSuspend(Object result) {
switch (label) {
case 0:
println("Start");
label = 1;
if (delay(1000, this) == COROUTINE_SUSPENDED)
return COROUTINE_SUSPENDED;
case 1:
println("End");
return Unit.INSTANCE;
}
throw new IllegalStateException();
}
}


Здесь label указывает на текущую точку выполнения внутри корутины. При каждом вызове suspend -функции значение label изменяется, чтобы указать, с какого места нужно продолжить выполнение после приостановки.

https://habr.com/ru/articles/882988/

✍️ @kotlin_lib
👍5
Плавная миграция на Kotlin 2.1.0

Всем привет, меня зовут Эдуард, я Android Tech Lead в QIC digital hub[ссылка удалена мод.]. Сегодня я расскажу как совершить плавный переход на Kotlin 2.1.0, руководствуясь опытом своей команды.

https://habr.com/ru/articles/898048/

✍️ @kotlin_lib
👍1
💻Хотите научиться писать эффективные сетевые клиенты для iOS и разобраться в том, какие технологии лучше выбрать для SwiftUI?

📖На открытом вебинаре 22 апреля в 20:00 мск мы подробно разберем архитектуру приложений на SwiftUI и выбор сетевого клиента: что лучше — Alamofire, Moya или нативное решение? Мы также покажем, как интегрировать эти технологии с Combine и async-await.

📊Умение работать с сетевыми клиентами под SwiftUI — ключевой навык для iOS-разработчика.

👉Регистрируйтесь прямо сейчас и получите скидку на большое обучение «iOS Developer. Professional» по промокоду IOSPRO4: https://vk.cc/cKRMfx

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
👍1