Kotlin Developer
6.38K subscribers
182 photos
7 videos
256 links
Самый топовый канал по Kotlin

По вопросам сотрудничества и рекламы: @NadikaKir

Мы на бирже: https://telega.in/c/KotlinSenior
Download Telegram
👩‍💻 Inspektify — написанная на Kotlin библиотека для Android и iOS. Она позволяет вам наблюдать за сетью вашего приложения в режиме реального времени прямо на вашем мобильном устройстве

❗️ Эту библиотеку можно использовать только в проектах, использующих Ktor для сетевой коммуникации

🔐 Лицензия: MIT

🖥 Github

@KotlinSenior #kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
1
Что такое мульти-декларации (destructuring declarations)?

Мульти-декларации (destructuring declarations или деструктуризирующее присваивание) — это способ извлечения значений из объекта и присвоения их сразу нескольким переменным. В Kotlin этот механизм поддерживается с помощью оператора распаковки (destructuring operator) — componentN(), где N — номер компонента.

При создании data класса Kotlin автоматически создает функции componentN() для каждого свойства класса, где N — номер позиции переменной в конструкторе. Функции componentN() возвращают значения свойств в порядке их объявления в конструкторе. Это позволяет использовать мульти-декларации для распаковки значений свойств и присваивания их отдельным переменным.

Например, если у нас есть data класс Person с двумя свойствами name и age, мы можем использовать мульти-декларации, чтобы извлечь эти свойства и присвоить их двум переменным:

data class Person(val name: String, val age: Int)

val person = Person("Alice", 29)
val (name, age) = person

println(name) // Alice
println(age) // 29

Также можно использовать мульти-декларации в циклах, чтобы итерироваться по спискам объектов и распаковывать значения свойств:


val people = listOf(Person("Alice", 30), Person("Bob", 40))
for ((name, age) in people) {
println("$name is $age years old")
}

// Alice is 30 years old
// Bob is 40 years old


Мульти-декларации также могут быть использованы с массивами и другими коллекциями:

val list = listOf("apple", "banana", "orange")
val (first, second, third) = list

println(first) // apple
println(second) // banana
println(third) // orange
1
Во что компилируется typealias?

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

Например, typealias IntPredicate = (Int) -> Boolean при компиляции будет заменено на (Int) -> Boolean, то есть функцию, принимающую значение типа Int и возвращающую значение типа Boolean.

Можно ли использовать typealias для функциональных типов?

Да, можно использовать typealias для функциональных типов в Kotlin. Например, вы можете создать псевдоним для типа функции, которая принимает два параметра типа Int и возвращает значение типа String, следующим образом:

typealias IntToString = (Int, Int) -> String


Это позволит вам использовать созданный псевдоним вместо полного объявления типа, то есть вместо:

fun processValues(f: (Int, Int) -> String) {
// ...
}


можно использовать:

fun processValues(f: IntToString) {
// ...
}


Как и в случае с другими typealias, компилятор Kotlin просто заменяет псевдоним на соответствующий тип при компиляции кода.
1
Какие коллекции есть в Kotlin?

Коллекция
— это объект, содержащий в себе набор значений одного или различных типов, а также позволяющий к этим значениям обращаться и извлекать. Другими словами — это контейнер, в который вы можете помещать то, что вам нужно, а затем каким-либо образом с ним взаимодействовать. В Kotlin есть три типа коллекций:

List (список). Упорядоченная коллекция, в которой к элементам можно обращаться по их индексам. Идентичные элементы (дубликаты) могут встречаться в списке более одного раза. Примером списка является предложение: это группа слов, их порядок важен, и они могут повторяться.

Set (множество/набор). Неупорядоченная коллекция без повторяющихся значений. Примером множества является алфавит.

Map (словарь/ассоциативный список). Набор из пар "ключ-значение". Ключи уникальны и каждый из них соответствует ровно одному значению. В коллекции могут присутствовать повторяющиеся значения, но не повторяющиеся ключи. Пример — ID сотрудников и их должностей. Map не является наследником интерфейса Collection.

Два типа интерфейсов, на основе которых создаются коллекции:

1. Неизменяемый (read-only) — дают доступ только для чтения (Set, List, Map, Collection).

2. Изменяемый (mutable) — расширяет предыдущий интерфейс и дополнительно даёт доступ к операциям добавления, удаления и обновления элементов коллекции (
MutableSet, MutableList, MutableMap, MutableCollection).
1
Промежуточные (intermediate) и терминальные (terminal) операции в Sequences

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

Операции над Sequence можно разделить на две категории: промежуточные (intermediate) и терминальные (terminal).

Промежуточные операции (intermediate) — это операции, которые возвращают новую Sequence.

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

filter(predicate: (T) -> Boolean): фильтрует элементы по заданному условию и возвращает новую Sequence

map(transform: (T) -> R): преобразует каждый элемент в новый элемент типа R и возвращает новую Sequence

sortedBy(selector: (T) -> R?): сортирует элементы по заданному ключу и возвращает новую Sequence

Терминальные операции (terminal) — это операции, которые выполняются немедленно и возвращают результат (не Sequence).

Терминальные операции могут быть вызваны только после всех промежуточных операций, так как они завершают последовательность и начинают вычисление результатов на основе всей последовательности, полученной после выполнения всех промежуточных операций. Если же терминальная операция вызывается до выполнения всех промежуточных операций, то она не будет иметь доступа к полной последовательности и вернет неполный результат. Примеры:

toList(): преобразует Sequence в список

toSet(): преобразует Sequence в множество

count(): возвращает количество элементов в Sequence

forEach(action: (T) -> Unit): выполняет действие для каждого элемента Sequence

ВАЖНО: вычисления запускаются только при вызове терминальной функции (до этого момента никаких вычислений не производится).
1
👩‍💻 Strikt — это библиотека для Kotlin, предназначенная для использования с тестовыми фреймворками, такими как JUnit и Spek.

Она использует fluent API, что упрощает построение простых и безопасных тестов с помощью Kotlin-расширений.

🌟 Strikt поддерживает интеграции с библиотеками Arrow, Jackson, MockK и Spring, что делает её гибким инструментом для тестирования различных типов данных и компонентов

🖥 GitHub

@KotlinSenior #kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
1
👩‍💻 Шаблон приложения Kotlin Multiplatform

🌟 Базовый шаблон приложения Kotlin Multiplatform для Android и iOS. Он включает общую бизнес-логику и обработку данных, а также реализацию общего пользовательского интерфейса с использованием Compose Multiplatform

🔐 Лицензия: Apache-2.0

🖥 Github

@KotlinSenior #kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
1
👩‍💻 Koin — это лёгкий и прагматичный фреймворк для внедрения зависимостей (Dependency Injection) на языке Kotlin!

🌟 Он поддерживает как Kotlin Multiplatform, так и Android. Koin предоставляет удобный DSL для настройки зависимостей, минимизирует избыточность кода и интегрируется с различными экосистемами, включая Jetpack Compose и Ktor.

🔐 Лицензия: Apache-2.0

🖥 Github

@KotlinSenior #kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
1
👩‍💻 EitherNet — это библиотека для Kotlin, предназначенная для обработки API-ответов в приложениях!

🌟 Она предоставляет типизированный подход к обработке результатов сетевых запросов, используя sealed-классы для представления успешных и неудачных ответов. Это упрощает работу с ошибками, исключая необходимость использования исключений для обработки ошибок. Например, можно различать типы ошибок, такие как сетевые сбои, HTTP-ошибки или специфические API-ошибки, что делает код более безопасным и понятным.

🌟 Библиотека интегрируется с Retrofit, позволяя разработчикам легко подключить её к существующим API-запросам. Она поддерживает аннотации, такие как @.DecodeErrorBody, для автоматической обработки тела ошибок HTTP-ответов. Это делает работу с API более удобной и предсказуемой, улучшая качество обработки ошибок и делая код проще для чтения и поддержки.

🔐 Лицензия: Apache-2.0

🖥 Github

@KotlinSenior #kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
1
This media is not supported in your browser
VIEW IN TELEGRAM
👩‍💻 telephoto — это инструмент для Android-разработчиков, позволяющий упростить работу с мультимедиа, предоставляя компоненты, такие как масштабируемые изображения с поддержкой жестов панорамирования и масштабирования!

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

🔐 Лицензия: Apache-2.0

🖥 Github

@KotlinSenior #kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
1
👩‍💻 KorGE — это фреймворк для разработки кроссплатформенных 2D-игр на языке Kotlin!


🌟 Он поддерживает работу на платформах JVM, JavaScript, Android и iOS, а также предлагает удобный API для работы с графикой, звуком, анимацией и физикой. KorGE интегрируется с Gradle, что упрощает сборку и развертывание проектов.

🔐 Лицензия: Apache-2.0

🖥 Github

@KotlinSenior #kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
1
👩‍💻 cryptography-kotlin — это мультиплатформенная библиотека на языке Kotlin, предоставляющая унифицированный API для различных криптографических операций, таких как генерация случайных чисел, шифрование, вычисление хешей, цифровые подписи, вывод ключей и соглашения о ключах!

🌟 Библиотека поддерживает алгоритмы, включая AES, RSA, ECDSA, ECDH, SHA, HMAC и PBKDF2. Она не реализует криптографические алгоритмы самостоятельно, а оборачивает проверенные решения, такие как OpenSSL 3.x, WebCrypto и JCA, обеспечивая типобезопасный API с согласованным поведением на разных платформах.

🔐 Лицензия: Apache-2.0

🖥 Github

@KotlinSenior #kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
1
👩‍💻 Kotlin-Result — функциональный подход к обработке ошибок. Библиотека предлагает монаду Result для Kotlin, вдохновлённую решениями из Rust и Haskell. Позволяет явно разделять успешный результат (Ok) и ошибку (Err), избегая исключений и null-значений.

Проект имеет zero-overhead реализацию через inline-классы и поддержку корутин. Подходит для проектов, где важна предсказуемость и читаемость кода обработки ошибок.

🖥 GitHub

@KotlinSenior #kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
1
👩‍💻 Compose Vectorize — это библиотека на базе Kotlin Multiplatform, предназначенная для автоматического создания ImageVector из .xml файлов! Она используется для преобразования графических ресурсов Android в векторные изображения, совместимые с compose.ui.graphics

🌟 Библиотека поддерживает тему и динамические цвета Material3, позволяя адаптировать цвета векторных изображений на основе тем оформления. Для работы она генерирует файлы Kotlin из XML-ресурсов, которые затем можно использовать в коде Compose

🖥 Github

@KotlinSenior #kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
1
👩‍💻 Extra Ktor Plugins — это набор мощных плагинов для расширения возможностей Ktor-приложений как на стороне сервера, так и на стороне клиента!

🌟 Эти плагины помогают решать распространённые задачи, такие как интеграция с Kafka, планирование задач, ограничение частоты запросов и повышение устойчивости через Circuit Breaker.

🔐 Лицензия: MIT

🖥 Github

@KotlinSenior #kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
1
👩‍💻 AtomicFU — библиотека для работы с атомарными операциями в Kotlin. Этот проект от JetBrains предоставляет удобный и эффективный способ работы с атомарными операциями в Kotlin-проектах. Поддерживает все основные платформы: JVM, Native, JS и Wasm.

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

🖥 GitHub

@KotlinSenior #kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
2
Митап по мобильной разработке в Санкт-Петербурге!⚡️

👉Когда — 4 сентября
👉Во сколько — 18:00
👉Где — Санкт-Петербург, БЦ Атлантик Сити

Что обсудим?

1️⃣ «Кастомная сериализация с помощью kotlinx.serialization» Антон Николаев (в android-разработке с 2020, сейчас — в онлайн-кинотеатре Okko в команде «Молодость»)
Разберём что такое json schema, и как мы используем ее для формирования ответов от бекенда; неудобство работы с json schema; библиотеку kotlinx.serialization, и как мы используем ее для упрощения работы с json schema


2️⃣«Уменьшение ошибок видеоплеера на Android» Егор Баженов (Android-разработчик VK, аспирант университета ИТМО)
Разберём частые ошибки воспроизведения видео на Android и способы их исправления через плеер или бэкенд. Полезно для разработчиков на ExoPlayer: доработки команды Егора сократили ошибки в 5 раз.


3️⃣ Воркшоп «Шейдерные анимации в Android на OpenGL, Vulkan и AGSL» Александр Верещагин (Android-разработчик в команде VK Музыки)
Сравним три подхода к шейдерам в Android: классический OpenGL, высокопроизводительный Vulkan и AGSL из Android 13. Разберём их сильные и слабые сторон


4️⃣ Воркшоп «Зачем CI/CD мобильным разработчикам?» Владислав Рябчевский (Автоматика-Сервис)
Практический воркшоп по CI/CD: разберём российские аналоги, соберём пайплайн для Aurora OS и научимся настраивать его в своих проектах.


Митап проводится совместно с Okko TechTeam. Встреча бесплатная, но необходима предварительная регистрация📍

Приходите за разбором реальных кейсов, плодотворным нетворкингом и полезными навыками!

👉Зарегистрироваться👈
1
👩‍💻 Galoisenne — это библиотека на Kotlin, предназначенная для работы с графами, конечными полями и дискретными динамическими системами!

🌟 Она реализует новый вычислительный подход, называемый графовыми вычислениями, который отличается от традиционных моделей, таких как машина Тьюринга или λ-исчисление Чёрча. Преимущество этого подхода заключается в возможности прямого преобразования в итеративное умножение матриц на GPU, что открывает широкие возможности для параллельных вычислений.

🔐 Лицензия: Apache-2.0

🖥 Github

@KotlinSenior #kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
📱System Design в мобильной разработке — это про архитектуру, которая выходит за рамки экранов и навигации.

Чтобы приложения масштабировались, выдерживали нагрузку и не ломались при росте — нужен системный подход.

Как выстроить его на практике? Подробно обсудим это на Podlodka Android Crew, 15-19 сентября.

В программе:

🧩 Бинарная совместимость: где с ней сталкиваются мобильные разработчики и какие ошибки чаще всего приводят к проблемам. (Абакар Магомедов, Альфа-Банк)

🏗️ Мобильный архитектор: какие решения он принимает и почему без этой роли сложно развивать сложные приложения. (Эдуард Некрутов, Blink)

⚙️ Dependency Injection в KMP: обзор фреймворков и разбор, как выбрать подходящее решение под проект. (Александр Власюк, РайффайзенБанк)

⚡️BDUI в Android: опыт от DivKit, Beduin и Duit. Как перестать хардкодить экраны и ускорить эксперименты, чтобы быстрее проверять гипотезы.

🔗 Подключайся — будет полезно

По промокоду для подписчиков скидка 500 р: android_crew_14_8zleHF
1
🔥 NFCGate — это приложение для Android, предназначенное для захвата, анализа и модификации NFC-трафика!

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

🌟 Захват на устройстве: позволяет перехватывать NFC-трафик от сторонних приложений, работающих на устройстве.

🌟 Режим ретрансляции: передача NFC-трафика между двумя устройствами через сервер, где одно устройство работает в режиме "ридера", а другое эмулирует NFC-метку с использованием Host Card Emulation (HCE).

🌟 Режим воспроизведения: повторное воспроизведение ранее захваченного NFC-трафика в режиме "ридера" или "метки".

🌟 Клонирование: копирование начальной информации метки, такой как идентификатор (ID).

🌟 Экспорт в pcapng: сохранение захваченного NFC-трафика в формате pcapng для дальнейшего анализа в инструментах, таких как Wireshark.

🔐 Лицензия: Apache-2.0

🖥 Github

@KotlinSenior #kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
1