Size: a a a

Kotlin Community

2020 November 03

с#

саша сок #KotlinGang... in Kotlin Community
Yanis
ну вот хочется
обычный пример

var a: Int? = 0

fun main() {
    thread {
        sleep(1000)
        a = null
    }
    thread {
         if(a != null) // здесь a может быть не равен нулл
              return ...
         println(a.toString()) // а тут неизвестно
    }
}
источник

с#

саша сок #KotlinGang... in Kotlin Community
поэтому если вы уверены в non-null, ставьте !!
источник

AM

Andrew Mikhaylov in Kotlin Community
У свифта есть действительно удобные штуки вроде условий в catch-ах, но конкретно в гардах я не уверен.
источник

с#

саша сок #KotlinGang... in Kotlin Community
хотя лучше параметры функций
источник

Y

Yanis in Kotlin Community
guard
   val a = a,
   val b = b {
       a.call(b)
   } ?: run {
       Log(...)
   }

пример как могло бы быть
источник

с#

саша сок #KotlinGang... in Kotlin Community
Yanis
guard
   val a = a,
   val b = b {
       a.call(b)
   } ?: run {
       Log(...)
   }

пример как могло бы быть
никто вам не мешает

requireNonNull(a, b) { (a, b) ->
   
} ?: run {

}
источник

Y

Yanis in Kotlin Community
мешает чувство прекрасного)
источник

с#

саша сок #KotlinGang... in Kotlin Community
Yanis
мешает чувство прекрасного)
источник

А

Артёмка in Kotlin Community
Представления о прекрасном так субъективны
источник

с#

саша сок #KotlinGang... in Kotlin Community
Артёмка
Представления о прекрасном так субъективны
а я не знаю, просто в котлине не нужны такие штуки, тут другой стиль
источник

А

Артёмка in Kotlin Community
Yanis
guard
   val a = a,
   val b = b {
       a.call(b)
   } ?: run {
       Log(...)
   }

пример как могло бы быть
Ну мне этот вариант совсем не нравится
источник

с#

саша сок #KotlinGang... in Kotlin Community
Артёмка
Ну мне этот вариант совсем не нравится
уверен, что это свифт вей и смотрится гармночно в его контексте
источник

I

Ilmir in Kotlin Community
Не, не моя. Да и вообще корутины на JVM моя вотчина очень условно. Там давно уже все изменения производятся гугловцами, а просматриваются тимлидом бекендовой команды.
источник

I

Ilmir in Kotlin Community
Yanis
проверка на null для одной переменной работает нормально, но вот если нужно две переменные проверить начинается попа-боль
if (a != null && b != null)?
источник

I

Ilmir in Kotlin Community
Или я не понял вопроса.
источник

AM

Andrew Mikhaylov in Kotlin Community
Ilmir
if (a != null && b != null)?
Человек хочет early return с дополнительными телодвижениями, и при этом смарт-каст после. На var-пропертях в классе.
источник

AN

Alexander Nozik in Kotlin Community
саша сок #KotlinGang
никто вам не мешает

requireNonNull(a, b) { (a, b) ->
   
} ?: run {

}
Собственно вот котлин-вей. Если очень хоется свифта, то можно обозвать это гардом иди лаже сделать инфиксом на паре
источник

I

Ilmir in Kotlin Community
Andrew Mikhaylov
Человек хочет early return с дополнительными телодвижениями, и при этом смарт-каст после. На var-пропертях в классе.
C var пропертями смарт-каст работает, если использовать scope functions, например, let или если завести локальную переменную.
Проблема с let только в том, что он не поддерживает несколько переменных, но это тоже можно обойти
class C {
   var x: String? = "OK"
   val i: Int? = 1

   fun test() {
       (x to i).let { (x, i) ->
           if (x == null || i == null) return
           println(x + i)
       }
   }
}
источник

AM

Andrew Mikhaylov in Kotlin Community
Ilmir
C var пропертями смарт-каст работает, если использовать scope functions, например, let или если завести локальную переменную.
Проблема с let только в том, что он не поддерживает несколько переменных, но это тоже можно обойти
class C {
   var x: String? = "OK"
   val i: Int? = 1

   fun test() {
       (x to i).let { (x, i) ->
           if (x == null || i == null) return
           println(x + i)
       }
   }
}
Мне
val x = x
val i = i

нравится больше предложенного :)
источник

с#

саша сок #KotlinGang... in Kotlin Community
Ilmir
C var пропертями смарт-каст работает, если использовать scope functions, например, let или если завести локальную переменную.
Проблема с let только в том, что он не поддерживает несколько переменных, но это тоже можно обойти
class C {
   var x: String? = "OK"
   val i: Int? = 1

   fun test() {
       (x to i).let { (x, i) ->
           if (x == null || i == null) return
           println(x + i)
       }
   }
}
страшно)
лучше уж https://t.me/kotlin_lang/213769

хотя тоже спорно, но без такой дикой вложенности
источник