Design of Kotlin Coroutines
#kotlin
Сегодня я к вам с хорошей статьей, где автор рассказывает о том, как устроены Coroutines под капотом.
Суперполезно понимать, как работают часто используемые нами инструменты под капотом, ведь это поможет гораздо лучше понимать потенциальные проблемы или особенности при использовании.
В статье много примеров кода, а также разбор почти всех методов для Coroutines:
#kotlin
Сегодня я к вам с хорошей статьей, где автор рассказывает о том, как устроены Coroutines под капотом.
Суперполезно понимать, как работают часто используемые нами инструменты под капотом, ведь это поможет гораздо лучше понимать потенциальные проблемы или особенности при использовании.
В статье много примеров кода, а также разбор почти всех методов для Coroutines:
launch(), start(), invoke(), startCoroutineCancellable(), resumeWithCancellable(), resumeWith(), invokeSuspend()
. 🤓👍7❤🔥4
Select в Kotlin Coroutines
#kotlin
Давненько на канале не появлялось сообщений. 🙄 Но я снова с вами, и сегодня предлагаю обсудить ключевое слово select, но только не в контексте SQL-запросов, а в контексте Coroutines.
В мобильной разработке его можно использовать для кейсов, когда у нас есть несколько suspend-функций, но нас интересует результат только той, которая завершится первой.
Небольшой пример:
Функции data1 и data2 — это простейшие вызовы с delay:
В общем, ещё один суперполезный инструмент при использовании Coroutines. Подробнее можно почитать тут.
#kotlin
Давненько на канале не появлялось сообщений. 🙄 Но я снова с вами, и сегодня предлагаю обсудить ключевое слово select, но только не в контексте SQL-запросов, а в контексте Coroutines.
В мобильной разработке его можно использовать для кейсов, когда у нас есть несколько suspend-функций, но нас интересует результат только той, которая завершится первой.
Небольшой пример:
val winner = select<String> {
data1().onAwait { it }
data2().onAwait { it }
}
println("The winner = $winner") // prints "The winner = Hello"
Функции data1 и data2 — это простейшие вызовы с delay:
fun data1() = GlobalScope.async {
delay(1000)
"Hello"
}
fun data2() = GlobalScope.async {
delay(2000)
"World"
}
В общем, ещё один суперполезный инструмент при использовании Coroutines. Подробнее можно почитать тут.
🔥13🍾8👍5👌1🏆1
Дизайн система с Jetpack Compose
#compose
В своём текущем проекте думаем о добавлении дизайн системы, и мне попалась полезная статья, которая описывает, как сделать такую систему на Jetpack Compose.
Вообще, с ростом приложения дизайн система крайне важна: она помогает переиспользовать существующие компоненты и быстро находить несоответствия в текущем компоненте.
Кроме этого, есть ещё несколько преимуществ:
👉 общий язык между командой дизайнеров и разработчиков;
👉 единственный "источник истины" при вёрстке;
👉 изменения в нижнем слое мгновенно изменяют состояние всех остальных слоёв;
👉 расширяемость: все более сложные компоненты состоят из множества маленьких;
Рекомендую ознакомиться со статьёй, где автор подробно описывает, как должна выглядеть подобная система на Compose.
Поделитесь опытом: помогла ли вам дизайн-система улучшить процессы между командами. Или скиньте в комментариях ещё больше полезных статей с прикладным опытом для построения такой системы.
#compose
В своём текущем проекте думаем о добавлении дизайн системы, и мне попалась полезная статья, которая описывает, как сделать такую систему на Jetpack Compose.
Вообще, с ростом приложения дизайн система крайне важна: она помогает переиспользовать существующие компоненты и быстро находить несоответствия в текущем компоненте.
Кроме этого, есть ещё несколько преимуществ:
👉 общий язык между командой дизайнеров и разработчиков;
👉 единственный "источник истины" при вёрстке;
👉 изменения в нижнем слое мгновенно изменяют состояние всех остальных слоёв;
👉 расширяемость: все более сложные компоненты состоят из множества маленьких;
Рекомендую ознакомиться со статьёй, где автор подробно описывает, как должна выглядеть подобная система на Compose.
Поделитесь опытом: помогла ли вам дизайн-система улучшить процессы между командами. Или скиньте в комментариях ещё больше полезных статей с прикладным опытом для построения такой системы.
🔥8
Kotlin и bytecode
#kotlin
Полезная статья, где автор рассматривает фичи Kotlin со стороны байткода.
Кроме этого, тут есть несколько полезных штук, которые также освещены:
👉 что такое Java Virtual Machine и её спецификация;
👉 почему фичи Java и Kotlin совместимы;
👉 как выглядят основные фичи Kotlin в байткоде.
#kotlin
Полезная статья, где автор рассматривает фичи Kotlin со стороны байткода.
Кроме этого, тут есть несколько полезных штук, которые также освещены:
👉 что такое Java Virtual Machine и её спецификация;
👉 почему фичи Java и Kotlin совместимы;
👉 как выглядят основные фичи Kotlin в байткоде.
👍6🤩1
KMM в Beta
#kmm
Отличные новости. Пару дней назад, команда Kotlin официально перевела KMM в Beta. А это значит, что теперь не будет фундаментальных изменений в самом фреймворке, ребята работают над улучшением стабильности текущих фич.
А тут ещё Google подоспел с официальным апдейтом некоторых мультиплатформенных Jetpack-библиотек, начали с Collections и DataStore, уверен, что скоро подоспеют и другие. Вдруг мы увидим мультиплатформенный Room 😁.
Ну а я очень верю в KMM и желаю команде успехов. 😉
#kmm
Отличные новости. Пару дней назад, команда Kotlin официально перевела KMM в Beta. А это значит, что теперь не будет фундаментальных изменений в самом фреймворке, ребята работают над улучшением стабильности текущих фич.
А тут ещё Google подоспел с официальным апдейтом некоторых мультиплатформенных Jetpack-библиотек, начали с Collections и DataStore, уверен, что скоро подоспеют и другие. Вдруг мы увидим мультиплатформенный Room 😁.
Ну а я очень верю в KMM и желаю команде успехов. 😉
🔥14👍3
А давайте опросик: будете использовать Kotlin Multiplatform Mobile?
Anonymous Poll
13%
Уже используем
10%
Будем в ближайшее время
14%
Подождём release
31%
Изучаем, но пока нет
33%
Не планируем
👌6❤1
Android Studio Shortcuts. Codebase
#новичкам #android
Очередной список рекомендаций, а точнее — список горячих клавиш, которые касаются быстрого перехода по кодовой базе.
Клавиши действительно полезные, и большинство из них вы будете использовать на практике.
Вот несколько из тех сочетаний, что описывает статья.
1️⃣ Cmd + Click — одно из наиболее полезных сочетаний. При клике на функцию, вы переходите на её объявление, а при клике на интерфейс — в реализацию интерфейса. Но не все знают, что очень удобно использовать это же сочетание для навигации в Dagger + Hilt.
2️⃣ Double Shift — ещё одно удобнейшее и распространённое сочетание клавиш. Попробуйте при поиске использовать Camel case search. Например, BLPaVM вернёт BlueLinePackingViewModel. А ещё — попробуйте ввести SignInFragment#42, и вы перейдёте на 42 строку фрагмента для авторизации.
3️⃣ Cmd + Shift + F — удобнейший быстрый поиск по вашей кодовой базе.
4️⃣ Cmd + L — быстрый переход на нужную вам строку кода в вашем проекте.
5️⃣ Cmd + E — показ последний файлов с которыми вы взаимодействовали.
Буду рад, если напишите свои любимые клавиши в комментариях. ☺️
#новичкам #android
Очередной список рекомендаций, а точнее — список горячих клавиш, которые касаются быстрого перехода по кодовой базе.
Клавиши действительно полезные, и большинство из них вы будете использовать на практике.
Вот несколько из тех сочетаний, что описывает статья.
1️⃣ Cmd + Click — одно из наиболее полезных сочетаний. При клике на функцию, вы переходите на её объявление, а при клике на интерфейс — в реализацию интерфейса. Но не все знают, что очень удобно использовать это же сочетание для навигации в Dagger + Hilt.
2️⃣ Double Shift — ещё одно удобнейшее и распространённое сочетание клавиш. Попробуйте при поиске использовать Camel case search. Например, BLPaVM вернёт BlueLinePackingViewModel. А ещё — попробуйте ввести SignInFragment#42, и вы перейдёте на 42 строку фрагмента для авторизации.
3️⃣ Cmd + Shift + F — удобнейший быстрый поиск по вашей кодовой базе.
4️⃣ Cmd + L — быстрый переход на нужную вам строку кода в вашем проекте.
5️⃣ Cmd + E — показ последний файлов с которыми вы взаимодействовали.
Буду рад, если напишите свои любимые клавиши в комментариях. ☺️
🔥9👍3
Как работает reified?
#kotlin
Kotlin предлагает множество крутых фичей, которые делают написание кода проще и удобнее. reified — одна из них, и так как подобная функция есть далеко не во всех языках программирования, то многие разработчики не совсем понимают, для чего им она нужна.
💡Давайте рассмотрим пару кейсов, когда мы можем сделать наш код чище и более "Kotlin-style".
С reified непосредственно связано понятие inline функций и использование generics. При их использовании может потребоваться знание того, какого типа класс мы используем. Рассмотрим пример маппинга json в нужный нам класс:
Чтобы исправить ошибку при компилировании, у нас есть две опции.
1️⃣ Передавать класс в параметрах. Тогда наша функция будет выглядеть так:
А её вызов будет таким:
2️⃣ Использовать reified. Тогда всё станет сильно удобнее и красивее:
А вызов будет таким:
Как мы видим, второй вариант выглядит гораздо более удобным для использования, хотя наш пример — довольно простая функция. В более сложных кейсах это преимущество может быть ещё заметнее.
Больше подробностей о reified можно найти в этой небольшой статье. 🤓
#kotlin
Kotlin предлагает множество крутых фичей, которые делают написание кода проще и удобнее. reified — одна из них, и так как подобная функция есть далеко не во всех языках программирования, то многие разработчики не совсем понимают, для чего им она нужна.
💡Давайте рассмотрим пару кейсов, когда мы можем сделать наш код чище и более "Kotlin-style".
С reified непосредственно связано понятие inline функций и использование generics. При их использовании может потребоваться знание того, какого типа класс мы используем. Рассмотрим пример маппинга json в нужный нам класс:
fun <T> String.toKotlinObject(): T {
val mapper = jacksonObjectMapper()
//does not compile!
return mapper.readValue(this, T::class.java)
}
Чтобы исправить ошибку при компилировании, у нас есть две опции.
1️⃣ Передавать класс в параметрах. Тогда наша функция будет выглядеть так:
fun <T: Any> String.toKotlinObject(c: KClass<T>): T {
val mapper = jacksonObjectMapper()
return mapper.readValue(this, c.java)
}
А её вызов будет таким:
jsonTypeAsString.toKotlinObject(MyJsonType::class)
.2️⃣ Использовать reified. Тогда всё станет сильно удобнее и красивее:
inline fun <reified T: Any> String.toKotlinObject(): T {
val mapper = jacksonObjectMapper()
return mapper.readValue(this, T::class.java)
}
А вызов будет таким:
json.toKotlinObject<MyJsonType>()
. Как мы видим, второй вариант выглядит гораздо более удобным для использования, хотя наш пример — довольно простая функция. В более сложных кейсах это преимущество может быть ещё заметнее.
Больше подробностей о reified можно найти в этой небольшой статье. 🤓
👍28👎1
Themed App Icons
#android
С релизом Android 13 у разработчиков появилась возможность обновить свои иконки, сделав их максимально похожими на ту тему, которая есть у пользователя в системе.
💡 Сейчас таких приложений довольно немного, а зря, ведь поддержку добавить довольно просто. Для этого необходимо прописать
Больше информации про иконки, про то, как сделать поддержку разных иконок приложения можно найти в этой статье.
#android
С релизом Android 13 у разработчиков появилась возможность обновить свои иконки, сделав их максимально похожими на ту тему, которая есть у пользователя в системе.
💡 Сейчас таких приложений довольно немного, а зря, ведь поддержку добавить довольно просто. Для этого необходимо прописать
monochrome
-атрибут в adaptive-icon
. Больше информации про иконки, про то, как сделать поддержку разных иконок приложения можно найти в этой статье.
👍12❤2🔥1
Play Console updates for app's delivery performance
#google #android
Недавняя статья, где Google рассказывает о неочевидных, но полезных разработчикам фичах, которые можно взять из Google Console. По большей степени они связаны с aab-форматом релиза.
1️⃣ Release delivery — при загрузке релиза вы можете увидеть примерный размер загружаемого приложения у пользователей, а также сравнение с предыдущим релизом.
2️⃣ Feature modules — если вы используете такие фичи, как Play Asset Delivery или Play Feature Delivery, то информацию о том, как они загружаются пользователями, можно увидеть на странице статистики.
3️⃣ Freshness — раздел статистики, который показываем вам, как быстро пользователи мигрируют с одного релиза на более новый. Если вдруг эта метрика слишком низкая, то можно использовать In-app updates API.
4️⃣ Детали по конкретному девайсу — можно определить, какой размер файла скачивается на конкретном устройстве.
Чуть больше фич, а также скриншотов можно найти непосредственно в статье.
#google #android
Недавняя статья, где Google рассказывает о неочевидных, но полезных разработчикам фичах, которые можно взять из Google Console. По большей степени они связаны с aab-форматом релиза.
1️⃣ Release delivery — при загрузке релиза вы можете увидеть примерный размер загружаемого приложения у пользователей, а также сравнение с предыдущим релизом.
2️⃣ Feature modules — если вы используете такие фичи, как Play Asset Delivery или Play Feature Delivery, то информацию о том, как они загружаются пользователями, можно увидеть на странице статистики.
3️⃣ Freshness — раздел статистики, который показываем вам, как быстро пользователи мигрируют с одного релиза на более новый. Если вдруг эта метрика слишком низкая, то можно использовать In-app updates API.
4️⃣ Детали по конкретному девайсу — можно определить, какой размер файла скачивается на конкретном устройстве.
Чуть больше фич, а также скриншотов можно найти непосредственно в статье.
👍4
Object expressions и declarations
#kotlin
Недавно обнаружил для себя несколько интересных применений object в Kotlin. Как ни странно, обо всех сказано в официальной документации, но на практике я не часто встречал их применение.
1️⃣Создание анонимного класса с нуля. Вдруг у вас будут кейсы (если подскажите, какие, то буду рад), когда вам необходимо создать объект с нуля без объявления класса. Вот пример:
А ещё можно сделать вот такие мудрёные конструкции:
2️⃣ Object как Singleton — довольно распространённый кейс, когда вы делаете аналог синглтона Java в Kotlin.
3️⃣ Data objects — экспериментальная, но любопытная фича, позволяющая делать так:
А посмотреть все применения Object можно как раз в статье. 🤓
#kotlin
Недавно обнаружил для себя несколько интересных применений object в Kotlin. Как ни странно, обо всех сказано в официальной документации, но на практике я не часто встречал их применение.
1️⃣Создание анонимного класса с нуля. Вдруг у вас будут кейсы (если подскажите, какие, то буду рад), когда вам необходимо создать объект с нуля без объявления класса. Вот пример:
val helloWorld = object {
val hello = "Hello"
val world = "World"
// object expressions extend Any, so override is required on toString()
override fun toString() = "$hello $world"
}
А ещё можно сделать вот такие мудрёные конструкции:
open class A(x: Int) {
public open val y: Int = x
}
interface B { /*...*/ }
val ab: A = object : A(1), B {
override val y = 15
}
2️⃣ Object как Singleton — довольно распространённый кейс, когда вы делаете аналог синглтона Java в Kotlin.
3️⃣ Data objects — экспериментальная, но любопытная фича, позволяющая делать так:
data object MyObject
fun main() {
println(MyObject) // MyObject
}
А посмотреть все применения Object можно как раз в статье. 🤓
👍12
Жизнь в Нидерландах 🇳🇱
#интервью #экспаты
На канале иногда выходят интервью с разработчиками, которые переехали жить и работать в другие страны. Сегодня у вас есть возможность задать свой вопросы про Нидерланды 🇳🇱.
Наш гость — Георгий Могелашвили — engineering manager в Shopify и основатель сервиса поиска наставников GetMentor.dev.
Георгий, переехал в Нидерланды из Москвы 8 лет назад, живет в Харлеме (Х, не Г), но до сих пор не выучил голландский язык. 🙂
Ваши вопросы вы можете задать тут, так что не упустите эту замечательную возможность. 🙃
#интервью #экспаты
На канале иногда выходят интервью с разработчиками, которые переехали жить и работать в другие страны. Сегодня у вас есть возможность задать свой вопросы про Нидерланды 🇳🇱.
Наш гость — Георгий Могелашвили — engineering manager в Shopify и основатель сервиса поиска наставников GetMentor.dev.
Георгий, переехал в Нидерланды из Москвы 8 лет назад, живет в Харлеме (Х, не Г), но до сих пор не выучил голландский язык. 🙂
Ваши вопросы вы можете задать тут, так что не упустите эту замечательную возможность. 🙃
🔥11💩8😁1
Android 13. Выбор кастомного языка
#android
Ребята из Google решили добавить одну из самых запрашиваемых (по их статистике, конечно) фичу — выбор отдельного языка для приложения.
То есть, если вы хотите, чтобы одно из ваших приложений было на английском языке, а при этом вся система была на русском, то в системных настройках приложения можно выбрать любой язык из списка. Звучит круто, потому что:
- не все приложения сейчас предоставляют выбор отдельного языка внутри приложения;
- не все приложения ставят дефолтным английский язык;
Для разработчиков всё не очень сложно. Надо будет добавить
Больше деталей о фиче можно взять тут.
#android
Ребята из Google решили добавить одну из самых запрашиваемых (по их статистике, конечно) фичу — выбор отдельного языка для приложения.
То есть, если вы хотите, чтобы одно из ваших приложений было на английском языке, а при этом вся система была на русском, то в системных настройках приложения можно выбрать любой язык из списка. Звучит круто, потому что:
- не все приложения сейчас предоставляют выбор отдельного языка внутри приложения;
- не все приложения ставят дефолтным английский язык;
Для разработчиков всё не очень сложно. Надо будет добавить
locale_config.xml
в приложение со списком поддерживаемых языков, обновить библиотеки androidx до последних версий и взять инфу о выбранном языке. Больше деталей о фиче можно взять тут.
👍18👎1
Прокачиваем build scripts
#android
Подробнейшая статья, в которой автор рассказывает о том, как лучше управлять зависимостями и скриптами в любых по размеру приложениях. Тут целый набор советов, можно взять все или только часть. Вот некоторые из них:
1️⃣ Version catalog — не все знают об этой фиче, но её можно использовать как отличный вариант для управления зависимостями проекта. Для неё нужно использовать специальный файл с расширением toml, где описать версии для каждой из зависимостей проекта.
Правда, пока плохо работают подсказки Android Studio об устаревших зависимостях, вероятно стоит подумать о плагине типа этого.
2️⃣ Android application plugin — тоже удобная штука, которая позволяет вынести повторяющиеся части gradle-файлов в один плагин и применить его к остальным модулям. Автор описывает пример с minSdk, compileSdk и т.д. в плагине, но вы можете вынести те части, которые нужны именно вам.
3️⃣ Kotlin plugin — описанные плагины можно писать на Kotlin с его плюшками, в статье тоже найдётся пара примеров, которые помогут в написании своих. 🤓
#android
Подробнейшая статья, в которой автор рассказывает о том, как лучше управлять зависимостями и скриптами в любых по размеру приложениях. Тут целый набор советов, можно взять все или только часть. Вот некоторые из них:
1️⃣ Version catalog — не все знают об этой фиче, но её можно использовать как отличный вариант для управления зависимостями проекта. Для неё нужно использовать специальный файл с расширением toml, где описать версии для каждой из зависимостей проекта.
Правда, пока плохо работают подсказки Android Studio об устаревших зависимостях, вероятно стоит подумать о плагине типа этого.
2️⃣ Android application plugin — тоже удобная штука, которая позволяет вынести повторяющиеся части gradle-файлов в один плагин и применить его к остальным модулям. Автор описывает пример с minSdk, compileSdk и т.д. в плагине, но вы можете вынести те части, которые нужны именно вам.
3️⃣ Kotlin plugin — описанные плагины можно писать на Kotlin с его плюшками, в статье тоже найдётся пара примеров, которые помогут в написании своих. 🤓
🔥8👍2😱1
Memory Safe Languages in Android 13
#android
Любопытная статистика от Google по использованию разных языков программирования в Android.
Говорят, что на протяжении последних десяти лет, 65% всех уязвимостей в Android и Chrome были связаны с безопасностью памяти.
В последнее время тенденция улучшается, ведь Google слезает с небезопасных по памяти языков, а 2022 год стал первым годом, когда основная доля уязвимостей была связана не с памятью.
Ещё с Android 12 есть поддержка Rust, как безопасная по памяти альтернатива C/C++, и есть довольно мощный скачок в его использовании в последних версиях Android.
Статья получилась объёмной, внутри много графиков и любопытных выводов, рекомендую почитать.
#android
Любопытная статистика от Google по использованию разных языков программирования в Android.
Говорят, что на протяжении последних десяти лет, 65% всех уязвимостей в Android и Chrome были связаны с безопасностью памяти.
В последнее время тенденция улучшается, ведь Google слезает с небезопасных по памяти языков, а 2022 год стал первым годом, когда основная доля уязвимостей была связана не с памятью.
Ещё с Android 12 есть поддержка Rust, как безопасная по памяти альтернатива C/C++, и есть довольно мощный скачок в его использовании в последних версиях Android.
Статья получилась объёмной, внутри много графиков и любопытных выводов, рекомендую почитать.
👍12
Как должен выглядеть идеальный PR?
#разработка
На днях попалась статья, которая рассказывает о том, как создать идеальный pull request.
Любопытно, что есть исследование, которое говорит о том, что идеальный PR должен содержать не более 250 строк кода: в больших PR сложно обнаружить ошибки, а также приходится тратить больше 1 часа для того, чтобы всё отсмотреть.
Также автор советует делать корректное описание и заголовок, из которого можно сразу понять, что было сделано в рамках данного PR.
От себя добавлю пару вещей, которые я использую в своих проектах:
👉 используйте черновики, если ваш код ещё не до конца готов для того, чтобы вливаться в основную ветку;
👉 делайте отдельный PR для незначительных, но объёмных изменений кода: автоматические миграции базы данных, иконки;
👉 выделите отдельное время (на практике понял, что самое лучшее — перед началом работы) для просмотра PR ваших коллег.
А если вы ещё накините идей, как сделать процесс просмотра реквестов ещё лучше, то буду только рад. 🤓
#разработка
На днях попалась статья, которая рассказывает о том, как создать идеальный pull request.
Любопытно, что есть исследование, которое говорит о том, что идеальный PR должен содержать не более 250 строк кода: в больших PR сложно обнаружить ошибки, а также приходится тратить больше 1 часа для того, чтобы всё отсмотреть.
Также автор советует делать корректное описание и заголовок, из которого можно сразу понять, что было сделано в рамках данного PR.
От себя добавлю пару вещей, которые я использую в своих проектах:
👉 используйте черновики, если ваш код ещё не до конца готов для того, чтобы вливаться в основную ветку;
👉 делайте отдельный PR для незначительных, но объёмных изменений кода: автоматические миграции базы данных, иконки;
👉 выделите отдельное время (на практике понял, что самое лучшее — перед началом работы) для просмотра PR ваших коллег.
А если вы ещё накините идей, как сделать процесс просмотра реквестов ещё лучше, то буду только рад. 🤓
👍13🔥1
Intellij Scratch File
#разработка #android
Далеко не все знают об этой крутейшей фиче Android Studio.
Частенько бывают кейсы, когда необходимо быстро проверить, как работает кусок вновь написанного кода. Если этот код не связан с UI-логикой, то приходится или подключать debug, или же добавлять логгирование на те состояния, которые вы ходите проверить.
Ещё более хардкорный и неудобный способ, которым мало кто пользуется — это открыть параллельно ещё одну среду разработки, где в консоли быстро верифицировать написанную функцию.
Но есть ещё один способ, гораздо более удобный — это использовать Intellij’s Scratch File. По сути, это небольшая live-IDE внутри Android Studio, которая будет выполнять написанный вами код по мере его добавления.
Чтобы добавить новый scratch-файл, надо нажать ⇧ ⌘ N (на macOS) или Ctrl+Alt+Shift+Insert на Windows. А ещё есть поддержка нескольких языков плюс к основному: HTML, Java, JavaScript, SQL, YAML.
В общем, невероятно полезная фича о которой совсем все забыли, а напрасно. Вот тут чуть больше информации, а также демо того, как всё работает.
#разработка #android
Далеко не все знают об этой крутейшей фиче Android Studio.
Частенько бывают кейсы, когда необходимо быстро проверить, как работает кусок вновь написанного кода. Если этот код не связан с UI-логикой, то приходится или подключать debug, или же добавлять логгирование на те состояния, которые вы ходите проверить.
Ещё более хардкорный и неудобный способ, которым мало кто пользуется — это открыть параллельно ещё одну среду разработки, где в консоли быстро верифицировать написанную функцию.
Но есть ещё один способ, гораздо более удобный — это использовать Intellij’s Scratch File. По сути, это небольшая live-IDE внутри Android Studio, которая будет выполнять написанный вами код по мере его добавления.
Чтобы добавить новый scratch-файл, надо нажать ⇧ ⌘ N (на macOS) или Ctrl+Alt+Shift+Insert на Windows. А ещё есть поддержка нескольких языков плюс к основному: HTML, Java, JavaScript, SQL, YAML.
В общем, невероятно полезная фича о которой совсем все забыли, а напрасно. Вот тут чуть больше информации, а также демо того, как всё работает.
🔥14👍6🥰1
SlackComposeMultiplatform
#multiplatform
Если вы вдруг уже соскучились по интересным проектам во время долгих новогодних праздников, то вот вам один для разогрева.
Попался проект, где автор решил сделать клон Slack на Kotlin Multiplatform для Android, iOS и Desktop и вроде как у него получилось. Результат, в целом, не production ready, но посмотреть на пример с точки зрения стека и технологий однозначно стоит.
Ссылка на проект тут.
Будет здорово, если поделитесь ещё интересными проектами на Kotlin Multiplatform.
#multiplatform
Если вы вдруг уже соскучились по интересным проектам во время долгих новогодних праздников, то вот вам один для разогрева.
Попался проект, где автор решил сделать клон Slack на Kotlin Multiplatform для Android, iOS и Desktop и вроде как у него получилось. Результат, в целом, не production ready, но посмотреть на пример с точки зрения стека и технологий однозначно стоит.
Ссылка на проект тут.
Будет здорово, если поделитесь ещё интересными проектами на Kotlin Multiplatform.
👍12🔥3
Для чего можно использовать ChatGPT?
#development #android
Кажется, в конце года каждый только и говорил о том, что нейронные сети вытеснят современные профессии, а в частности нас – разработчиков.
И действительно, ChatGPT показывает классный результат и есть примеры, когда всего за несколько вопросов получилось написать простое приложение под Android.
Можно долго спорить, заменят ли разработчиков нейронки, или нет, но ясно одно: это крутой инструмент, который не стоит игнорировать, и важно стараться использовать его уже сейчас. Вот классная статья, где автор, с высоты своего весьма ощутимого опыта в программировании, описывает что еще можно делать при помощи ChatGPT уже сейчас:
1️⃣ Explaining code — можно взять часть кода, который вы бы хотели больше понять и попросить ChatGPT его объяснить.
2️⃣ Improve existing code — можно попробовать попросить улучшить уже существующий код, давая подсказки AI, что в нём сейчас не так.
3️⃣ Simplifying code — нейронка также можем помочь упростить уже существующий код.
4️⃣ Exploring alternatives — автор описывает случай, когда ChatGPT предложил лучшую сортировку для его кейса.
Ну и ещё 5 кейсов можно взять в статье.
#development #android
Кажется, в конце года каждый только и говорил о том, что нейронные сети вытеснят современные профессии, а в частности нас – разработчиков.
И действительно, ChatGPT показывает классный результат и есть примеры, когда всего за несколько вопросов получилось написать простое приложение под Android.
Можно долго спорить, заменят ли разработчиков нейронки, или нет, но ясно одно: это крутой инструмент, который не стоит игнорировать, и важно стараться использовать его уже сейчас. Вот классная статья, где автор, с высоты своего весьма ощутимого опыта в программировании, описывает что еще можно делать при помощи ChatGPT уже сейчас:
1️⃣ Explaining code — можно взять часть кода, который вы бы хотели больше понять и попросить ChatGPT его объяснить.
2️⃣ Improve existing code — можно попробовать попросить улучшить уже существующий код, давая подсказки AI, что в нём сейчас не так.
3️⃣ Simplifying code — нейронка также можем помочь упростить уже существующий код.
4️⃣ Exploring alternatives — автор описывает случай, когда ChatGPT предложил лучшую сортировку для его кейса.
Ну и ещё 5 кейсов можно взять в статье.
👍15
Заменят ли разработчиков AI? 🦾
Anonymous Poll
15%
Да, ещё немного докрутить и большую часть разработчиков заменит
85%
Нет, будет использоваться разработчиками как дополнительный инструмент