Media is too big
VIEW IN TELEGRAM
Что нового:
👉 Исправление работы с XCode 16.3
🛠 Исправление багов
#kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👉 Очень много улучшений для PostgreSql
👉 Поддержка WASM/JS
🛠 Множество исправлений и улучшений
#kotlin #kmp #sqlite #k2
Please open Telegram to view this post
VIEW IN TELEGRAM
Подробнее можно почитать в статье (РУ, 5м)
// пример использования библиотеки
class SuspendSettingsApi(private val intSettingsMap: MutableMap<String, Int>) {
val suspendMutableKrate: SuspendMutableKrate<Int> = DefaultSuspendMutableKrate(
factory = { 0 },
loader = { intSettingsMap["INT_KEY"] },
saver = { value -> intSettingsMap["INT_KEY"] = value }
)
val stateFlowSuspendMutableKrate: StateFlowSuspendMutableKrate<Int> = DefaultStateFlowSuspendMutableKrate(
factory = { 0 },
loader = { intSettingsMap["INT_KEY"] },
saver = { value -> intSettingsMap["INT_KEY"] = value }
)
}
#kotlin #kmp
Please open Telegram to view this post
VIEW IN TELEGRAM
JetBrains ранее отказалась от разработки отдельной IDE для Kotlin Multiplatform и активного расширения возможностей KMP во Fleet в пользу улучшения поддержки в уже привычных для разработчиков продуктах
Вышла версия KMP плагина 0.9.0 в которой появилась новые возможности
🪄 Новый визард для создания нового проекта: поддержка всех таргетов, настройки использования Compose или нативного UI
💊 Проверка настройка окружения на компьютере: фактически интегрировали KDoctor.
Для использование фичей нужны самые свежие версии IDE, а то и вовсе Canary версия Android Studio. Уже сейчас доступна версия плагина 0.9 и ждем Stable
#kotlin #kmp #androidstudio #idea #compose
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Команда плагина будет работать над улучшениями инструментов для KMP разработки
💻 Поддержка Windows и Linux: появится возможность использования KMP плаигна на Windows и Linux, но запуск iOS приложений останется пререгативой macOS
🦢 Расширенная поддержка Swift: текущий плагин имеет базовую поддержку Swift, но будет добавляться поддержка фичей сложнее: поиск использований, навигации по иерархии типов и др.
🏝 Создание KMP модулей в проекте: создание KMP модулей с использованием стандартного KMP визарда
🛠 Лучшая поддержка инструментов для Web и Desktop: после стабилизации поддержки мобильных платформ, будет фокус на улучшение поддержки таргетов Web и Desktop.
#kotlin #kmp #idea #androidstudio
💻 Поддержка Windows и Linux: появится возможность использования KMP плаигна на Windows и Linux, но запуск iOS приложений останется пререгативой macOS
🛠 Лучшая поддержка инструментов для Web и Desktop: после стабилизации поддержки мобильных платформ, будет фокус на улучшение поддержки таргетов Web и Desktop.
#kotlin #kmp #idea #androidstudio
Please open Telegram to view this post
VIEW IN TELEGRAM
Что нового:
👉 Добавлена возможность настройки некоторых аннотаций с параметрами таким же образом как и без параметров
👉 Добавили свойство для предотвращения ошибки при использовании ktlint-intellij-plugin
🛠 Исправление ошибок
⬆️ Обновлений версий зависимостей
#kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
Показали новую версию Amper с поддержкой iOS в KMP в standalone версии (без Gradle под капотом). Ранее в KMP были Android и Desktop.
#kotlin #amper #ios
#kotlin #amper #ios
val agent = simpleSingleRunAgent(
executor = simpleOpenAIExecutor(apiKey),
systemPrompt = "Answer user questions concisely.",
llmModel = OpenAIModels.Chat.GPT4o
)
val result = agent.runAndGetResult("Hello! How can you help me?")
println(result)
Подробнее читайте в документации
#kotlin #ai
Please open Telegram to view this post
VIEW IN TELEGRAM
KSensor - KMP библиотека для работы с сенсорами на Android и iOS. Поддерживает акселерометр, гироскоп. магнитометр, барометр, счетчик шагов, местоположение
#kotlin #kmp #android #ios
val sensors = listof(
SensorType.ACCELEROMETER,
SensorType.GYROSCOPE,
SensorType.MAGNETOMETER,
SensorType.BAROMETER,
SensorType.STEP_COUNTER,
SensorType.LOCATION,
)
// Register sensors
KSensor.registerSensors(
types = sensors,
locationIntervalMillis = {optional. default is 1000L},
onSensorData = { type, data ->
println("Sensor: $type - Data: $data")
},
onSensorError = { error ->
println("Sensor error: ${error.message}")
}
)
// Unregister sensors when no longer needed
KSensor.unregisterSensors(sensors)
#kotlin #kmp #android #ios
Самый простой способ подключения - через Gradle плагин
#kotlin #coroutines
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 Функции check() и require() в Kotlin — когда и зачем использовать?
В Kotlin Standard Library есть две полезные функции, которые помогают явно выражать условия выполнения кода:
✅ require() — используется для проверки аргументов функции.
✅ check() — используется для проверки внутреннего состояния объекта или логики приложения.
Эти функции выбрасывают исключения, если указанное условие не выполняется:
👉 require() выбрасывает IllegalArgumentException
👉 check() выбрасывает IllegalStateException
📌 Примеры применения:
Важный плюс использования check() и require() — это контракты Kotlin, благодаря которым компилятор лучше понимает состояние переменных после проверки и помогает избежать лишних проверок и ошибок.
Например:
⚠️ Хорошо ли специально выбрасывать исключения?
Выбрасывать исключения — это нормально и полезно, когда приложение попадает в ситуацию, которая явно нарушает его логику. Это помогает выявлять ошибки на ранних стадиях и делать код чище и надежнее. Однако не стоит использовать исключения для управления нормальным потоком программы. Исключения предназначены именно для «исключительных» ситуаций, а не для стандартного поведения.
Считаете ли вы нормальным выбросить исключение или лучше другим путем обработать ошибку? Делитесь в комментариях
#kotlin #stdlib
В Kotlin Standard Library есть две полезные функции, которые помогают явно выражать условия выполнения кода:
✅ require() — используется для проверки аргументов функции.
✅ check() — используется для проверки внутреннего состояния объекта или логики приложения.
Эти функции выбрасывают исключения, если указанное условие не выполняется:
👉 require() выбрасывает IllegalArgumentException
👉 check() выбрасывает IllegalStateException
📌 Примеры применения:
// require() для проверки входных аргументов:
fun calculateArea(width: Int, height: Int): Int {
require(width > 0 && height > 0) {
"Width and height must be positive!"
}
return width * height
}
// check() для контроля состояния внутри объекта:
class Connection {
var isConnected: Boolean = false
fun send(data: String) {
check(isConnected) {
"Cannot send data: not connected!"
}
// отправка данных
}
}
Важный плюс использования check() и require() — это контракты Kotlin, благодаря которым компилятор лучше понимает состояние переменных после проверки и помогает избежать лишних проверок и ошибок.
Например:
val data: String? = getData()
checkNotNull(data) {
"Data must not be null!"
}
// Теперь компилятору гарантировано data != null
println(data.length)
⚠️ Хорошо ли специально выбрасывать исключения?
Выбрасывать исключения — это нормально и полезно, когда приложение попадает в ситуацию, которая явно нарушает его логику. Это помогает выявлять ошибки на ранних стадиях и делать код чище и надежнее. Однако не стоит использовать исключения для управления нормальным потоком программы. Исключения предназначены именно для «исключительных» ситуаций, а не для стандартного поведения.
Считаете ли вы нормальным выбросить исключение или лучше другим путем обработать ошибку? Делитесь в комментариях
#kotlin #stdlib
Media is too big
VIEW IN TELEGRAM
Dispatchers.Default
или Dispatchers.IO
Александр Таганов проделал крутую работу и его кейс позволит ускорить ваши приложения!
Также можно посмотреть на
00:00 - Про доклад
02:44 - Долгое ожидание простых операций
12:59 - Разбор причины долгих загрузок
21:30 - Выводы после анализа
24:35 - На что стоит заменить Dispatchers.Main
27:50 - Тестирование разных Dispatcher
#kotlin #coroutines #android
Please open Telegram to view this post
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
0:00 Вступление
0:30 Positional Destructing (есть)
1:09 Named-based destructing (новая)
1:51 Nullability: Safety and ergonomics
3:00 Error class/object (новая)
4:07 Must-use Return Values (новая)
#kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
Что нового:
👉 Упростили конфигурацию
👉 Улучшили работу со Scope. Дообавили архитипы для Scope
👉 ViewModel Scope интегрировали с механизмом ViewModel auto closable
👉 Появилась возможность проверки конфигурации через через тесты
👉 Поддержка Compose 1.8 и Lifecycle 2.9
👉 Поддеркжа Ktor 3.2
🔗 Альтернативная ссылка
#kotlin #di
Please open Telegram to view this post
VIEW IN TELEGRAM