#полезное
😊 akkurate
Библиотека для валидации данных в приложениях на Kotlin!
Основные возможности
🟠 Проверка данных на соответствие определённым ограничениям.
🟠 Поддержка пользовательских ограничений и аннотаций для удобной валидации.
🟠 Трансформация данных перед их проверкой.
Гитхаб
👉 Новости 👉 База вопросов
Библиотека для валидации данных в приложениях на Kotlin!
Основные возможности
Гитхаб
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
🤓 Представим, что вы хотите реализовать список сессий конференции и разделить их по дате. Кажется, что реализация такой UI-модели будет довольно удачной идеей:
В Android это будет работать отлично, так как функция mapOf создает LinkedHashMap, который сохраняет порядок вставки элементов. И на самом деле все будет точно так же работать, если в iOS используется Compose Multiplatform. Однако если UI будет нативным на каждой платформе, то вы столкнетесь с проблемой.
При интеропе Kotlin-кода в Objective-C ваш Map превратится в NSDictionary (или Dictionary в Swift), который не гарантирует порядок вставки элементов.
Таким образом, не стоит полагаться на порядок элементов в Map, так как этот интерфейс не может гарантировать его. Предпочитайте использовать списки в UI-моделях, чтобы обеспечить одинаковое поведение на всех платформах:
Если тема отличий в поведении между платформами в KMP интересна, то ставьте реакции и сделаю еще посты по теме.
👉 Новости 👉 База вопросов
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() для обёртки значения и вызова методов утверждений. Например, можно проверять равенство, неравенство, длину строки, свойства объектов и многое другое.
Гитхаб
👉 Новости 👉 База вопросов
Это библиотека для выполнения утверждений (assertions) в тестах на Kotlin!
Гитхаб
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес
🤔 Что такое Flow в Kotlin корутинах?
Flow в Kotlin - это асинхронный поток данных, который может эмитировать несколько значений с течением времени. Он используется для обработки последовательностей данных, получаемых асинхронно, и предоставляет операторов для трансформации и комбинирования данных.
👉 Новости 👉 Платформа
Flow в Kotlin - это асинхронный поток данных, который может эмитировать несколько значений с течением времени. Он используется для обработки последовательностей данных, получаемых асинхронно, и предоставляет операторов для трансформации и комбинирования данных.
Please open Telegram to view this post
VIEW IN TELEGRAM
#статьи
😊 Lynx — новый кроссплатформенный фреймворк
Теперь разработчики могут создавать нативные пользовательские интерфейсы для мобильных и веб-приложений на единой кодовой базе.
Lynx предлагает яркие интерфейсы и быструю интерактивность, идеально подходящие для масштабных приложений, таких как TikTok. Основанный на Rust, он поддерживает двухпоточное программирование и обеспечивает мощный движок рендеринга.
Читать подробнее
👉 Новости 👉 База вопросов
Теперь разработчики могут создавать нативные пользовательские интерфейсы для мобильных и веб-приложений на единой кодовой базе.
Lynx предлагает яркие интерфейсы и быструю интерактивность, идеально подходящие для масштабных приложений, таких как TikTok. Основанный на Rust, он поддерживает двухпоточное программирование и обеспечивает мощный движок рендеринга.
Читать подробнее
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
#полезное
🥺 Tiamat
Это библиотека для разработки кроссплатформенной навигации на Jetpack Compose!
✅ Она предназначена для упрощения управления навигацией в мультиплатформенных приложениях, обеспечивая простую и понятную API для реализации переходов между экранами.
✔️ Для разработчиков, использующих Jetpack Compose, Tiamat позволяет сократить объем кода, связанного с навигацией, и предоставляет механизмы для реализации навигационных сценариев как в Android, так и в других платформах, поддерживаемых Compose Multiplatform.
Гитхаб
👉 Новости 👉 База вопросов
Это библиотека для разработки кроссплатформенной навигации на Jetpack Compose!
Гитхаб
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес
🤔 Объясните концепцию ленивой инициализации в Kotlin.
Ленивая инициализация в 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 — ошибку в случае неудачи. Это упрощает обработку ошибок и повышает читаемость кода, особенно при выполнении последовательных операций, которые могут завершиться с ошибкой.
Гитхаб
👉 Новости 👉 База вопросов
Это небольшая библиотека для Kotlin, предназначенная для моделирования операций, которые могут завершиться успехом или неудачей!
Гитхаб
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". Дайте словарь, состоящий из множества корней, и предложение, состоящее из слов, разделенных пробелами, замените все производные в предложении на образующий их корень. Если производное может быть заменено более чем одним корнем, замените его корнем, имеющим наименьшую длину. Верните предложение после замены.
Пример:
👨💻 Алгоритм:
1⃣ Преобразуйте словарь корней в набор для быстрого поиска.
2⃣ Пройдите по каждому слову в предложении и найдите самый короткий корень, который является префиксом этого слова.
3⃣ Замените слово найденным корнем и соберите обновленное предложение.
😎 Решение:
👉 Новости 👉 База вопросов
Задача: 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"
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 не обязательно должны быть одного типа.Вы можете создать
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, что делает её идеальным выбором для проектов с общей кодовой базой.
Гитхаб
👉 Новости 👉 База вопросов
Это библиотека для работы с универсальными уникальными идентификаторами (UUID) в Kotlin Multiplatform проектах!
Гитхаб
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 и другие. Также предусмотрены расширения для работы с корутинами, сериализацией и наблюдателями (обработка изменений данных).
Гитхаб
👉 Новости 👉 База вопросов
Kotlin-библиотека для сохранения данных в формате "ключ-значение" в мультиплатформенных приложениях!
Гитхаб
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
👍 ColorPicker Compose
Библиотека Kotlin Multiplatform для выбора цвета из изображений!
🚩 Пользователи могут нажатием на нужную область изображения получать цветовые значения. Также поддерживаются слайдеры для управления яркостью и прозрачностью (ARGB).
Эта библиотека совместима с Compose для Android, iOS, WebAssembly, macOS и других платформ. Она подходит для приложений, где требуется гибкое управление цветами, таких как графические редакторы, редакторы тем или приложения дизайна.
Гитхаб
👉 Новости 👉 База вопросов
Библиотека Kotlin Multiplatform для выбора цвета из изображений!
Эта библиотека совместима с Compose для Android, iOS, WebAssembly, macOS и других платформ. Она подходит для приложений, где требуется гибкое управление цветами, таких как графические редакторы, редакторы тем или приложения дизайна.
Гитхаб
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
😐 ServerSocket для IPC в Android
Идея для статьи возникла из желания разобраться, как организовать общение между браузером и Android‑приложением для передачи данных. В поисках удобного решения автор обратил внимание на
Прежде чем перейти к практической реализации, автор разбирает основные сценарии использования
👉 Новости 👉 База вопросов
Идея для статьи возникла из желания разобраться, как организовать общение между браузером и Android‑приложением для передачи данных. В поисках удобного решения автор обратил внимание на
ServerSocket — простой и гибкий способ локального взаимодействия без лишних сложностей.Прежде чем перейти к практической реализации, автор разбирает основные сценарии использования
ServerSocket и межпроцессного взаимодействия в рамках одного процесса и приводит примеры рабочего кода.Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
#Собес
🤔 Объясни концепцию функционального программирования в контексте Kotlin
Функциональное программирование в Kotlin - это подход к написанию кода, который основывается на использовании чистых функций, неизменяемых данных и композиции функций. Kotlin поддерживает функциональное программирование через такие возможности, как лямбда-выражения, функции высшего порядка и коллекционные операции (
👉 Новости 👉 База вопросов
Функциональное программирование в Kotlin - это подход к написанию кода, который основывается на использовании чистых функций, неизменяемых данных и композиции функций. Kotlin поддерживает функциональное программирование через такие возможности, как лямбда-выражения, функции высшего порядка и коллекционные операции (
filter, map, reduce ). Этот подход делает код более читаемым, предсказуемым и легким для тестирования.Please open Telegram to view this post
VIEW IN TELEGRAM
YeaHub
YeaHub — тренажер собеседований по IT
5000+ вопросов для подготовки к интервью. Фильтры, квизы, статистика!
#статьи
👨💻 Выжимаем максимум из код-ревью
Большинство разработчиков не любит проводить код-ревью. Все понимают, что это важно и нужно, могут с ходу назвать три-четыре причины необходимости этого процесса. Но раз за разом они всячески избегают его. Или участвуют в нём неэффективно.
Поэтому разрушим шаблоны — не будем акцентировать внимание на важности и полезности код-ревью, а разберёмся в причинах сложившейся неприязни к этому процессу. И попробуем понять, как с этим жить.
Читать статью
👉 Новости 👉 База вопросов
Большинство разработчиков не любит проводить код-ревью. Все понимают, что это важно и нужно, могут с ходу назвать три-четыре причины необходимости этого процесса. Но раз за разом они всячески избегают его. Или участвуют в нём неэффективно.
Поэтому разрушим шаблоны — не будем акцентировать внимание на важности и полезности код-ревью, а разберёмся в причинах сложившейся неприязни к этому процессу. И попробуем понять, как с этим жить.
Читать статью
Please open Telegram to view this post
VIEW IN TELEGRAM