Создаём игру для Android через Unity за 45 минут!
Это видео — пошаговая инструкция по созданию игры, смотрите и повторяйте! Вместе с автором видео вы начнёте с пустого проекта, а закончите полноценным приложением (apk-файлом), которое сможете опубликовать в Google Play.
Перейти к просмотру
#unity#apk#android
🏝Kotlin where: Элегантное ограничение типов для чистоты и безопасности
Как часто в Android-разработке вы видели сомнительные as-приведения? 🤔
Вот пример, который недавно попался мне на глаза:
class Sample(private val activity: Activity) {
fun doSomething() {
// Опасно! Может упасть с ClassCastException,
// если activity не реализует LifecycleOwner
(activity as LifecycleOwner).lifecycle.addObserver(...)
}
}
Опустим тот факт, что здесь стоит использовать слабую ссылку (WeakReference) на Activity. Меня больше смутила необходимость вручную приводить Activity к LifecycleOwner.
Да, в современной Android-разработке AppCompatActivity и FragmentActivity реализуют этот интерфейс. Но наша цель — писать чистый и стабильный код, который не полагается на слепую веру, а гарантирует безопасность на уровне типов.
💡Решение: Ограничение типов с помощью where
В Kotlin мы можем использовать условие where для универсальных параметров, чтобы указать: «класс A должен быть одновременно и Activity, и LifecycleOwner
class Sample<A>(private val activity: A)
where A : Activity,
A : LifecycleOwner {
fun doSomething() {
// Теперь activity можно использовать как LifecycleOwner
// БЕЗОПАСНО и без приведения типов
activity.lifecycle.addObserver(...)
}
}
Этот же подход отлично работает и для функций:
fun <A> doSomethingWith(activity: A)
where A : Activity,
A : LifecycleOwner {
// Полная типобезопасность
activity.lifecycle.addObserver(...)
}
В чем выигрыш?
Безопасность: Компилятор гарантирует, что в класс Sample или функцию doSomethingWith можно передать только объект, который удовлетворяет обоим условиям:
1️⃣Исключаются ошибки ClassCastException в рантайме.
2️⃣Чистота кода: Исчезают громоздкие и опасные приведения через as.
3️⃣Выразительность: Сигнатура класса/функции явно сообщает о своих требованиях к переданным зависимостям.
Используйте силу системы типов Kotlin на полную! Это делает код не только чище, но и стабильнее. 💪
#kotlin#android#androiddev
🔨Обновление зависимостей через Gemini в Android Studio🤯. Помимо выставление новой версии Gemini итеративно внесёт изменения в код для корректной работы после обновления
#android#gemini#androidstudio
🔨Вышла первая Canary версия Android Studio Meerkat Feature Drop 2024.3.2
👉 Появилась библиотека с запросами для Gemini
👉 Добавили возможность тестировать
Android Backup and Restore. Собираете Backup на одном устройстве и проверяете восстановление на другом. Работает с физическими устройствами и эмуляторами, но надо чтобы были Google Play Services
#android#androidstudio#gemini