📁 Примеры использования File Templates для типовых сценариев, где требуется шаблонный код
Это вторая статья из цикла про File Templates. В предыдущей части автор описал проблему с необходимостью написания шаблонного кода и вариантами решения, познакомил с инструментом шаблонов File Templates и разобрал синтаксис написания шаблонов.
В этой статье автор перейдет к практике — напишет шаблоны для кода типового экрана SomeFeature мобильного приложения.
👉 Читать статью
#новость #android #kotlin
Это вторая статья из цикла про File Templates. В предыдущей части автор описал проблему с необходимостью написания шаблонного кода и вариантами решения, познакомил с инструментом шаблонов File Templates и разобрал синтаксис написания шаблонов.
В этой статье автор перейдет к практике — напишет шаблоны для кода типового экрана SomeFeature мобильного приложения.
👉 Читать статью
#новость #android #kotlin
🔥3
⚙️ Управление настройками с помощью Jetpack DataStore: простой подход к сохранению данных разных типов
При разработке Android-приложений часто возникает необходимость сохранять пользовательские настройки, такие как выбор темы, язык или другие данные пользователя. Jetpack DataStore — это современное решение для хранения таких данных, которое заменяет устаревший SharedPreferences.
В статье автор рассмотрит, как использовать DataStore для хранения различных типов данных (Boolean, Integer, Float и String) и как интегрировать его с архитектурой MVVM, используя StateFlow для обновления UI.
👉 Читать статью
#новость #android #kotlin
При разработке Android-приложений часто возникает необходимость сохранять пользовательские настройки, такие как выбор темы, язык или другие данные пользователя. Jetpack DataStore — это современное решение для хранения таких данных, которое заменяет устаревший SharedPreferences.
В статье автор рассмотрит, как использовать DataStore для хранения различных типов данных (Boolean, Integer, Float и String) и как интегрировать его с архитектурой MVVM, используя StateFlow для обновления UI.
👉 Читать статью
#новость #android #kotlin
👍4❤3
👾 Свойства, методы get и set
Свойства класса — это переменные, которые хранят состояние объекта класса. Как и любая переменная, свойство может иметь тип, имя и значение.
В классе можно объявить свойства с помощью ключевого слова
При создании своего класса мы хотим сами управлять его свойствами, контролируя то, какие данные могут быть предоставлены или перезаписаны. С этой целью создаются get и set методы (геттеры и сеттеры). Цель get-метода — вернуть значение, а set-метода — записать полученное значение в свойство класса.
В данном примере свойство
Если get и set методы не были созданы вручную, то для таких свойств Kotlin незаметно сам их генерирует. При этом для свойства, объявленного с
#kotlin
Свойства класса — это переменные, которые хранят состояние объекта класса. Как и любая переменная, свойство может иметь тип, имя и значение.
В классе можно объявить свойства с помощью ключевого слова
var
или val
. Свойства, объявленные с var
, могут быть изменены после их инициализации, а свойства, объявленные с val
, только для чтения.class Person {
var name: String = «»
val age: Int = 0
}
При создании своего класса мы хотим сами управлять его свойствами, контролируя то, какие данные могут быть предоставлены или перезаписаны. С этой целью создаются get и set методы (геттеры и сеттеры). Цель get-метода — вернуть значение, а set-метода — записать полученное значение в свойство класса.
var name: String = «»
get() = field.toUpperCase()set(value) {
field = «Name: $value»
}
В данном примере свойство
name
имеет тип String
и начальное значение пустой строки. Геттер возвращает значение свойства, преобразованное к верхнему регистру. Сеттер устанавливает значение свойства с добавлением префикса «Name: "
перед переданным значением. Слово field
используется для обращения к текущему значению свойства.Если get и set методы не были созданы вручную, то для таких свойств Kotlin незаметно сам их генерирует. При этом для свойства, объявленного с
val
, генерируется get-метод, а для свойства, объявленного с var
— и get, и set методы.#kotlin
❤2👍1
⚙️ Корутины в Kotlin: как сделать «Optimised Out» переменные видимыми
Отладка корутинов в Kotlin иногда может напоминать распутывание паутины невидимых нитей — в буквальном смысле. Одна из распространенных ошибок, с которой сталкиваются разработчики — появление страшного сообщения «optimised out» при проверке переменных в приостановленной корутине.
В этой статье автор расскажет, как динамически включать удобные для отладки настройки с помощью свойства
👉 Читать статью
#новость #android #kotlin
Отладка корутинов в Kotlin иногда может напоминать распутывание паутины невидимых нитей — в буквальном смысле. Одна из распространенных ошибок, с которой сталкиваются разработчики — появление страшного сообщения «optimised out» при проверке переменных в приостановленной корутине.
В этой статье автор расскажет, как динамически включать удобные для отладки настройки с помощью свойства
idea.active
, что позволит вам проверять переменные корутин в IntelliJ IDEA и Android Studio без ущерба для производительности.👉 Читать статью
#новость #android #kotlin
❤2😁1
👾 Kotlinx.serialization и работа с JSON
Наверное, все мы хотя бы раз сталкивались с задачей сериализации данных, будь то обмен данными с сервером, сохранение состояния объекта в файл или передача данных между различными приложениями. В Kotlin для этих целей удобно использовать библиотеку Kotlinx.serialization, которая позволяет работать с данными, сериализуя и десериализуя их в различные форматы, такие как JSON, CBOR, и Protocol Buffers.
В статье автор рассказывает, как настроить и использовать kotlinx.serialization в своём проекте, а также показывает примеры эффективной работы с JSON.
👉 Читать статью
#новость #kotlin #android
Наверное, все мы хотя бы раз сталкивались с задачей сериализации данных, будь то обмен данными с сервером, сохранение состояния объекта в файл или передача данных между различными приложениями. В Kotlin для этих целей удобно использовать библиотеку Kotlinx.serialization, которая позволяет работать с данными, сериализуя и десериализуя их в различные форматы, такие как JSON, CBOR, и Protocol Buffers.
В статье автор рассказывает, как настроить и использовать kotlinx.serialization в своём проекте, а также показывает примеры эффективной работы с JSON.
👉 Читать статью
#новость #kotlin #android
🥰4👍1
🛠️ Кастомизация лейаутов на Compose
В этом докладе — полноценный обзор средств для кастомизации лейаутов на Compose.
Автор разбирает механизм работы layout-фазы в Compose. Рассказывает, как работают стандартные лейауты, а также какие возможности существуют для написания кастомных. Рассматривает нюансы и хаки, о которых не написано в документации.
👀 Смотреть доклад
#новость #android #kotlin
В этом докладе — полноценный обзор средств для кастомизации лейаутов на Compose.
Автор разбирает механизм работы layout-фазы в Compose. Рассказывает, как работают стандартные лейауты, а также какие возможности существуют для написания кастомных. Рассматривает нюансы и хаки, о которых не написано в документации.
👀 Смотреть доклад
#новость #android #kotlin
❤4👍1
👾 Преимущества Data-классов в Kotlin
Основное преимущество: для параметров, переданных в основном конструкторе, автоматически будут переопределены методы
Также для каждой переменной, объявленной в основном конструкторе, автоматически генерируются функции
Благодаря этому внутри
#kotlin
Data
-класс предназначен исключительно для хранения каких-либо данных.Основное преимущество: для параметров, переданных в основном конструкторе, автоматически будут переопределены методы
toString()
, equals()
, hashCode()
, copy()
.Также для каждой переменной, объявленной в основном конструкторе, автоматически генерируются функции
componentN()
, где N — номер позиции переменной в конструкторе.Благодаря этому внутри
data
-класса мы исключаем написание шаблонного кода.#kotlin
❤3
🐦 Канареечные релизы на Camunda
В последнее время команда Т-Банка часто выпускаем новую функциональность, используя метод канареечных релизов. Автор статьи рассказывает, как это делается.
У себя на проекте команда использует Camunda, поэтому автор разберёт, как более безопасно выпускать новые версии bpmn-схемы на прод, минимизируя влияние багов на пользователей.
Статья написана с учётом того, что читатель уже знаком с Camunda и имеет опыт разработки приложений на этом движке.
👉 Читать статью
#новость #kotlin
В последнее время команда Т-Банка часто выпускаем новую функциональность, используя метод канареечных релизов. Автор статьи рассказывает, как это делается.
У себя на проекте команда использует Camunda, поэтому автор разберёт, как более безопасно выпускать новые версии bpmn-схемы на прод, минимизируя влияние багов на пользователей.
Статья написана с учётом того, что читатель уже знаком с Camunda и имеет опыт разработки приложений на этом движке.
👉 Читать статью
#новость #kotlin
🥰2
👾 Extensions (расширения) — что это и для чего нужны
Это функции, которые позволяют добавить функционал к уже определенным типам.
Kotlin предлагает нам концепцию «Extension Function»: мы можем к любому существующему типу добавить функцию-расширение, которая будет доступна через все объекты этого типа (но будет иметь доступ только к публичным частям).
• Для добавления функционала класса, если он закрыт для расширения (например, лежит в сторонней библиотеке).
• Для расширения
• Для расширения
• Для расширения свойств существующих классов.
• Для конвертации моделей из одной в другую.
• Для расширения функционала дженериков.
#kotlin
Это функции, которые позволяют добавить функционал к уже определенным типам.
Kotlin предлагает нам концепцию «Extension Function»: мы можем к любому существующему типу добавить функцию-расширение, которая будет доступна через все объекты этого типа (но будет иметь доступ только к публичным частям).
• Для добавления функционала класса, если он закрыт для расширения (например, лежит в сторонней библиотеке).
• Для расширения
nullable
типов.• Для расширения
companion object
.• Для расширения свойств существующих классов.
• Для конвертации моделей из одной в другую.
• Для расширения функционала дженериков.
#kotlin
❤1👍1
👨💻 Корутины Kotlin в продакшене: уроки и подводные камни
Запустив в прод корутины, можно столкнуться с многочисленными проблемами, которые не сразу очевидны из документации. Несмотря на то, что в теории корутины элегантны, их практическая реализация сопряжена с несколькими нюансами, которые могут привести к серьезным проблемам.
В этой статье автор рассматривает основные проблемы, с которыми можно столкнуться при работе с корутинами, а также нюансы, способные привести к серьезным ошибкам.
👉 Читать статью
#новость #android #kotlin
Запустив в прод корутины, можно столкнуться с многочисленными проблемами, которые не сразу очевидны из документации. Несмотря на то, что в теории корутины элегантны, их практическая реализация сопряжена с несколькими нюансами, которые могут привести к серьезным проблемам.
В этой статье автор рассматривает основные проблемы, с которыми можно столкнуться при работе с корутинами, а также нюансы, способные привести к серьезным ошибкам.
👉 Читать статью
#новость #android #kotlin
😢5❤3👏1🎉1
📁 Как создать плагин для IntelliJ IDEA
Автор статьи столкнулся с бойлерплейтом композиции фич в своих проектах, поэтому решил написать универсальный плагин для создания файловой структуры фич в проекте.
В статье рассказывается и показывается, как сделать базовый плагин для создания файловых структур и собрать его для локального использования или публикации.
👉 Читать статью
#новость #kotlin #flutter
Автор статьи столкнулся с бойлерплейтом композиции фич в своих проектах, поэтому решил написать универсальный плагин для создания файловой структуры фич в проекте.
В статье рассказывается и показывается, как сделать базовый плагин для создания файловых структур и собрать его для локального использования или публикации.
👉 Читать статью
#новость #kotlin #flutter
❤1
👾 Создание плагинов с помощью Kotlin Multiplatform
Хоть Flutter и предоставляет полноценный фреймворк для создания кроссплатформенных приложений, интеграция нативного функционала иногда может быть весьма обременительной. Именно здесь на помощь приходит Kotlin Multiplatform (KMP).
KMP — это не просто инструмент, который конкурирует с Flutter, скорее, он предлагает мощный способ рационализировать разработку плагинов, позволяя разработчикам экономить время, беречь силы и писать эффективный, легко сопровождаемый код.
В этой статье автор делится опытом использования KMP для создания библиотеки общих настроек (Shared Preferences) для Flutter под названием SharedPrefsKMP. Эта библиотека упрощает управление общими настройками в Android и iOS, демонстрируя, как KMP может улучшить процесс разработки на Flutter.
👉 Читать статью
#новость #kotlin
Хоть Flutter и предоставляет полноценный фреймворк для создания кроссплатформенных приложений, интеграция нативного функционала иногда может быть весьма обременительной. Именно здесь на помощь приходит Kotlin Multiplatform (KMP).
KMP — это не просто инструмент, который конкурирует с Flutter, скорее, он предлагает мощный способ рационализировать разработку плагинов, позволяя разработчикам экономить время, беречь силы и писать эффективный, легко сопровождаемый код.
В этой статье автор делится опытом использования KMP для создания библиотеки общих настроек (Shared Preferences) для Flutter под названием SharedPrefsKMP. Эта библиотека упрощает управление общими настройками в Android и iOS, демонстрируя, как KMP может улучшить процесс разработки на Flutter.
👉 Читать статью
#новость #kotlin
😁5❤1
👾 Как работает модификатор crossinline?
crossinline — ключевое слово, которое используется для указания, что лямбда-выражение не может содержать нелокальных
Когда мы передаем лямбда-выражение в функцию в качестве параметра, мы можем использовать оператор
#kotlin
crossinline — ключевое слово, которое используется для указания, что лямбда-выражение не может содержать нелокальных
return
, даже если оно передано в inline-функцию.Когда мы передаем лямбда-выражение в функцию в качестве параметра, мы можем использовать оператор
return
внутри лямбды, чтобы выйти из цикла или функции, в которой вызывается лямбда. Однако, если мы передаем лямбда-выражение в inline-функцию, код лямбда-выражения может быть вставлен прямо в место вызова функции. В этом случае, если в лямбде используется оператор return
, это может привести к выходу из внешней функции, что не всегда желательно.#kotlin
❤3
🔄 Безопасное обновление состояния в ViewModel
Это краткая заметка о подходе, который автор выработал для себя, чтобы обновлять состояние экрана при использовании MVI-like паттерна в ViewModel.
Следует отметить, что классический «полноценный» MVI подразумевает использование редьюсеров, которые решают часть проблем, описанных в этой заметке. Тем не менее этот подход может приводить к написанию значительного количества бойлерплейтного кода.
👉 Читать статью
#новость #android #kotlin
Это краткая заметка о подходе, который автор выработал для себя, чтобы обновлять состояние экрана при использовании MVI-like паттерна в ViewModel.
Следует отметить, что классический «полноценный» MVI подразумевает использование редьюсеров, которые решают часть проблем, описанных в этой заметке. Тем не менее этот подход может приводить к написанию значительного количества бойлерплейтного кода.
👉 Читать статью
#новость #android #kotlin
🤩3
📲 Transtation — перевод с Kotlin Multiplatform
Transtation — это сочетание «Translate» и «Station», простое в использовании и мощное приложение для перевода для Android/Desktop(JVM), основанное на Kotlin Multiplatform + Compose Multiplatform.
Реализует одновременный перевод с использованием нескольких движков (Bing, Google, Baidu, Tencent), может использовать для перевода несколько передовых больших языковых моделей (LLM), таких как ChatGPT, GPT-4, ChatGLM, Qwen (в том числе в режиме общения), поддерживает плагины, загрузки, перевод изображений, перевод экрана и многое другое.
Внутри Kotlin Multiplatform + Compose Multiplatform + MVVM + Kotlin Coroutine + Flow + SqlDelight, многомодульный дизайн.
⚙️ Transtation на GitHub
#новость #android #kotlin
Transtation — это сочетание «Translate» и «Station», простое в использовании и мощное приложение для перевода для Android/Desktop(JVM), основанное на Kotlin Multiplatform + Compose Multiplatform.
Реализует одновременный перевод с использованием нескольких движков (Bing, Google, Baidu, Tencent), может использовать для перевода несколько передовых больших языковых моделей (LLM), таких как ChatGPT, GPT-4, ChatGLM, Qwen (в том числе в режиме общения), поддерживает плагины, загрузки, перевод изображений, перевод экрана и многое другое.
Внутри Kotlin Multiplatform + Compose Multiplatform + MVVM + Kotlin Coroutine + Flow + SqlDelight, многомодульный дизайн.
⚙️ Transtation на GitHub
#новость #android #kotlin
❤4
👾 Функции высшего порядка
Функции высшего порядка в Kotlin — это функции, которые принимают другие функции в качестве аргументов и/или возвращают функции в качестве результата. Эти принимаемые и возвращаемые функции обычно являются лямбда-выражениями.
Функции высшего порядка являются основой концепции функционального программирования.
👉 Читать подробнее
#kotlin
Функции высшего порядка в Kotlin — это функции, которые принимают другие функции в качестве аргументов и/или возвращают функции в качестве результата. Эти принимаемые и возвращаемые функции обычно являются лямбда-выражениями.
Функции высшего порядка являются основой концепции функционального программирования.
👉 Читать подробнее
#kotlin
❤4👍1
🚙 Kotlin Coroutines под капотом
Structured Concurrency — это одна из главных фишек Kotlin Coroutines, позволяющая оперировать иерархиями корутин через единый интерфейс. Благодаря такой организации можно легко отменить сразу все корутины, имея ссылку только на самый высокоуровневый объект.
В этой статье автор разбирает две базовые концепции, на основе которых строится Structured Concurrency — CoroutineContext и CoroutineScope.
👉 Читать статью
#новость #android #kotlin
Structured Concurrency — это одна из главных фишек Kotlin Coroutines, позволяющая оперировать иерархиями корутин через единый интерфейс. Благодаря такой организации можно легко отменить сразу все корутины, имея ссылку только на самый высокоуровневый объект.
В этой статье автор разбирает две базовые концепции, на основе которых строится Structured Concurrency — CoroutineContext и CoroutineScope.
👉 Читать статью
#новость #android #kotlin
❤2
👾 Почему reified возможно использовать только с inline-функциями
Ключевое слово
inline-функции в Kotlin позволяют копировать тело функции непосредственно в вызывающий код. Это позволяет избежать накладных расходов на создание объектов и вызовы функций при каждом вызове.
Именно
Также стоит отметить, что ключевое слово
#kotlin
Ключевое слово
reified
используется только с inline-функциями, т.к. оно позволяет получить доступ к информации о типе-параметре на этапе выполнения программы, что невозможно для обычных (non-inline) функций.inline-функции в Kotlin позволяют копировать тело функции непосредственно в вызывающий код. Это позволяет избежать накладных расходов на создание объектов и вызовы функций при каждом вызове.
Именно
reified
в комбинации с inline
позволяет сохранить информацию о типе-параметре и передать ее внутрь функции в рантайме, что было бы невозможно без inline
.Также стоит отметить, что ключевое слово
reified
можно применять только с обобщенными типами (дженериками).#kotlin
❤5
👾 Конструкторы в Kotlin
Свойств у класса может быть столько, сколько ему нужно. Но все они должны быть инициализированы при создании экземпляра этого класса. Поэтому для удобства был придуман конструктор — специальный блок кода, который вызывается при создании экземпляра класса. Ему передаются необходимые значения, которые потом используются для инициализации свойств.
Класс в Kotlin может иметь основной конструктор (primary) и один или более вторичных конструкторов (secondary). У класса может и не быть конструктора, но Kotlin всё равно автоматически сгенерирует основной конструктор по умолчанию (без параметров).
👉 Подробнее в статье
#kotlin
Свойств у класса может быть столько, сколько ему нужно. Но все они должны быть инициализированы при создании экземпляра этого класса. Поэтому для удобства был придуман конструктор — специальный блок кода, который вызывается при создании экземпляра класса. Ему передаются необходимые значения, которые потом используются для инициализации свойств.
Класс в Kotlin может иметь основной конструктор (primary) и один или более вторичных конструкторов (secondary). У класса может и не быть конструктора, но Kotlin всё равно автоматически сгенерирует основной конструктор по умолчанию (без параметров).
👉 Подробнее в статье
#kotlin
🥰4
🗺️ Pисуем аватарки на карте
Для создания динамичных и визуально привлекательных карт иногда требуется отображать изображения, например, аватары пользователей, загружаемые с сервера.
В статье автор рассматривает, как загрузить изображение через Coil и отобразить его на карте при помощи SDK для Yandex MapKit.
👉 Читать статью
#новость #kotlin
Для создания динамичных и визуально привлекательных карт иногда требуется отображать изображения, например, аватары пользователей, загружаемые с сервера.
В статье автор рассматривает, как загрузить изображение через Coil и отобразить его на карте при помощи SDK для Yandex MapKit.
👉 Читать статью
#новость #kotlin
🥰5❤1