Kotlin Developer
6.36K subscribers
179 photos
7 videos
254 links
Самый топовый канал по Kotlin

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

Мы на бирже: https://telega.in/c/KotlinSenior
Download Telegram
Как создать плагин для IntelliJ IDEA на примере генератора директорий для проекта

Меня зовут Александр Мамонов, и в KODE я занимаюсь разработкой на Flutter. Я столкнулся с бойлерплейтом композиции фич в наших проектах, поэтому решил написать универсальный плагин для создания файловой структуры фич в проекте.

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


Читать статью
1
👩‍💻 Film Simulator — это кроссплатформенное мобильное приложение на основе Kotlin Multiplatform и Compose UI. Оно позволяет пользователям применять к изображениям различные фильтры в стиле плёнки (LUTs)

🌟 Приложение создано для Android и iOS, использует архитектуру MVVM и включает в себя такие технологии, как SQLDelight, Ktor, FFMPEG-Kit и Material Design 3 для создания интерфейса

🔐 Лицензия: MIT

🖥 Github

@KotlinSenior #kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
1
Что такое функциональный тип, какие у него ограничения?

Язык Kotlin допускает объявлять тип анонимных функций или лямбда выражений — функциональный.

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

Пример функционального типа: (a: Int, b: Int) -> Int
Здесь функциональный тип описывает функцию с двумя параметрами типа Int и возвращаемым значением типа Int.

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

Ограничения функционального типа:

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

Несмотря на эти ограничения, функциональные типы позволяют обрабатывать функции как объекты, что повышает гибкость и выразительность кода. Пример определения функционального типа:

// определение функционального типа
typealias Operation = (Int, Int) -> Int

// использование функционального типа
fun calculate(op: Operation, a: Int, b: Int): Int {
return op(a, b)
}

// пример вызова функции calculate
val sum: Operation = { x, y -> x + y }
calculate(sum, 10, 5) // результат: 15


Код из примера определяет функциональный тип Operation, который представляет собой функцию, принимающую два аргумента типа Int и возвращающую значение типа Int. Затем создается функция calculate, которая принимает три параметра: функцию op типа Operation и два аргумента типа Int. Внутри функции calculate вызывается переданная функция op с переданными аргументами a и b, и результат возвращается из функции calculate. В конце кода создается переменная sum, которая содержит лямбда-выражение, реализующее операцию сложения. Далее вызывается функция calculate с параметрами sum, 10 и 5, что приводит к вызову функции sum с аргументами 10 и 5, и результатом является число 15.

@KotlinSenior #kotlin
1
👩‍💻 Solivagant — это библиотека для создания многоплатформенной навигации в Jetpack Compose Multiplatform.

💡 Библиотека обеспечивает безопасное и гибкое управление навигацией с возможностью интеграции ViewModel, SavedStateHandle и других функций для работы с состоянием и жизненным циклом. Solivagant поддерживает несколько стеков навигации, анимации переходов и обратную совместимость.

🖥 Github

@KotlinSenior #kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
1
Как работают SAM-conversions?

Single Abstract Method (SAM) интерфейсы — это интерфейсы только с одним абстрактным методом (функциональные интерфейсы). Kotlin поддерживает соглашение SAM — автоматическую конвертацию функций и lambda между Kotlin и Java.

SAM-conversions позволяют использовать Java-интерфейсы с единственным абстрактным методом в Kotlin, как если бы это были функциональные типы. В Kotlin вы можете использовать такие интерфейсы для создания лямбда-выражений без явного определения функционального типа.

При использовании интерфейса с единственным абстрактным методом в качестве функционального интерфейса в Java, вы можете передавать его экземпляры вместо лямбда-выражений. Это тоже возможно в Kotlin, но на самом деле Kotlin предоставляет более простой синтаксис для этого. Когда вам нужно использовать функциональный интерфейс в Kotlin, вы можете передать lambda-выражение, которое соответствует сигнатуре единственного метода интерфейса, вместо экземпляра интерфейса. Компилятор сам преобразует лямбда-выражение в экземпляр интерфейса, используя функцию-расширение метода invoke интерфейса. Пример:

interface OnClickListener {
fun onClick(view: View)
}

class Button {
fun setOnClickListener(listener: OnClickListener) {
// ...
}
}

val button = Button()
button.setOnClickListener { view ->
// обработка нажатия кнопки
}


В этом примере мы определяем интерфейс OnClickListener с единственным абстрактным методом onClick. Затем мы создаем класс Button, который может иметь слушатель, реализующий данный интерфейс. После этого мы создаем экземпляр Button и передаем лямбда-выражение с соответствующей сигнатурой в качестве слушателя. Компилятор автоматически преобразует это лямбда-выражение в экземпляр интерфейса OnClickListener, используя функцию-расширение invoke интерфейса.

@KotlinSenior #kotlin
1
👩‍💻 Muzza — это клиент YouTube Music для Android, разработанный с использованием Material Design 3.

🌟 Это приложение позволяет пользователям слушать музыку без рекламы, поддерживает фоновое воспроизведение, кэширование и загрузку песен для офлайн-режима, синхронизированные тексты песен и перевод, интеграцию с Android Auto и динамические темы. Этот клиент разработан как альтернатива официальному приложению YouTube Music и имеет открытый исходный код.

🔐 Лицензия: GPL-3.0

🖥 Github

@KotlinSenior #kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
1
👩‍💻 Solivagant — это библиотека для создания многоплатформенной навигации в Jetpack Compose Multiplatform.

💡 Библиотека обеспечивает безопасное и гибкое управление навигацией с возможностью интеграции ViewModel, SavedStateHandle и других функций для работы с состоянием и жизненным циклом. Solivagant поддерживает несколько стеков навигации, анимации переходов и обратную совместимость.

🖥 Github

@KotlinSenior #kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
1
Koin: Простой и легковесный фреймворк для внедрения зависимостей

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

В то же время, хотя Spring Framework и является широко распространенным выбором, он далеко не всем подходит. Некоторым было бы предпочтительнее использовать более простые и легковесные фреймворки с продвинутой поддержкой асинхронных операций ввода-вывода. Другие были бы признательны за статическое разрешение зависимостей для более быстрого запуска приложения.

Читать статью
1
👩‍💻 miuix — библиотека компонентов пользовательского интерфейса для Kotlin Multiplatform, разработанная для создания кроссплатформенных приложений.

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

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

🖥 Github

@KotlinSenior #kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
1
👩‍💻 akkurate — библиотека для валидации данных в приложениях на Kotlin!

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

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

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

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

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

🖥 Github

@KotlinSenior #kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
1
👩‍💻 Tiamat — библиотека для разработки кроссплатформенной навигации на Jetpack Compose!

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

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

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

🖥 Github

@KotlinSenior #kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
1
👩‍💻 repormation — инструмент для получения информации о репозиториях пользователей GitHub и их последних событиях!

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

🖥 Github

@KotlinSenior #kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
1
👩‍💻 Lyricist — это инструмент для Android-разработки, предназначенный для упрощения локализации приложений, работающих с Jetpack Compose!

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

💡 Инструмент генерирует вспомогательные функции, такие как rememberStrings() и ProvideStrings(), чтобы упростить доступ к строкам текущей локали и их переключение. Разработчики могут кастомизировать настройки для мультимодульных проектов, а также интегрировать собственные механизмы сохранения текущего языка.

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

🖥 Github

@KotlinSenior #kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
1
👩‍💻 KMP-App-Template-Native — шаблон для создания приложений на Kotlin Multiplatform с использованием нативных UI для Android и iOS!

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

🔐 Лицензия: 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
2
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
2
👩‍💻 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
2
👩‍💻 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