Size: a a a

Kotlin Community

2020 November 03

с#

саша сок #KotlinGang... in Kotlin Community
Yanis
class X {
   var a: String? = ...
   var b: String? = ...

   fun test() {
        // если a или b будут null нужно вызвать некий код и выйти из функции
        a.call(b)
   }
}

вот как красиво написать?
fun test() {
   a?.call(b ?: return)
}
источник

Y

Yanis in Kotlin Community
саша сок #KotlinGang
fun test() {
   a?.call(b ?: return)
}
нужно перед выходом вызвать код
источник

с#

саша сок #KotlinGang... in Kotlin Community
но я бы с локальными переменными лучше сделал
источник

KD

Konstantin Dovnar in Kotlin Community
саша сок #KotlinGang
fun test() {
   a?.call(b ?: return)
}
Вот это дрянь какая-то, не надо так.
источник

Y

Yanis in Kotlin Community
саша сок #KotlinGang
но я бы с локальными переменными лучше сделал
это можно сделать да, но это выглядит ужасно
источник

AM

Andrew Mikhaylov in Kotlin Community
Yanis
var, да
Ну так var-ы и не смарткастятся. Да, конкретно этот кейс красиво с единственным early return и без дублирования кода не обрисовать.
источник

с#

саша сок #KotlinGang... in Kotlin Community
Konstantin Dovnar
Вот это дрянь какая-то, не надо так.
само собой.
источник

Y

Yanis in Kotlin Community
Andrew Mikhaylov
Ну так var-ы и не смарткастятся. Да, конкретно этот кейс красиво с единственным early return и без дублирования кода не обрисовать.
ну вот об этом и речь
источник

с#

саша сок #KotlinGang... in Kotlin Community
Yanis
class X {
   var a: String? = ...
   var b: String? = ...

   fun test() {
        // если a или b будут null нужно вызвать некий код и выйти из функции
        a.call(b)
   }
}

вот как красиво написать?
объясните зачем вам var в мембере класса?
есть множество случаев, когда можно обойтись без них
источник

AM

Andrew Mikhaylov in Kotlin Community
Впрочем, если не надо выполнять никакие действия, нужно просто выйти, достаточно сделать
val a = a ?: return
val b = b ?: return
источник

Y

Yanis in Kotlin Community
саша сок #KotlinGang
объясните зачем вам var в мембере класса?
есть множество случаев, когда можно обойтись без них
ну вот хочется
источник

Y

Yanis in Kotlin Community
Andrew Mikhaylov
Впрочем, если не надо выполнять никакие действия, нужно просто выйти, достаточно сделать
val a = a ?: return
val b = b ?: return
да, но вот нужно вызвать метод логирования например
источник

с#

саша сок #KotlinGang... in Kotlin Community
Yanis
ну вот хочется
хорошо, локальные переменные, но в большинстве случаев проще это сделать параметрами приватной функции
источник

AM

Andrew Mikhaylov in Kotlin Community
Yanis
ну вот об этом и речь
Я к тому, что у вас тут, скажем, довольно неудачное стечение обстоятельств, ради которого вводить гарды было бы странно. Более простые случаи сейчас язык и без того покрывает успешно.
источник

AM

Andrew Mikhaylov in Kotlin Community
С минимальным дублированием, наверное, проще так сделать:
val a = a
val b = b
if(...) { log(...); return }
...
источник

AM

Andrew Mikhaylov in Kotlin Community
Тут вы сразу захватите значения в локальные переменные, а их уже смарт-кастить получится после проверки.
источник

OY

Oleg Yukhnevich in Kotlin Community
Iaroslav Postovalov
публикацией чего и куда?
там с jcenter/mavencentral проблема, был старый rsocket-kotlin, который был криво запаблишен в bintray, и поэтому sync не работал
и когда сейчас пробовали сделать релиз, он не синканулся
и после этого пошли небольшие проблемы :)
вот поэтому 0.10.0 ушло только в бинтрей, сейчас там разбираемся
источник

Y

Yanis in Kotlin Community
и вот это вот все a == null ||b == null
источник

Y

Yanis in Kotlin Community
вариантов как решить много можно придумать, я сам знаю
просто говорю что у свифта есть более красивое решение
источник

AM

Andrew Mikhaylov in Kotlin Community
Мне всё ещё кажется, что гарды плоховато сочетаются со смарт-кастами.
источник