Kotlin
2.16K subscribers
276 photos
123 videos
18 files
399 links
Подборки полезного материала по Kotlin. По всем вопросам @evgenycarter
Download Telegram
Использование делегирования в Kotlin для упрощения совместной работы с ViewModel и управления состояниями

В предыдущем материале мы рассказали о том, как создавался наш экран InRide для водителей. По мере того как развиваются технологии и потребности, развивается и наш продукт. Хамид Реза, наш менеджер по продукции, придумал встроить навигационные возможности прямо в существующий экран In-Ride, избавив наших водителей от зависимости от сторонних навигационных приложений. 🗺️

https://proandroiddev.com/leveraging-kotlin-delegation-to-simplify-viewmodel-collaboration-and-state-management-399c17cf5df5

✍️ @kotlin_lib
👍3
Миграция конфигурации сборки с Groovy на Kotlin

Что такое DSL?
DSL (Domain-Specific Language) — это язык программирования, который спроектирован и оптимизирован для решения задач в конкретной области или для определенного класса задач. DSL build.gradle предоставляет разработчикам удобный способ определения настроек проекта и управления ими, используя специфический синтаксис, который Gradle понимает и обрабатывает. Этот DSL позволяет создавать мощные и гибкие сценарии сборки, которые могут быть легко настраиваемы для разных проектов и задач.

С Android Studio Giraffe Kotlin DSL становится новым стандартом для Gradle-скриптов в разработке Android. Когда вы создаете новые проекты, используя встроенные шаблоны IDE, вам будут предоставлены файлы Kotlin DSL вместо файлов Gradle на основе Groovy.

https://habr.com/ru/companies/ppr/articles/765544/

✍️ @kotlin_lib
👍5
Корутинные загадки
Антон Дудаков, Владимир Меркурьев

Спикеры будут показывать код с корутинами и спрашивать, что в нем должно случиться, а слушатели будут выбирать варианты ответов. После этого будет запускаться живой код и оцениваться то, что получилось на самом деле. Затем будем разбор того, почему все именно так. Кто выберет больше всего правильных вариантов — тот и победил.

Будут примеры с синхронизацией и конкурентной работой, отмена корутин и неочевидности Kotlin Flow.

https://www.youtube.com/watch?v=Qj_vTsN_4uo

✍️ @kotlin_lib
👍5
Элегантная обработка событий в Kotlin - прохождение рефакторинга

Раскройте пиковую производительность кода Kotlin с помощью этих экспертных советов по рефакторингу.

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

https://img.ly/blog/kotlin-code-refactoring-for-peak-performance/

✍️ @kotlin_lib
👍3
Измеряем sequence

В Kotlin существует мощный механизм ленивой обработки коллекций, но многие разработчики боятся его использовать, так как не понимают, как он работает внутри.

Максим сравнит два подхода к обработке коллекций: обычный и ленивый через sequence. Он рассмотрит, как работают под капотом большинство конструкций sequence. Но самое главное — он измерит на конкретных цифрах, насколько корректно правило CouldBeSequence, и в каких случаях использование sequence дает реальный выигрыш, а в каких — проигрыш. «На десерт» будет немного оптимизации. Да-да, оригинальные функции Kotlin не всегда работают оптимально.

https://www.youtube.com/watch?v=bg3ICZVRDOs

✍️ @kotlin_lib
👍5
Понимание разницы между KSP и KAPS в Kotlin

В этой статье мы рассмотрим, чем отличаются KSP и KAPS, и узнаем, в каких случаях стоит использовать каждый из них.

https://towardsdev.com/understanding-the-difference-between-ksp-and-kaps-in-kotlin-d87e68d86f87

✍️ @kotlin_lib
👍2👎1
Media is too big
VIEW IN TELEGRAM
Алина Гребёнкина — как сделать так, чтобы разработчики использовали Kotlin

Тайм-коды:
00:00 — Избранные моменты выпуска
00:37 — Начало выпуска
00:50 — Расскажи подробнее, что ты делаешь на работе?
01:30 — Что такое Kotlin?
03:34 — Кем ты хотела стать, когда вырастешь?
05:10 — Про школу и интересы в школьное время
08:03 — Про ЕГЭ и обучение в СУНЦ НГУ
14:34 — Как ты выбирала универ и как тебе там было после СУНЦа?
16:45 — Как появилась твоя первая работа и что ты делала?
19:29 — Как происходил твой рост в работе за эти два года?
21:05 — Почему ты решила уйти и как искала новую работу?
23:00 — Про собеседования в Москве
24:21 — Работа в СММ-агентстве и переход к разработке брендинговых стратегий
26:33 — «Поняла, что хочется перейти на сторону продукта»
29:03 — Что ты делала в Bookmate?
31:22 — Почему ты ушла?
33:32 — Как ты попала в JetBrains?
37:55 — Что ты посоветуешь человеку, который хочет в IT?
40:45 — Ты работаешь в IT, но ты не пишешь код. Тебе с этим ок?
42:03 — Подкаст выходит при поддержке школы karpov.courses
42:27 — Cпасибо Haos Community Space за предоставленное место для съемки

источник

✍️ @kotlin_lib
👍7
Wonderous Compose

Wonderous Compose - это порт Wonderous в Compose Multiplatform. Wonderous Compose - это визуальная витрина восьми чудес света. Оригинальный проект был создан командой gskinner с использованием Flutter. Этот проект - дань уважения их оригинальной работе, с целью исследовать возможности дизайна в Compose.

Изображения и логотипы взяты из репозитория GitHub оригинального проекта. Художественные работы, находящиеся в открытом доступе, предоставлены Метрополитен-музеем, Нью-Тауэр. Фотографии с сайта Unsplash.

https://github.com/ShreyashKore/wonderous_compose

✍️ @kotlin_lib
👍8😇1
Kotlin и Java

Преимущества языка Kotlin перед Java
Код на Kotlin компактнее на 30-40%
Меньше кода = меньше ошибок, выше скорость разработки.

Безопасная работа с обнуляемыми переменными (Null Safety)
В отличие от Java, в Kotlin по умолчанию все типы являются non-nullable, то есть не могут принимать значение null. Присвоение или возврат null приведет к ошибке компиляции. Чтобы присвоить переменной значение null, в Kotlin необходимо явно пометить эту переменную как nullable (добавив после типа знак вопроса). В Java же при использовании ссылки на объект с указанным значением null, появляется исключение в виде «NullPointerException!».

Функции-расширения (Extensions)
Kotlin позволяет расширять класс путём добавления нового функционала без необходимости наследования от такого класса. Это реализовано с помощью специальных выражений, называемых расширения. Например, вы можете написать новые функции для класса из сторонней библиотеки, которую вы не можете изменить. Такие функции можно вызывать обычным способом, как если бы они были методами исходного класса. Этот механизм называется функцией расширения.

Классы данных (data classes)
Разработчику на Java приходится писать много стандартного, но часто встречающегося кода (т.н. шаблонный код или boilerplate). В Kotlin же есть возможность создания специальных классов для определения полей для хранения данных, конструктора, функций сеттеров и геттеров для каждого поля, и функций Hashcode(), toString() и equals(). Для этого достаточно добавить data в определение класса, затем компилятор сделает все сам.

Синглтоны на уровне языка (Object)
В Java все должно объявляться внутри класса. Но в Kotlin все иначе. Компоненты могут объявляться за пределами класса, и это автоматически делает их статическими. Поэтому нам не требуется ключевое слово static. В Java статические члены обрабатываются не так, как члены-объекты. Это означает, что для статических членов нам недоступны такие вещи, как реализация интерфейса, помещение экземпляра в ассоциативный список (map) или передача его в качестве параметра методу, который принимает объект. В Kotlin static не является ключевым словом и вместо статических членов используются объекты-компаньоны, позволяющие преодолеть вышеуказанные ограничения. В этом и заключается преимущество. Даже если члены объектов-компаньонов выглядят как статические члены в других языках, во время выполнения они все равно остаются членами экземпляров реальных объектов и могут, например, реализовывать интерфейсы.

Корутины
Kotlin предоставляет возможность создавать дополнительные потоки, однако в нем также существуют т.н. корутины (сопрограммы), которые позволяют использовать меньше памяти в сравнении с обычным потоком, т.к. реализованы они без стека. Корутины же в свою очередь способны выполнять интенсивные и длительные задачи методом приостановления выполнения без блокировки потока и его последующего восстановления. Что в дальнейшем позволяет сгенерировать асинхронный код без блокирования, который при его выполнении не отличить от синхронного. К тому же, они генерируют эффектные доп. стили например async или await.

✍️ @kotlin_lib
👍11
Разница между Exception в Java и Kotlin

Одним из ключевых отличий между Java и Kotlin является подход к исключениям. В Java есть два типа исключений: checked и unchecked.

Checked исключения это те, которые должны быть обработаны в коде, иначе компилятор не позволит коду скомпилироваться. Unchecked исключения не требуют обработки в коде.

С точки зрения исключений компилятор Kotlin отличается тем, что не различает checked и unchecked исключения. Все исключения — только unchecked, поэтому нет необходимости отлавливать или объявлять какие-либо исключения (вы самостоятельно принимаете решение, стоит ли их отлавливать и обрабатывать).

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

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

Более подробно тут и тут

✍️ @kotlin_lib
👍6
Как перенести статичные методы из Java в Kotlin?

В Kotlin нет статических методов, для этих целей обычно служит companion object.
Для того чтобы метод из Java был представлен как статический используется аннотация @JvmStatic. Эта аннотация говорит компилятору Kotlin создать статический метод в байт-коде, что позволяет использовать методы так же, как в Java.

Например, если у нас есть статический метод в Java:

public class MyClass {
public static int sum(int a, int b) {
return a + b;
}
}

Мы можем использовать этот метод в Kotlin, добавив аннотацию @JvmStatic:

object MyClass {
@JvmStatic
fun sum(a: Int, b: Int): Int {
return a + b
}
}


Подробнее https://kotlinlang.ru/docs/reference/java-to-kotlin-interop.html


✍️ @kotlin_lib
👍4🥴2
Konsist: Первый опыт работы с новым линтером для Kotlin

Так что же такое Konsist?

В официальной документации дается хорошее и краткое объяснение его назначения, и я не могу сформулировать его лучше.

Konsist - это статический анализатор кода для языка Kotlin. Он совместим
с различными проектами на Kotlin, включая проекты Android, Spring,
и Kotlin Multiplatform.
Konsist упрощает процесс поддержания согласованности кодовой базы за счет
Поддерживая соглашения по коду и сохраняя архитектуру проекта.
Он позволяет разработчикам создавать проверки согласованности с помощью модульных тестов, которые
которые можно запускать во время проверки запросов на поставку (PR) для проверки.

https://proandroiddev.com/konsist-first-experience-with-the-new-linter-for-kotlin-9153b0e7e2c3

✍️ @kotlin_lib
👍41
Создание нативного внешнего вида и стиля iOS в мультиплатформенном приложении Compose

Внешний вид Compose по умолчанию соответствует Material Design. В Compose Multiplatform некоторые элементы были подправлены для iOS, чтобы выглядеть более нативно. Например, начиная с версии 1.5 эффект прокрутки на iOS стал имитировать эффект прокрутки на платформе. Однако большинство элементов пользовательского интерфейса по-прежнему выглядят как Material. Давайте рассмотрим простой способ получить в своем приложении более "родной" для iOS внешний вид и функциональность.

https://medium.com/@jacobras/getting-the-native-ios-look-feel-in-your-compose-multiplatform-app-33371e6ad362

✍️ @kotlin_lib
👍2
Kotlin's Flow в ViewModels: это сложно

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

https://bladecoder.medium.com/kotlins-flow-in-viewmodels-it-s-complicated-556b472e281a


Smarter Shared Kotlin Flows

Когда поток SharedFlow или StateFlow, использующий стратегию SharingStarted.WhileSubscribed(), снова собирается после того, как пользователь переходит обратно в Activity или Fragment, его исходный восходящий поток всегда перезапускается с нуля, что иногда приводит к выполнению ненужной работы, когда ранее кэшированные данные были еще актуальны.

https://bladecoder.medium.com/smarter-shared-kotlin-flows-d6b75fc66754


Стратегии автоматического обновления данных на Android с помощью Kotlin Flow

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

https://bladecoder.medium.com/strategies-for-automatically-refreshing-data-on-android-using-kotlin-flow-cd23ba7cfbe0


✍️ @kotlin_lib
👍3
Kotlin. Программирование для профессионалов. 2-е изд.
Джош Скин, Дэвид Гринхол (2023)

Kotlin – это язык программирования со статической типизацией, который взяла на вооружение Google в ОС Android. Кроме того, это мультиплатформенный язык, позволяющий создавать приложения для macOS, Windows и iOS.

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

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

pdf https://cloud.mail.ru/public/WAeN/c1WoRC26p
epub https://cloud.mail.ru/public/G9DS/B7GXopmms

✍️ @kotlin_lib
👍123
This media is not supported in your browser
VIEW IN TELEGRAM
Создание скринсейвера для macOS на Kotlin

В этой статье рассказывается о том, как я создал собственную пользовательскую заставку для macOS, почти полностью построенную на Kotlin и использующую возможности Kotlin Multiplatform для работы с macOS.

Вдохновением для этого проекта послужил видеоролик с простоя KotlinConf 2023, в котором логотипы Kotlin на протяжении веков прыгали по экрану в стиле классических заставок DVD-плееров.

https://zsmb.co/building-a-macos-screen-saver-in-kotlin/

✍️ @kotlin_lib
🔥4👍3
Как реализовать биометрическую аутентификацию в Android с помощью Kotlin

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

В документации по Android описаны три различных типа аутентификации для биометрической аутентификации.

Простыми словами, эти типы аутентификации следующие:

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

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

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

https://johncodeos.com/how-to-implement-biometric-aut..

✍️ @kotlin_lib
👍6
Исследуем возможности Live Data в Kotlin: Исчерпывающее руководство с примерами

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

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

https://towardsdev.com/exploring-the-power-of-live-data-in-kotlin-a-comprehensive-guide-with-examples-c33048829e59

✍️ @kotlin_lib
👍4👎1
Автоматизируем рутину в Android разработке: плагин для создания шаблонного кода на примере создания -api -impl

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

https://habr.com/ru/companies/alfa/articles/799873/

✍️ @kotlin_lib
👍1
Kotlin под капотом: Нюансы использования аннотаций в Kotlin

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

https://proandroiddev.com/kotlin-under-the-hood-the-nuances-of-using-annotations-in-kotlin-a58f0b2b60ac?gi=6ff112513d51

✍️ @kotlin_lib
👍3