Библиотека мобильного разработчика | Android, iOS, Swift, Retrofit, Moshi, Chuck
9.85K subscribers
1.45K photos
68 videos
52 files
4.2K links
Все самое полезное для мобильного разработчика в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/b60af5a4

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a4adec1b17b35b6c0d8389
Download Telegram
📁 Примеры использования File Templates для типовых сценариев, где требуется шаблонный код

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

В этой статье автор перейдет к практике — напишет шаблоны для кода типового экрана SomeFeature мобильного приложения.

👉 Читать статью

#новость #android #kotlin
🔥3
⚙️ Управление настройками с помощью Jetpack DataStore: простой подход к сохранению данных разных типов

При разработке Android-приложений часто возникает необходимость сохранять пользовательские настройки, такие как выбор темы, язык или другие данные пользователя. Jetpack DataStore — это современное решение для хранения таких данных, которое заменяет устаревший SharedPreferences.

В статье автор рассмотрит, как использовать DataStore для хранения различных типов данных (Boolean, Integer, Float и String) и как интегрировать его с архитектурой MVVM, используя StateFlow для обновления UI.

👉 Читать статью

#новость #android #kotlin
👍43
👾 Свойства, методы get и set

Свойства класса — это переменные, которые хранят состояние объекта класса. Как и любая переменная, свойство может иметь тип, имя и значение.

В классе можно объявить свойства с помощью ключевого слова 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» при проверке переменных в приостановленной корутине.

В этой статье автор расскажет, как динамически включать удобные для отладки настройки с помощью свойства 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
🥰4👍1
🛠️ Кастомизация лейаутов на Compose

В этом докладе — полноценный обзор средств для кастомизации лейаутов на Compose.

Автор разбирает механизм работы layout-фазы в Compose. Рассказывает, как работают стандартные лейауты, а также какие возможности существуют для написания кастомных. Рассматривает нюансы и хаки, о которых не написано в документации.

👀 Смотреть доклад

#новость #android #kotlin
4👍1
👾 Преимущества Data-классов в Kotlin

Data-класс предназначен исключительно для хранения каких-либо данных.

Основное преимущество: для параметров, переданных в основном конструкторе, автоматически будут переопределены методы toString(), equals(), hashCode(), copy().

Также для каждой переменной, объявленной в основном конструкторе, автоматически генерируются функции componentN(), где N — номер позиции переменной в конструкторе.

Благодаря этому внутри data-класса мы исключаем написание шаблонного кода.

#kotlin
3
🐦 Канареечные релизы на Camunda

В последнее время команда Т-Банка часто выпускаем новую функциональность, используя метод канареечных релизов. Автор статьи рассказывает, как это делается.

У себя на проекте команда использует Camunda, поэтому автор разберёт, как более безопасно выпускать новые версии bpmn-схемы на прод, минимизируя влияние багов на пользователей.

Статья написана с учётом того, что читатель уже знаком с Camunda и имеет опыт разработки приложений на этом движке.

👉 Читать статью

#новость #kotlin
🥰2
👾 Extensions (расширения) — что это и для чего нужны

Это функции, которые позволяют добавить функционал к уже определенным типам.

Kotlin предлагает нам концепцию «Extension Function»: мы можем к любому существующему типу добавить функцию-расширение, которая будет доступна через все объекты этого типа (но будет иметь доступ только к публичным частям).

• Для добавления функционала класса, если он закрыт для расширения (например, лежит в сторонней библиотеке).

• Для расширения nullable типов.

• Для расширения companion object.

• Для расширения свойств существующих классов.

• Для конвертации моделей из одной в другую.

• Для расширения функционала дженериков.

#kotlin
1👍1
👨‍💻 Корутины Kotlin в продакшене: уроки и подводные камни

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

В этой статье автор рассматривает основные проблемы, с которыми можно столкнуться при работе с корутинами, а также нюансы, способные привести к серьезным ошибкам.

👉 Читать статью

#новость #android #kotlin
😢53👏1🎉1
📁 Как создать плагин для IntelliJ IDEA

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

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

👉 Читать статью

#новость #kotlin #flutter
1
👾 Создание плагинов с помощью Kotlin Multiplatform

Хоть Flutter и предоставляет полноценный фреймворк для создания кроссплатформенных приложений, интеграция нативного функционала иногда может быть весьма обременительной. Именно здесь на помощь приходит Kotlin Multiplatform (KMP).

KMP — это не просто инструмент, который конкурирует с Flutter, скорее, он предлагает мощный способ рационализировать разработку плагинов, позволяя разработчикам экономить время, беречь силы и писать эффективный, легко сопровождаемый код.

В этой статье автор делится опытом использования KMP для создания библиотеки общих настроек (Shared Preferences) для Flutter под названием SharedPrefsKMP. Эта библиотека упрощает управление общими настройками в Android и iOS, демонстрируя, как KMP может улучшить процесс разработки на Flutter.

👉 Читать статью

#новость #kotlin
😁51
👾 Как работает модификатор crossinline?

crossinline — ключевое слово, которое используется для указания, что лямбда-выражение не может содержать нелокальных return, даже если оно передано в inline-функцию.

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

#kotlin
3
🔄 Безопасное обновление состояния в ViewModel

Это краткая заметка о подходе, который автор выработал для себя, чтобы обновлять состояние экрана при использовании 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
4
👾 Функции высшего порядка

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

Функции высшего порядка являются основой концепции функционального программирования.

👉 Читать подробнее

#kotlin
4👍1
🚙 Kotlin Coroutines под капотом

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

В этой статье автор разбирает две базовые концепции, на основе которых строится Structured Concurrency — CoroutineContext и CoroutineScope.

👉 Читать статью

#новость #android #kotlin
2
👾 Почему reified возможно использовать только с inline-функциями

Ключевое слово reified используется только с inline-функциями, т.к. оно позволяет получить доступ к информации о типе-параметре на этапе выполнения программы, что невозможно для обычных (non-inline) функций.

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

Именно reified в комбинации с inline позволяет сохранить информацию о типе-параметре и передать ее внутрь функции в рантайме, что было бы невозможно без inline.

Также стоит отметить, что ключевое слово reified можно применять только с обобщенными типами (дженериками).

#kotlin
5
👾 Конструкторы в Kotlin

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

Класс в Kotlin может иметь основной конструктор (primary) и один или более вторичных конструкторов (secondary). У класса может и не быть конструктора, но Kotlin всё равно автоматически сгенерирует основной конструктор по умолчанию (без параметров).

👉 Подробнее в статье

#kotlin
🥰4
🗺️ Pисуем аватарки на карте

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

В статье автор рассматривает, как загрузить изображение через Coil и отобразить его на карте при помощи SDK для Yandex MapKit.

👉 Читать статью

#новость #kotlin
🥰51