Kotlin Developer
6.21K subscribers
250 photos
7 videos
343 links
Самый топовый канал по Kotlin

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

Мы на бирже: https://telega.in/c/KotlinSenior
Download Telegram
Что такое функциональный тип, какие у него ограничения?

Язык 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
👩‍💻 А ты справишься с тестом по Kotlin?

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

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

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

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

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
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
🤖 Пройди тест для Android-разработчиков и проверь свои знания, готов ли ты к обучению на курсе.

Ответишь — пройдешь на продвинутый курс "Android Developer. Professional " от OTUS по специальной цене + получишь доступ к записям открытых уроков курса

За 5 месяцев обучения ты освоишь:
— Проектирование архитектуры: Clean Architecture, MV*, многомодульные приложения и профессиональное использование DI.
— Современный стек: Kotlin, Jetpack Compose, Coroutines/Flow, Dagger 2/Hilt, Gradle.
— Разработку кросс-платформенных приложений с использованием Kotlin Multiplatform.
— Глубокое понимание Android SDK: оптимизация, безопасность и производительность приложений.
— Организацию инфраструктуры: CI/CD, Docker, линтеры, автоматизация сборки и мониторинг.
— Написание надежных тестов: интеграционные, UI-тесты и работа с фреймворками.

👉 ПРОЙТИ ТЕСТ: https://vk.cc/cIJY4x

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
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
🤖 Пройди тест для Android-разработчиков и проверь свои знания, готов ли ты к обучению на курсе.

Ответишь — пройдешь на продвинутый курс "Android Developer. Professional " от OTUS по специальной цене + получишь доступ к записям открытых уроков курса

За 5 месяцев обучения ты освоишь:
— Проектирование архитектуры: Clean Architecture, MV*, многомодульные приложения и профессиональное использование DI.
— Современный стек: Kotlin, Jetpack Compose, Coroutines/Flow, Dagger 2/Hilt, Gradle.
— Разработку кросс-платформенных приложений с использованием Kotlin Multiplatform.
— Глубокое понимание Android SDK: оптимизация, безопасность и производительность приложений.
— Организацию инфраструктуры: CI/CD, Docker, линтеры, автоматизация сборки и мониторинг.
— Написание надежных тестов: интеграционные, UI-тесты и работа с фреймворками.

👉 ПРОЙТИ ТЕСТ: https://vk.cc/cJlq5W

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
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
📱Хотите создавать стильные и современные Android-приложения?

На открытом вебинаре «Material Design 3.0 — что нужно знать разработчику» 📅 24 марта в 20:00 мск вы разберете документацию, изучите инструменты и узнаете ключевые требования дизайна.

💼Научитесь создавать интерфейсы, которые будут радовать пользователей и впечатлять работодателей.

👉Открытый урок перед стартом курса «Android Developer. Professional», получите скидку на обучение: https://vk.cc/cJT7yZ

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
1
👩‍💻 repormation — инструмент для получения информации о репозиториях пользователей GitHub и их последних событиях!

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

🖥 Github

@KotlinSenior #kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
1
В России можно посещать IT-мероприятия хоть каждый день: как оффлайн, так и онлайн

Но где их находить? Как узнавать о них раньше, чем когда все начнут выкладывать фотографии оттуда?

Переходите на канал IT-Мероприятия России. В нём каждый день анонсируются мероприятия со всех городов России

📆 в канале размещаются как онлайн, так и оффлайн мероприятия;
👩‍💻 можно найти ивенты по любому стеку: frontend-backend разработка, кибербезопасность, дата-аналитика, osint, devops и другие;
🎙 разнообразные форматы мероприятий: митапы с коллегами по цеху, конференции и вебинары с известными опытными специалистами, форумы и олимпиады от важных представителей индустрии и многое другое

А чтобы не искать по разным форумам и чатам новости о предстоящих ивентах:

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

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

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

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

🖥 Github

@KotlinSenior #kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
1
Как избавиться от нестабильных тестов и ускорить развертывание?

Приглашаем на открытый урок «Оптимизация CI/CD для мобильных тестов на Kotlin»

Настроим CI/CD для мобильных тестов на Kotlin: работа с GitHub Actions/GitLab CI, эмуляторами и реальными устройствами.

Разберем причины флейковых тестов в Android-тестировании: тайминги, нестабильные UI-элементы, инфраструктурные ограничения.

Рассмотрим методы ускорения и инструменты для стабильности и отчетности: Espresso, UIAutomator, Firebase Test Lab, Allure.

Практика: Настроим CI/CD пайплайн для запуска тестов на Android-устройствах и эмуляторах.

👉 Регистрация на урок: https://vk.cc/cKfrxl

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
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