@kotlin_lang

Страница 664 из 982
DY
10.05.2018
19:43:46
да у меня все ок с ним. используется давно в проекте. просто впервые решил buildString заюзать. должна быть какая-то связь с тем, что kotlinx.serialization кроссплатформенный ? мб его плагин виной

Bogdan
10.05.2018
19:48:14
DY
10.05.2018
19:50:46
Может навести на какие-то мысли ./gradlew :app:dependencies | grep kotlin-stdlib
что-то я потерялся в этих результатах. но ничего критичного не вижу, везде форсится последняя версия

повыкидывал все зависимости кроме виновника проблемы, вообще чистота, версии котлина в kotlinx.serialization и у меня в проекте совпадают ?‍♂ но проблема остается

Google
Andrew
10.05.2018
20:36:10
а они рядышком определены
Странненько, ибо в стдлибе одна декларация: https://github.com/JetBrains/kotlin/blob/1.2.40/libraries/stdlib/src/kotlin/text/StringBuilder.kt (да и expect-вариант подменяется actual typealias почти наверняка).

Точно, оно даже не в jdk* определено, а в jvm, что логично: https://github.com/JetBrains/kotlin/blob/1.2.40/libraries/stdlib/common/src/kotlin/TextH.kt https://github.com/JetBrains/kotlin/blob/1.2.40/libraries/stdlib/jvm/runtime/kotlin/text/TypeAliases.kt

Я правда без идей, откду могут браться разные декларации, если версия стдлиб одна. Может, завтра знающие люди помогут :)

DY
10.05.2018
20:42:18
Странненько, ибо в стдлибе одна декларация: https://github.com/JetBrains/kotlin/blob/1.2.40/libraries/stdlib/src/kotlin/text/StringBuilder.kt (да и expect-вариант подменяется actual typealias почти наверняка).
да, я затупил, сам только что решил перепроверить всё. одна находится в stdlib-common, другая просто в stdlib ? и они один в один, ну и serialization затягивает common

Andrew
10.05.2018
20:44:39
Ах же ж. Есть ещё просто stdlib, точно.

DY
10.05.2018
20:44:41
учитывая, что package одинаковые, не представляю, как это разрулить. мб исключить stdlib-common из зависмостей.. вообще проблема не глобальная, я могу и обойтись без этой функции, или свою написать. скорее просто интересно было

Andrew
10.05.2018
20:46:19
Без stdlib-common перестанет по идее работать то, что строится на мультиплатформе. Я бы попробовал наоборот выкинуть обычный stdlib.

DY
10.05.2018
20:47:27
а actual для jvm платформы не в нём определены? вообще не ориентируюсь в анатомии котлин либ

Andrew
10.05.2018
20:47:40
В common + jvm + опционально jdk8 должно быть всё то же, что есть в обычном stdlib.

DY
10.05.2018
20:48:52
хм. ладно, спасибо за помощь) поэкспериментирую потом

Andrew
10.05.2018
21:01:40
Да, правильно вы говорите, в stdlib и определены actual для JVM. Так что запутался я :) Сбило с толку, что есть libraries/stdlib/{common,jvm,jdk8}/src, а есть просто libraries/stdlib/src.

Правда, я не увидел, чтобы buildString в двух местах была определена. Завтра с десктопа посмотрю.

DY
10.05.2018
21:14:45
Правда, я не увидел, чтобы buildString в двух местах была определена. Завтра с десктопа посмотрю.
тоже не понимаю как оно устроено, в сорцах она определена в одном месте, но артефакты разные, причем в одном и для JVM и JS платформы функции, т.е. общие, в другом конкретно для JVM (их больше). если переходить по ctrl+ЛКМ в IDEA, то это видно.

Google
DY
10.05.2018
21:17:08
похоже просто артефакты собираются из одного модуля, из одних исходников ?‍♂️

надо наверное поковырять мультиплатформу на досуге, чтоб понимание пришло

Andrew
11.05.2018
12:26:32
Подскажите, а почему нельзя использовать тернарный оператор в однострочной функции наподобие: fun foo(toUpperCase: Boolean, name: String) = toUpperCase ? name.toUpperCase() : name

Gleb
11.05.2018
12:27:49
Подскажите, а почему нельзя использовать тернарный оператор в однострочной функции наподобие: fun foo(toUpperCase: Boolean, name: String) = toUpperCase ? name.toUpperCase() : name
потому что в котлине if - это выражение можно написать: fun foo(toUpperCase: Boolean, name: String) = if(toUpperCase) name.toUpperCase() else name

конечно не так красиво, как с тернарным, но работает так же

Andrew
11.05.2018
12:28:43
Ага, спасибо! Я так и написал, просто хотелось понять подоплеку.

Andrew
11.05.2018
12:29:32
:D

Quantum Harmonizer
11.05.2018
12:30:11
чёт вообще странный код :)

Gleb
11.05.2018
12:30:29
Лучше String.foo(toUpperCase: Boolean) = if (toUpperCase) toUpperCase() else this
это уже дело вкуса, не люблю extension-функции плодить

Andrew
11.05.2018
12:30:53
https://discuss.kotlinlang.org/t/ternary-operator/2116/8 а вот кастати дискуссия по поводу тернарного оператора

Gleb
11.05.2018
12:31:12
это уже дело вкуса, не люблю extension-функции плодить
только если она действительно потом по всему проекту использоваться будет

Andrew
11.05.2018
12:31:22
Код просто пришедший из головы)

Quantum Harmonizer
11.05.2018
12:32:53
Шо, опять?!
с 2016 и поныне ?

Max
11.05.2018
12:35:42
потому что конструкция if else его заменяет?

Alexander
11.05.2018
12:36:57
Конкретно моё мнение: 1. Впринципе if-else может делать тоже самое. 2. Тернарный оператор очень располагает к нечитаемому использованию: a ? b : c это обычно смотрится хорошо, наверное даже лучше, чем if (a) b else c a ? (b ? c : d) : e или какая-либо другая вложенность смотрится мягко говоря сложно. С помощью if-выражений можно расписать намного читабельнее. Итого - есть один простой кейс, в котором иногда тернарный оператор смотрится чуть-чуть лучше чем if-else (отмечу, что if-else смотрится неплохо при if-else выражениях, а не присваиваниях как в джаве). И есть куча кейсов, когда лучше не использовать тернарный оператор. И ради одного действительно небольшого улучшения нужно ли вводить целый оператор?

потому что конструкция if else его заменяет?
В этом чате уже отвечали, форварднул свой вариант :)

Google
Alexander
11.05.2018
12:38:39
Ну ещё высказывались сомнения из-за использования двоеточия уже в других местах.

Quantum Harmonizer
11.05.2018
12:41:57
Ещё нюанс в том, что в PHP и Java он работает в разных направлениях.

Андрей
11.05.2018
12:45:01
sealed классы например в C# и котлин тоже работают в совершенно разных направлениях

Bogdan
11.05.2018
13:50:21
Опять 25

Пятница день сра@а

OlegKrikun
11.05.2018
14:00:08
Так, а что картинки постить нельзя?

Почему то сообщение со скриншотом удалилось



Egor
11.05.2018
14:03:37
Обычно с таким вопросом посылают в @android_ru

Но почему там @JvmOverloads?

Va
11.05.2018
14:04:16
Но почему там @JvmOverloads?
компилятор генерит три конструктора

OlegKrikun
11.05.2018
14:04:20
потому что констрстор у вьюшки то не один

Egor
11.05.2018
14:05:21
потому что констрстор у вьюшки то не один
Котлином разве нельзя хендлить такие кейсы? Без аннотаций

Quantum Harmonizer
11.05.2018
14:05:39
попробуй сгенерить 4 честных конструктора, которые вызывают супер с таким же количеством параметров

Rustem
11.05.2018
14:05:40
Снова здравствуйте

Quantum Harmonizer
11.05.2018
14:05:54
Котлином разве нельзя хендлить такие кейсы? Без аннотаций
насоздавать конструкторов руками никто не мешает

Igor
11.05.2018
14:05:54
а точно не из-за того, что defStyleAttr = 0? =)

OlegKrikun
11.05.2018
14:10:30
Google
OlegKrikun
11.05.2018
14:10:56
Всем спасибо. Привык когда вьюгруппы переопределяешь ноль туда кидать =)

Quantum Harmonizer
11.05.2018
14:11:12
а надо что?)

Igor
11.05.2018
14:11:35
public AppCompatEditText(Context context, AttributeSet attrs) { this(context, attrs, R.attr.editTextStyle); }

Quantum Harmonizer
11.05.2018
14:11:51
а, да

OlegKrikun
11.05.2018
14:11:59
да

Quantum Harmonizer
11.05.2018
14:12:31
ой, забыл в самом начале послать в @kotlin_mobile :)

Konstantine
11.05.2018
14:34:45
sealed class Device( val id: Long, val lat: Double, val long: Double ) { class Camera(id: Long, lat: Double, long: Double) : Device(id, lat, long) class Sendor(id: Long, lat: Double, long: Double) : Device(id, lat, long) class Controller(id: Long, lat: Double, long: Double) : Device(id, lat, long) }

Можно ли как-то обойти эти повторения в конструкторе?

А то если что-то добавляется\меняется, то это надо в куче мест сделать. :(

Quantum Harmonizer
11.05.2018
14:35:38
запилить свойстка из базового класса в отдельный класс)

Kirill
11.05.2018
14:35:41
можно сделать поля в sealed class abstract, а в наследниках в конструкторе override

(такое себе конечно, но кода меньше)

Konstantine
11.05.2018
14:36:43
запилить свойстка из базового класса в отдельный класс)
В смысле, использовать как аргумент некий отдельный класс содержащий в себе нужные нам?

Quantum Harmonizer
11.05.2018
14:37:00
Adv0cat
11.05.2018
14:37:05
Всем привет, посижу почитаю вас тут тихонько ?

Konstantine
11.05.2018
14:37:32
Quantum Harmonizer
11.05.2018
14:50:11
И это страшно.

Egor
11.05.2018
14:52:18
Кто-нибудь, сделайте голосование

Google
Egor
11.05.2018
14:52:40
Вот два варианта реакции сверху

Какое-то нечестное голосование было

Mikhail
11.05.2018
14:54:41
Виталий
11.05.2018
14:55:02
он сказал вопрос в том как заюзать ":"

OlegKrikun
11.05.2018
14:55:06
ну вообще говоря, Бреслав намекнул на Мобиусе, что тернарный оператор может появиться
Имха, он очень нужен: ибо val v = if(...) ... else ... - вот за это в моём коде хочется почти и зжечь офис jb

Виталий
11.05.2018
14:55:10
и уже после этого решать вопрос про тернарник

Egor
11.05.2018
14:55:54
он сказал вопрос в том как заюзать ":"
В элвисах же уже есть, а какой смысол ещё его куда-то пихать?

Страница 664 из 982