Android Mobile | YeaHub
431 subscribers
332 photos
21 videos
597 links
Теория, подготовка к интервью и курсы для Android разработчиков

YeaHub — это платформа для IT-специалистов, объединяющая обучение, карьерный рост, развитие и сообщество единомышленников.

Платформа: https://yeahub.ru

Для связи: @ruslan_kuyanets
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
#полезное
😅 Telephoto

Это инструмент для Android-разработчиков, позволяющий упростить работу с мультимедиа, предоставляя компоненты, такие как масштабируемые изображения с поддержкой жестов панорамирования и масштабирования!

🟠 Основные функции включают ZoomableImage — замену стандартного Image() с поддержкой работы с большими изображениями благодаря автоматической субдискретизации, и модификатор Modifier.zoomable(), который можно использовать для создания жестов с другими элементами интерфейса.
Гитхаб

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#статьи
🏕 Процесс локализации для Android-приложения

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

С введением языковых предпочтений для каждого приложения в Android 13 управление языками, специфичными для приложений, стало намного проще.
Читать статью

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
🥺 miuix

Библиотека компонентов пользовательского интерфейса для Kotlin Multiplatform, разработанная для создания кроссплатформенных приложений.

🚩 Библиотека использует Compose Multiplatform для обеспечения единой кодовой базы, поддерживая Android, iOS, macOS, Web и JVM. Она включает компоненты, такие как кнопки, списки и другие UI-элементы, что упрощает создание адаптивных интерфейсов, не требуя дублирования кода для каждой платформы.
Гитхаб

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес
🤔 Как обрабатывать исключения в Kotlin корутинах?

В Kotlin корутинах исключения обрабатываются с помощью блоков try-catch внутри самой корутины или в коде, который её вызывает. Если исключение не поймано в корутине, оно будет передано в вызывающий код.

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
😊 akkurate

Библиотека для валидации данных в приложениях на Kotlin!

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

🟠 Проверка данных на соответствие определённым ограничениям.

🟠 Поддержка пользовательских ограничений и аннотаций для удобной валидации.

🟠 Трансформация данных перед их проверкой.
Гитхаб

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
🤓 Представим, что вы хотите реализовать список сессий конференции и разделить их по дате. Кажется, что реализация такой UI-модели будет довольно удачной идеей:


data class SessionsUiModel(
val sessionGroups: Map<String, List<Session>>
)


В Android это будет работать отлично, так как функция mapOf создает LinkedHashMap, который сохраняет порядок вставки элементов. И на самом деле все будет точно так же работать, если в iOS используется Compose Multiplatform. Однако если UI будет нативным на каждой платформе, то вы столкнетесь с проблемой.

При интеропе Kotlin-кода в Objective-C ваш Map превратится в NSDictionary (или Dictionary в Swift), который не гарантирует порядок вставки элементов.

Таким образом, не стоит полагаться на порядок элементов в Map, так как этот интерфейс не может гарантировать его. Предпочитайте использовать списки в UI-моделях, чтобы обеспечить одинаковое поведение на всех платформах:


data class SessionsUiModel(
val sessions: List<SessionItem>
)

sealed interface SessionItem {
data class Header(val header: String) : SessionItem
data class Item(val session: Session) : SessionItem
}


Если тема отличий в поведении между платформами в KMP интересна, то ставьте реакции и сделаю еще посты по теме.

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
👍 AssertK

Это библиотека для выполнения утверждений (assertions) в тестах на Kotlin!

✔️ Библиотека вдохновлена AssertJ, но разработана специально для Kotlin, что позволяет использовать преимущества языка, включая методы расширения (extension methods). Это упрощает создание пользовательских утверждений и делает код тестов более лаконичным и читаемым.

✔️ AssertK поддерживает многоплатформенную разработку, работая с JVM, JS и Native. Основной подход заключается в использовании функции assertThat() для обёртки значения и вызова методов утверждений. Например, можно проверять равенство, неравенство, длину строки, свойства объектов и многое другое.
Гитхаб

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес
🤔 Что такое Flow в Kotlin корутинах?

Flow в Kotlin - это асинхронный поток данных, который может эмитировать несколько значений с течением времени. Он используется для обработки последовательностей данных, получаемых асинхронно, и предоставляет операторов для трансформации и комбинирования данных.

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
#статьи
😊 Lynx — новый кроссплатформенный фреймворк

Теперь разработчики могут создавать нативные пользовательские интерфейсы для мобильных и веб-приложений на единой кодовой базе.

Lynx предлагает яркие интерфейсы и быструю интерактивность, идеально подходящие для масштабных приложений, таких как TikTok. Основанный на Rust, он поддерживает двухпоточное программирование и обеспечивает мощный движок рендеринга.
Читать подробнее

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
#полезное
🥺 Tiamat

Это библиотека для разработки кроссплатформенной навигации на Jetpack Compose!

✅ Она предназначена для упрощения управления навигацией в мультиплатформенных приложениях, обеспечивая простую и понятную API для реализации переходов между экранами.

✔️ Для разработчиков, использующих Jetpack Compose, Tiamat позволяет сократить объем кода, связанного с навигацией, и предоставляет механизмы для реализации навигационных сценариев как в Android, так и в других платформах, поддерживаемых Compose Multiplatform.
Гитхаб

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
Макеты в Фигме vs реализация в коде

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
😁3
#Собес
🤔 Объясните концепцию ленивой инициализации в Kotlin.

Ленивая инициализация в Kotlin - это механизм, при котором свойство инициализируется только при первом обращении к нему. Это позволяет избежать лишних затрат ресурсов на инициализацию, если свойство не используется. Для этого используется делегат lazy , который откладывает выполнение инициализирующего кода до первого обращения к свойству. После этого свойство сохраняет свое значение до конца жизни объекта.

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
#новости
🛞 Вышел Kotlin 2.1.20 !
В этом выпуске представлены новые мощные возможности и улучшения:


🟠 Поддержка K2 для плагинов kapt и Lombok
🟠 Общие атомарные типы и улучшенные UUID в stdlib
🟠 Новый нативный API отслеживания времени
🟠 Новые оптимизации инлайнинга в Kotlin/Native
🟠 Улучшенная отладка для Kotlin/Wasm
🟠 Новый DSL для замены плагина Gradle Application
🟠 Улучшения в документации Kotlin
Смотреть тут

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
😊 Result

Это небольшая библиотека для Kotlin, предназначенная для моделирования операций, которые могут завершиться успехом или неудачей!

✔️ Она предоставляет тип Result<V: Any?, E: Throwable>, где V представляет значение в случае успеха, а E — ошибку в случае неудачи. Это упрощает обработку ошибок и повышает читаемость кода, особенно при выполнении последовательных операций, которые могут завершиться с ошибкой.
Гитхаб

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес
🤔 Что такое функция "let" в Kotlin?

Функция let позволяет выполнить блок кода с обьектом, предоставляя его как аргумент лямбда-выражения. Она особенно полезна для работы с объектами, которые могут быть равны null , и помогает безопасно обрабатывать такие случаи. Внутри лямбды объект доступен через it.

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
#ЛитКод
Задача: 648. Replace Words

В английском языке есть понятие "корень", за которым может следовать какое-то другое слово, чтобы образовать другое более длинное слово - назовем это слово производным. Например, если за корнем "help" следует слово "ful", мы можем образовать производное "helpful". Дайте словарь, состоящий из множества корней, и предложение, состоящее из слов, разделенных пробелами, замените все производные в предложении на образующий их корень. Если производное может быть заменено более чем одним корнем, замените его корнем, имеющим наименьшую длину. Верните предложение после замены.

Пример:
Input: dictionary = ["cat","bat","rat"], sentence = "the cattle was rattled by the battery"
Output: "the cat was rat by the bat"


👨‍💻 Алгоритм:

1⃣Преобразуйте словарь корней в набор для быстрого поиска.

2⃣Пройдите по каждому слову в предложении и найдите самый короткий корень, который является префиксом этого слова.

3⃣Замените слово найденным корнем и соберите обновленное предложение.

😎 Решение:
fun replaceWords(roots: List<String>, sentence: String): String {
val rootSet = roots.toSet()

fun replace(word: String): String {
for (i in 1..word.length) {
val prefix = word.substring(0, i)
if (rootSet.contains(prefix)) {
return prefix
}
}
return word
}

return sentence.split(" ").joinToString(" ") { replace(it) }
}


👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
🥺 Что такое tuple?

Tuple (кортеж) — это значение, которое можно использовать для объединения нескольких значений вместе, например, в виде пары.

Значения tuple не обязательно должны быть одного типа.

Вы можете создать tuple, разделив значения запятыми внутри круглых скобок.

Например:

var coordinates3D = (1.0, 2.0, 5.0)


Чтобы получить доступ к значению внутри tuple, используйте точечную нотацию и индекс:

let xPos = coordinates3D.0


Кортежи также могут быть созданы таким образом, чтобы каждое значение имело имя:

var coordinates3D = (x: 1.0, y: 2.0, z: 5.0)


В этом случае вы можете получить доступ к определённому значению кортежа по его имени:

let xPos = coordinates3D.x


👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
🌚1
#полезное
🤯UUID

Это библиотека для работы с универсальными уникальными идентификаторами (UUID) в Kotlin Multiplatform проектах!

✔️ Она предоставляет API для генерации и обработки UUID, полностью совместимого со спецификацией RFC4122. Библиотека поддерживает все основные платформы, включая JVM, iOS, macOS и Kotlin/Native, что делает её идеальным выбором для проектов с общей кодовой базой.
Гитхаб

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
#Собес
🤔 Что такое функция "also" в Kotlin?

Функция also выполняет дополнительные действия с объектом внутри лямбда- выражения, но возвращает сам обьект без изменений. Это полезно, когда нужно выполнить побочные эффекты, такие как логирование или проверку состояния, но оставить объект неизменным.

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
😊 Multiplatform Settings
Kotlin-библиотека для сохранения данных в формате "ключ-значение" в мультиплатформенных приложениях!

✔️ Это позволяет разработчикам писать общую логику для различных платформ, таких как Android, iOS, macOS, Windows, JavaScript, WebAssembly и другие, используя единую API.

✅ Библиотека поддерживает интеграцию с платформенными механизмами хранения, включая Android SharedPreferences, iOS Keychain, NSUserDefaults и другие. Также предусмотрены расширения для работы с корутинами, сериализацией и наблюдателями (обработка изменений данных).
Гитхаб

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM