Полный разбор Kotlin Delegated Property

แชร์
ฝัง
  • เผยแพร่เมื่อ 10 ธ.ค. 2024

ความคิดเห็น • 8

  • @AndroidBroadcast
    @AndroidBroadcast  13 ชั่วโมงที่ผ่านมา

    🔗 Платная подписка на Boosty abdev.by/oroS и в Telegram abdev.by/lrpW
    🔗 Код из видео на GitHub github.com/androidbroadcast/KotlinPropertyDelegate (доступ для плтаных подписчиков. По вопросам пишите t.me/ab_manager)
    🔗 Telegram Android Broadcast t.me/+mBXLNRgEwNcwNjli
    ✉ Написать Кириллу kirill@androidbroadcast.dev

  • @MyMIROSHNICHENKO
    @MyMIROSHNICHENKO 7 ชั่วโมงที่ผ่านมา +4

    Смысл понятен, но пример так себе, так как уходя от копипасты, написали по итогу тонну копипасты внутри, НО, как +, это 1 раз и где-то скрыто, а дальше упрощение

    • @AndroidBroadcast
      @AndroidBroadcast  3 ชั่วโมงที่ผ่านมา

      "Копи-паста" - это копирование одного и того текста/кода и вставка его в файлы с минимальными правками. В итоге если тебе что-то нужно подправить в этом коде, ты будешь это искать по всему проекту и исправлять.
      То что показал я - уход от копи пасты и однообразного кода, через инкапсуляцию за делегатом свойства. Учите базу!

  • @ivan_p3
    @ivan_p3 5 ชั่วโมงที่ผ่านมา +1

    Собеседования наше всё. Рынок собеседований выше рынка разработки в России.

  • @vahekhachaturian2424
    @vahekhachaturian2424 8 ชั่วโมงที่ผ่านมา

    а разве там не будет креш в каст не String из за того что default value задан как null?

    • @AndroidBroadcast
      @AndroidBroadcast  7 ชั่วโมงที่ผ่านมา

      В исходниках поправил уже после монтажа

  • @явсегдавру
    @явсегдавру 6 ชั่วโมงที่ผ่านมา

    Хочется отметить крутое окружение для ролика 🤙

  • @Andrei-p9k
    @Andrei-p9k 3 ชั่วโมงที่ผ่านมา

    Я больше любитель флоу. Но тема интересная и я немного модифицировал код.
    Написал себе FlowUtils
    operator fun MutableStateFlow.getValue(thisRef: Any?, property: KProperty): T =
    this.value
    operator fun MutableStateFlow.setValue(thisRef: Any?, property: KProperty, value: T) {
    this.value = value
    }
    class IntPref(
    sharedPreferences: SharedPreferences,
    key: String,
    scope: CoroutineScope,
    defValue: Int = 0
    ) {
    private val flow = MutableStateFlow(defValue)
    init {
    flow.value = sharedPreferences.getInt(key, defValue)
    flow.drop(1)
    .onEach { sharedPreferences.edit { putInt(key, it) } }
    .launchIn(scope)
    }
    operator fun getValue(thisRef: Any?, property: KProperty): MutableStateFlow = flow
    }
    ....
    class StringSetPref(
    sharedPreferences: SharedPreferences,
    key: String,
    scope: CoroutineScope,
    defValue: Set = HashSet()
    ) {
    private val flow = MutableStateFlow(defValue)
    init {
    flow.value = sharedPreferences.getStringSet(key, defValue) ?: defValue
    flow.drop(1)
    .onEach { sharedPreferences.edit { putStringSet(key, it) } }
    .launchIn(scope)
    }
    operator fun getValue(thisRef: Any?, property: KProperty): MutableStateFlow =
    flow
    }
    И дальше это можно не только использовать делегаты, но и подписываться на изменения.
    class ReactiveSharedPrefs(
    sharedPreferences: SharedPreferences,
    scope: CoroutineScope = CoroutineScope(Dispatchers.IO)
    ) {
    companion object {
    private const val PREF = "PREF"
    }
    val pref by IntPref(sharedPreferences, PREF, scope)
    }
    .....
    var pref by prefs.pref
    bind.view.setOnClickListener{ pref++ }
    prefs.pref.onEach {
    // observe
    }.launchIn(scope)