Kotlin Multiplatform Broadcast
9.48K subscribers
833 photos
53 videos
1.12K links
Новости и фичи Kotlin, а также Kotlin Multiplatform

YouTubе канал: https://youtube.com/androidBroadcast
Compose Multiplatform @compose_broadcast
iOS разработка @ios_broadcast
Новости Android @android_broadcast
Реклама и прочее @android_broadcast_bot
Download Telegram
DSL type-safe builders

Разбор что такое Domain Specific Language (DSL) и как реализовать его с помощью Kotlin
👍16👎2
Forwarded from Kotlin Multiplatform (Kostya)
Зарелизили Kotlin Multiplatform Mobile плагин 0.3.4 для Android Studio!
🚀 Android приложение теперь на Compose
🤌 Билд скрипты переехали на plugins блок
🧑‍💻 Исправили досадный баг с ран кофигурациями на М1
🤠 Выпустили версию для Canary AS
😊 И много прочих улучшений
👍19🔥5👎2
Kotlin Multiplatform Broadcast
Где нельзя расположить подклассы sealed класса (Kotlin 1.7)?
Правильный ответ: "В Gradle модуле, где объявлен sealed класс"

Sealed class - это класс с ограниченной иерархией наследования, подклассы которого известны заранее и других быть не может. Поэтому нужны ограничения на определение подклассов. Изначально подклассы могли располагаться в теле sealed класса или в том же файле где описан sealed класс. В Kotlin 1.5 места объявления подклассов были расширены и добавили возможность объявлять их в одном пакете с sealed классом.

Важно! Иерархия директорий в сырцах в Kotlin не связана с пакетами, поэтому в любом месте сырцов можно определить подкласс sealed класса, главное указать нужный пакет.
👍60🔥9👎6🥰2
Какую конструкцию нельзя объявить в Kotlin?
Final Results
1%
val a: String = b
84%
val a: String! = b
12%
val a: String = b!!
3%
val a: String? = b
👍26🤔22👎4👏3
Forwarded from Android Broadcast (Кирилл Розов)
Советы по использованию программирования "Code With Me" что прокачать ваши Kotlin навыки

Разбор различных сценариев использования Code With Me для парного программирования в обучении и менторинге

📺 Видео версия (1 час)
👎10
Kotlin Multiplatform Broadcast
Какую конструкцию нельзя объявить в Kotlin?
Правильный ответ "val a: String! = b"

Помимо Nullable (?) и Non-Nullable типов в Kotlin есть специальный тип - Platform Type (!). Он предназначен для типа который приходит из другого языка и невозможно определить Nullable и Non-Nullable (например, нет аннотацией с пометкой про nullability). Переменную такого типа можно только получить, но объявить нельзя. С переменной такого типа можно работать как с Nullable и Non-Nullable типом и компилятор не будет предупреждать вас.

Цель типа - обеспечить совместимость с кодом на другом языке.

Рекомендация - при получение такого типа и сохранение его в переменную обязательно явно указывайте тип переменной, чтобы не полагаться на механизм работы с null как в Java.

👉 Nullable types and non-null types
👉 Null-safety and platform types
👍57🔥101👏1
Design of Kotlin Coroutines (15 мин)

👉 Разбор того как работают корутины под капотом
👉 Чем suspend функции отличаются от обычных
👉 Continuation Passing Style
👉 State машина корутины

#coroutines
15👍5🤔4
Почему исключения в Kotlin Coroutines это сложно и как с этим жить?

Обработать ошибку в корутинах не так очевидно и просто порой как это описывают авторы. В статье разбираются
👉 разные примеры запуска корутин и обработка ошибок в них
👉 что будет происходить из-за structured concurrency
👉 CoroutineExceptionHandler
👉 Ключевые особенности обработки
🔥25🤔31👍1
Какого ключевого слово нету в Kotlin?
Anonymous Poll
16%
typeof
7%
typealias
39%
alias
38%
dynamic
💯12👍8🤔4🤯2
Kotlin Multiplatform Broadcast
Какого ключевого слово нету в Kotlin?
Правильный ответ - alias

typeof - ключевое слово, зарезервированное на будущее
typealias - используется для объявления алиасов типов
alias - я выдумал
dynamic - используется в Kotlin/JS. Поэтому многие могли и решить что его нет

Все актуальные ключевые слова
здесь
👍60🎉4👏1
Объект коллекции, созданный этим способом в Kotlin/JVM 1.7.10, можно модифицировать
Anonymous Poll
22%
emptyList<Int>()
7%
listOf<Int>()
1%
listOf(1)
5%
listOf(1, 2)
65%
Правильного ответа нет
👍10👌4
Kotlin Multiplatform Broadcast
Объект коллекции, созданный этим способом в Kotlin/JVM 1.7.10, можно модифицировать
Правильный ответ - "Правильного ответа нет"

👉 emptyList() создаст коллекцию через Collections.emptyList()
👉 listOf() вызовет emptyList()
👉 listOf(1) использует Collections.singletoneList()
👉 listOf(1, 2) использует конвертацию массива в коллекцию с помощью Arrays.asList()

Все эти коллекции являются неизменяемыми и при попытке любой операции модификации (добавление, удаление, замена) будет ошибка UnsupportedOperationException, за исключением Arrays$ArrayList, который разрешает операцию замены элемента (аналогично как поведение массива)
🔥50👍13🎉2🤔1
How to pause a coroutine (3 мин)

Автор делится специальным Dispatcher, который позволит вам остановить корутину в любой момент

#coroutines
🤔13😁3👍2
Вышел Koin 3.2.2

В новой версии исправили баги ViewModel в Compose, в Android Scope начали депрекейтить API и обновленные базовые проекты.

Уже работают на версии 3.3 в которой будет улучшения Constructor DSL, адаптация нового ViewModel API (2.5), новые фичи для Android Jetpack
🔥21👍7
Dowel - KSP генератор стабовых данных для Compose функций

#compose
👍49
🤔40😁5👍1
data object - новая экспериментальная фича в Kotlin 1.7.20. Фактически это object с генерацией нормального toString(). Генерировать equals и hashCode не имеет смысла т.к. object - это singleton.

Подробности фичи и как ее подключить здесь
🤯38👍18🤔6