readline4k - Kotlin/Native библиотека для разработки консольных интерактивных приложений для Desktop
#kotlin #native #cli
val history = "history.txt" // Filesystem path to the history file.
// Configure the LineEditor.
val config = LineEditorConfig(
maxHistorySize = 100,
completionType = CompletionType.LIST,
// See the documentation for more options.
)
// Create a new LineEditor instance.
val editor = SimpleLineEditor(
linePrefix = "> ",
config = config,
).also { editor ->
// Set up the completer and highlighter.
editor
// Provides file completion (optional).
.withCompleter(SimpleFileCompleter())
// Provides color highlighting (optional).
.withHighlighter(SimpleHighlighter())
// Load the history from the disk (throws LineEditorError if it fails).
editor.loadHistory(history).getOrThrow()
}
println("Welcome to the LineEditor example!")
println("Press Ctrl+C to exit")
while (true) {
// Read a line from the user.
editor.readLine()
.onFailure { err ->
// err is a LineEditorError
println(err.message)
break
}
.onSuccess { line ->
// We can also add the line to the history
// automatically by setting autoAddHistory = true in the config.
editor.addHistoryEntry(line)
println(line)
}
}
// Save the history to disk.
editor.saveHistory(history)
#kotlin #native #cli
👍25
Google анонсировала официальный Gradle-плагин com.android.kotlin.multiplatform.library для настройки Android-таргета в Kotlin Multiplatform (KMP). Это станет стандартом для будущей разработки KMP-библиотек.
➡️ Зачем нужен отдельный плагин?
🛠 Простота конфигурации: Упрощение настройки KMP-проектов под Android в Gradle.
⚖️ Чем отличается от обычного com.android.library?
Новый плагин заточен именно под библиотеки и лишён избыточных функций:
❌ Нет поддержки множественных вариантов сборки (productFlavors)
❌ Нет поддержки C/C++, AIDL, RenderScript
❌ Нет встроенных возможностей View Binding, Data Binding
❌ Тесты и Android-ресурсы отключены по умолчанию
❌ Компиляция Java отключена по умолчанию (но есть опция включения)
// Пример конфигурации в Gradle Kotlin DSL
plugins {
alias(libs.plugins.kotlin.multiplatform) // Kotlin 2.0+
alias(libs.plugins.android.kotlin.multiplatform.library) // AGP 8.10+
}
// Такого DSL больше не будет для Android KMP библиотеки
android {}
kotlin {
androidLibrary {
namespace = "dev.androidbroadcast.kmplib"
compileSdk = 36
minSdk = 24
enableAndroidResources = true // Включение ресурсов
withJava() // Включение Java
// Настройка тестов для хоста (JVM)
withHostTestBuilder { }
// Настройка инструментальных тестов на устройстве
withDeviceTestBuilder {
sourceSetTreeName = "test"
}
compilations.configureEach {
compilerOptions.configure {
jvmTarget.set(JvmTarget.JVM_21)
}
}
}
sourceSets {
androidMain { ... }
androidHostTest { ... }
androidDeviceTest { ... }
}
}
💬 Что думаете о новом плагине? Уже успели попробовать? Делитесь мнением в комментариях!
#android #kmp #kotlin #gradle #news
Please open Telegram to view this post
VIEW IN TELEGRAM
🏆29🎉10👍8🤔3
Что нового:
👉 Улучшили определение перегрузок методов с suspend лямбдами
👉 Kotlin-to-Swift export доступен по умолчанию
👉 Шаринг кода между JS и wasmJS таргетами
👉 Стабильная кроссплатформенная компиляция для Kotlin библиотек
👉 Таргет Kotlin/WASM перешел в статус Beta
👉 Kotlin/Native: Поддержка stack canaries в бинарних для меньшего размера итого бинарнки
👉 Прокачали возможности Kotlin Contracts: поддержка Generic, возможность использования в get/set функция property, новые контракты
Много всего полезного, буду рассказывать отдельно по мере изучения
#kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
❤23👍8
embedAndSignAppleFrameworkForXcode -> embedSwiftExportForXcode./gradlew :<Shared module>:embedSwiftExportForXcode
Флаг
kotlin.experimental.swift-export.enabled можно удалить из gradle.properties, потому что c версии Kotlin 2.2.20 фича включена по умолчанию#kotlin #xcode #swift #kmp
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥25👍6❤1
Forwarded from Compose Broadcast
Подкючайте артефакт
org.jetbrains.androidx.navigation3:navigation3-ui:1.0.0-alpha01 в common код и можете пробоватьЖдем актуализации до свежей альфа версии, а также адаптивные layout и интеграцию с ViewModel
#compose #kmp #naviation #jetpack
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥40👍7🤔4
Forwarded from Android Broadcast
This media is not supported in your browser
VIEW IN TELEGRAM
❤43🔥16👍5
Ktor Framework
WhatsNew 3.3
Kotlin Server and Client Framework for microservices, HTTP APIs, and RESTful services
#kotlin #ktor
Please open Telegram to view this post
VIEW IN TELEGRAM
👍30❤2🙏1
SqlDelight AndroidX Driver - реаилзация драйвера для SqlDelight, который построен на основе библиотеки androidx.sqlite из Jetpack
#android #kmp #sqlite
Database(
AndroidxSqliteDriver(
driver = BundledSQLiteDriver(),
type = AndroidxSqliteDatabaseType.File("<path to db file>"),
schema = Database.Schema,
)
)
#android #kmp #sqlite
❤12👍6
Media is too big
VIEW IN TELEGRAM
Простая и понятная демонстрация как сделать своего AI агента, используя фреймворк Koog от JetBrains.
#kotlin #ai
Please open Telegram to view this post
VIEW IN TELEGRAM
❤19👍12🔥2
enum class UserRole { ADMIN, MEMBER, GUEST }
fun getPermissionLevel(role: UserRole): Int {
// Проверяем один кейс из Enum до работы с when
if (role == UserRole.ADMIN) return 99
return when (role) {
UserRole.MEMBER -> 10
UserRole.GUEST -> 1
// С Kotlin 2.2.20 не надо добавлять else,
// так как кейс уже был проверен выше
// else -> throw IllegalStateException()
}
}Фича экспериментальная и требует включения через опции
#kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍68🔥26🤔16❤1
Разработчик демонстрирует как из KMP кода вызывать API из macOS на примере реализации синхронизации данных через iCloud. Всё сводится к тому,
#kotlin #macos
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🤯6❤3
Также обновили панель "Koin Конфигурация", чтобы проще отыскать ошибки в настройке. Также стала проще навигация и появилась группировка по модулям.
🛠 Конечно же, внесли улучшения в скорость работы и исправили баги.
#kotlin #koin #di
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤25🤔8👍2🤯1
💡 Знаете ли вы, что Kotlin Multiplatform позволяет использовать до 70% 99% общего кода между Android и iOS?
Это значит — быстрее выпускать продукт, меньше багов и проще поддерживать проект.
📘 Книга «Kotlin Multiplatform на практике» Анны Жарковой — именно тот гид, который проведёт вас от первых шагов до уверенной разработки полнофункциональных кросс-платформенных приложений.
Здесь собраны реальные примеры, архитектурные решения, приёмы работы с общим и нативным кодом, многопоточностью, сетью, хранением данных и Compose Multiplatform для iOS.
🔥 Вы научитесь мигрировать нативные проекты, тестировать с Kotest, ускорять разработку с KSP и ИИ-ассистентами, а также создавать и публиковать собственные KMP-библиотеки. В книге есть и краткий справочник по Kotlin и Swift — чтобы уверенно чувствовать себя в обеих экосистемах.
🎯 Для Android- и iOS-разработчиков, которые хотят выйти на новый уровень.
👉 По промокоду
#реклама
Это значит — быстрее выпускать продукт, меньше багов и проще поддерживать проект.
📘 Книга «Kotlin Multiplatform на практике» Анны Жарковой — именно тот гид, который проведёт вас от первых шагов до уверенной разработки полнофункциональных кросс-платформенных приложений.
Здесь собраны реальные примеры, архитектурные решения, приёмы работы с общим и нативным кодом, многопоточностью, сетью, хранением данных и Compose Multiplatform для iOS.
🎯 Для Android- и iOS-разработчиков, которые хотят выйти на новый уровень.
👉 По промокоду
broadcast — скидка 5%#реклама
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥53🤔17👍6❤1
Иногда в проектах встречаю код:
class Sample(
val value1: Type1?,
val value2: Type2?,
) {
init {
require(
(value1 != null && value2 != null) ||
(value1 == null && value2 == null)
}
}
Минус такого подхода - проверка сработает только в рантайме, а на уровне написания кода легко допустить ошибку и лучше избежать ошибки.
class Sample private constructor(
val value1: Type1?,
val value2: Type2?,
) {
constructor(value1: Type1, value2: Type2): this(value1 as Type1?, value2 as Type2?)
constructor(): this(value1 = null, value2 = null)
}
#kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍28❤5🤔3
❗️ Все новые функции пока экспериментальные — их использование требует аннотаций или специальных флагов компилятора.
val Any.isHelloString: Boolean
get() {
contract { returns(true) implies (this@isHelloString is String) }
return "hello" == this
}
fun decode(encoded: String?): String? {
contract { (encoded != null) implies (returnsNotNull()) }
if (encoded == null) return null
return java.net.URLDecoder.decode(encoded, "UTF-8")
}Документация
fun <T> T.alsoIf(
condition: Boolean,
block: (T) -> Unit,
): T {
contract {
// Объявляет, что лямбда будет вызвана не более одного раза
callsInPlace(block, InvocationKind.AT_MOST_ONCE)
// Объявляет, что условие считается истинным внутри лямбды
condition holdsIn block
}
if (condition) block(this)
return this
}
fun <T, F : Failure> Result<T, F>.isHttpError(): Boolean {
contract {
returns(true) implies (this@isHttpError is Result.Failed<Failure.HttpError>)
}
return this is Result.Failed && this.failure is Failure.HttpError
}✨ Зачем это нужно
Контракты помогают компилятору и IDE лучше понимать поведение функций и условий в коде. Это значит: меньше лишних !!, меньше кастов типов, больше подсказок от IDE и меньше багов на рантайме. По сути, вы даёте компилятору «дополнительные знания», и он становится умнее при анализе вашего кода.
#kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍47🔥9
Forwarded from Android Broadcast
🔥 Вышел JUnit 6 с поддержкой Kotlin
Прошло более 8 лет с релиза JUnit 5 (10 сентября 2017 года) и вот новая мажорная версия популярного фреймворка для написания Unit тестов в Java
Ключевые изменения в новой версии:
👉 Поддержка Java 17 и Kotlin 2.2+
👉 Переход на аннотации JSpecify
🏝 Поддержка корутин из Kotlin
👉 Поддержка Java Flight Recorder (JFR) из коробки
👉 Поддержка отмены выполнения теста
👉 Удалено deprecated API
👉
#тестирование #kotlin
Прошло более 8 лет с релиза JUnit 5 (10 сентября 2017 года) и вот новая мажорная версия популярного фреймворка для написания Unit тестов в Java
Ключевые изменения в новой версии:
👉 Поддержка Java 17 и Kotlin 2.2+
👉 Переход на аннотации JSpecify
👉 Поддержка Java Flight Recorder (JFR) из коробки
👉 Поддержка отмены выполнения теста
👉 Удалено deprecated API
👉
--fail-fast режим для запуска тестов из терминала#тестирование #kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥43👍7