Все потоки
Поиск
Написать публикацию
Обновить
47.52

Kotlin *

Статически типизированный язык программирования

Сначала показывать
Порог рейтинга

Мнение: почему мультиплатформа Kotlin не приживется в мире разработки

Спойлер: из-за нелюбви к изменениям и дефицита специалистов.

Наш руководитель направления Flutter и iOS Саша Ворожищев делится основными тезисами статьи о судьбе Kotlin Multiplatform Mobile (KMM). Автор статьи — разработчик Донн Фелкер (Donn Felker) — не пророчит KMM мировой славы. И вот почему.

  • Люди не любят что-то менять. Особенно программисты. Редко встретишь iOS-разработчика, который перешел на Android. И наоборот.

  • Кросс-платформа чаще не оправдывает надежд. Мы уже не раз наблюдали попытки создать кросс-платформенные суперхиты — взять к примеру Flash и ActionScript, Mono и Xamarin, —  но ни одна из этих технологий так и не покорила мир программирования.

Сейчас конкуренцию КММ может составить только Flutter. Пока это лучшее кросс-платформенное решение.

  • Охота на единорога. Чтобы стать классным кросс-платформенным разработчиком, нужно разбираться не в одном, а сразу в нескольких языках и инструментах. Между тем, хороших программистов-полиглотов мало и они стоят дорого. Еще они часто выгорают, ведь технологии развиваются слишком быстро, а успеть сразу за всеми очень сложно.

  • Универсальность != эффективность. Здесь стоит повторить, как важно подбирать правильные инструменты для решения конкретных задач. Мультиплатформа не может быть панацеей для всех проблем.

Полную версию статьи читайте тут.

А больше про технологии и разработку найдете в телеграм-канале Саши. Приходите, там интересно :)

Теги:
Всего голосов 7: ↑7 и ↓0+7
Комментарии0

Таймер на LaunchedEffect в Compose

LaunchedEffect(keyN) запустит свою лямбду, в начале композиции. LaunchedEffect будет запускать свою лямбду снова каждый раз, когда изменится один из заданных ключей keyN

Причем в лямбде будет находится coroutine context

@Composable
fun Timer() {
    var seconds by remember { mutableStateOf(0) }

    LaunchedEffect(seconds) {
            delay(1000)
            seconds++
        }

    Text(text = "Seconds: $seconds")
}

mutableStateOf - Создает State при изменении которого compose функция перезапускается

remember - сохраняет этот State при каждом перезапуске функции

remember + mutableStateOf

Теги:
Рейтинг0
Комментарии0

Можно ли организовать свое собственное расширение в Kotlin? Это можно сделать через Delegate

class MyString {
    fun myPrint(text: String) {
        println(text)
    }
}

Есть класс MyString с методом myPrint(). Допустим нам надо сделать собственное расширение printRealExt() без использование встроенных в Kotlin возможностей

fun MyString.printRealExt(text: String) {
    println(text)
}

Реализуем интерфейс и класс с нашим методом "расширения"

interface ExtensionPrint {
    fun printExt(text: String)
}

class ExtensionPrintImpl : ExtensionPrint {
    override fun printExt(text: String) {
        println(text)
    }
}

А затем воспользовавшись Delegation делегируем этот метод

class MyString : ExtensionPrint by ExtensionPrintImpl() {
    fun myPrint(text: String) {
        println(text)
    }
}

Синтаксис вызова из расширения и из делегата выглядит одинаково

    val myString = MyString()
    myString.printRealExt("Real ext")
    myString.printExt("Text from ext")

Таким же образом можно организовать множественное наследование в  Kotlin

interface OneClassInterface {
    fun someOne()
}

class OneClassImpl : OneClassInterface {
    override fun someOne() {
        println("some One")
    }
}

interface TwoClassInterface {
    fun someTwo()
}

class TwoClassImpl : TwoClassInterface {
    override fun someTwo() {
        println("someTwo")
    }
}

class DerivedClass : OneClassInterface by OneClassImpl(), TwoClassInterface by TwoClassImpl()

Есть другие способы?

Теги:
Всего голосов 2: ↑2 и ↓0+2
Комментарии0
2