@kotlin_lang

Страница 538 из 982
DarkMentat
12.02.2018
11:39:16
те же все квикфиксы

это не то?

Andrew
12.02.2018
11:40:38
студийный статический анализ из какого-нибудь пре-коммит хука или на CI не запустить

а у некоторых качество кода на поток поставлено

Google
DarkMentat
12.02.2018
11:43:22
ээ

Kirill
12.02.2018
11:43:51
студийный статический анализ из какого-нибудь пре-коммит хука или на CI не запустить
мне казалось, что идея умеет работатаь в headless режиме и запускать инспекции из CLI на сервере

DarkMentat
12.02.2018
11:44:05
это просто тот самый линт, что градал делает

Даниил
12.02.2018
11:44:20
это просто тот самый линт, что градал делает
по-моему ты всё-таки что-то путаешь

DarkMentat
12.02.2018
11:44:21
gradlew lint, он отчеты генерит

и он и со студии тоже умеет

по-моему ты всё-таки что-то путаешь
скорее всего, вот только не понимаю что)

Даниил
12.02.2018
11:45:13
нет никакого gradlew lint

из коробки

я не знаю откуда у тебя этот таск

Vladimir
12.02.2018
11:45:50
Даниил
12.02.2018
11:46:05
а, там какой-то свой линтер?

но вообще я не думаю что студия использует этот линт

Google
Vladimir
12.02.2018
11:47:46
а, там какой-то свой линтер?
Да, Android Lint. Много чего умеет, но в основном специфичного для Android-проектов

Даниил
12.02.2018
11:49:17
лан, сорь тогда что ворвался в обсуждение тулинга для ондроеда, я в этом ничего не понимаю ?

Vladimir
12.02.2018
11:49:17
но вообще я не думаю что студия использует этот линт
По-моему, использует. Вместе со встроенными в идею инспекциями java/kotlin кода.

Даниил
12.02.2018
11:49:50
я на котлине не под ондроед пишу, поэтому не понял сначала о каком линтере вообще речь идёт

DarkMentat
12.02.2018
11:50:13
прост там не только андроид специфик, но и чисто котлиновские правила

и стандартные идейные окошни

думал, что общее...

Vladimir
12.02.2018
11:51:30
Ну так-то Kotlin != Android, так что упоминание его линтера весьма бесполезно в данном контексте. А идея для headless режима требует проект в своём формате, так что многовато возни на CI

Evgenii
12.02.2018
12:03:54
Всем привет. Подскажите, как для переменных с lateinit отследить момент, когда эта переменная еще не инициализирована?

Andrew
12.02.2018
12:04:46
::varName.isInitialized

Evgenii
12.02.2018
12:06:59
Это вообще нормальная практика? Эта переменная указывает на список объектов, которые получаю с сервера. Когда я их получил, инициализирую. Обращаясь к ней в следующий раз, достаю эти данные из поля класса.

Anton
12.02.2018
12:07:34
а какой профит в таких переменных кроме случаев с DI нпример когда филд енджекшен

почему не сделать нуллабл?

Evgenii
12.02.2018
12:07:53
и правда.

Anton
12.02.2018
12:07:56
ну вот раньше не было этого метода isInitialized

тогда вроде как понятно что упадет в рантайме

а щас еще проверку ставить

Bogdan
12.02.2018
12:08:10
почему не сделать нуллабл?
А потом проверят 256 раз

Andrew
12.02.2018
12:08:17
А оно под капотом в nullable и прерващается.

Google
Anton
12.02.2018
12:08:20
ну а тут не 256 раз проверят?

Bogdan
12.02.2018
12:08:58
Бывает иницилизация нужна не сразу, но есть варят делегаты

Andrew
12.02.2018
12:09:23
Просто если есть уверенность, что оно действительно проинициализируется где-то там в начале жизни объекта, но не совсем сразу, то можно скрасить себе жизнь отсутствием ?. по всему коду, взяв на себя ответственность за KotlinNPE.

Нада проверить
На прошлой неделе тут кто-то проверял вроде.

Andrew
12.02.2018
12:10:56
ну часто либо лейтинит, либо налы, выбирай что больше не нравится

кстати, а насколько чревато использование isInitialized? это уже рефлексия или нет? надо бы наверное конвертнуть код в джаву и глянуть что там

нет, это сравнение с null в чистом виде

Bogdan
12.02.2018
12:11:01
На прошлой неделе тут кто-то проверял вроде.
Я доверяю только себе, байт-коду и разрабам котлина

Andrew
12.02.2018
12:11:18
Да на здоровье, я ж не отговариваю.

Anton
12.02.2018
12:11:24
какой ты крутой

Andrew
12.02.2018
12:11:47
Яйца завидуют белой завистью ;)

Kirill
12.02.2018
12:13:33
Bogdan
12.02.2018
12:14:53




You
12.02.2018
12:15:29
Кеды?

Bogdan
12.02.2018
12:15:43
ну иcходя из анотаций: String? lateinit var k: String , не совсем одно и тоже

Google
Andrew
12.02.2018
12:17:07
Ноу щит, Шерлок, конечно String? и String -- это не одно и то же.

> и разрабам котлина хи-хи-хи
А что "хи-хи-хи", ты ж не над языком работаешь, насколько я понимаю :)

Kirill
12.02.2018
12:18:10
я нет

Andrew
12.02.2018
12:18:18
Ну всё, значит тебе тоже веры нет.

Kirill
12.02.2018
12:18:49
просто пару раз было забавно "хм, да не может же в компиляторе баги быть? это точно я что-то не так делаю" а потом "хм, оказалось что таки в компиляторе"

Bogdan
12.02.2018
12:18:57
Ноу щит, Шерлок, конечно String? и String -- это не одно и то же.
я сказал про lateinit String, говорили что он под капотом налл

Andrew
12.02.2018
12:19:22
Хех, бывает. Я, благо, пока не натыкался :)

Kirill
12.02.2018
12:19:57
Спойлеры!
о, а я тебя знаю! :D

Денис
12.02.2018
12:20:18
о, а я тебя знаю! :D
Да, привет, Кирилл. :)

Anton
12.02.2018
12:20:20
вот и познакомились

Sergey
12.02.2018
12:21:48
О, сделали чтобы можно было котлин запускать в scratch файлах

Andrew
12.02.2018
12:22:03
я сказал про lateinit String, говорили что он под капотом налл
Ты же только что собственноручно показал проверку на null. @Nullable / @NonNull -- контракты типа, соответствуют String / String?, они ведь не гарантируют, что именно будет в переменных лежать, только обещают.

Bogdan
12.02.2018
12:23:22
и проверки на нул в гетерах

так-что обычные nullable типы, могут быть лучшим решением

Andrew
12.02.2018
12:25:50
Исключительно для того, чтобы вмест KNPE кидать "property uninitialized". Я уже даже не говорю о том, что бранч предикшн на lateinit-ах должен успешно греться и не ошибаться, нивелируя проверку на налл вообще. А вот касательно дополнительного класса -- не видел, да.

Sergey
12.02.2018
12:27:51
вроде hotspot делает хитрую проверку на налл, инструкции для проверки не генерятся. если null то падает в sigsegv, которая обрабатывается как тело if

Google
Sergey
12.02.2018
12:28:18
так что до бранч придикшена дело не дойдет )

Andrew
12.02.2018
12:28:50
Хм, занятно. И в обрабочике сигнала оно потом свой стек разматывает наряду с нативным?

Логично, в целом, эта оптимизация на пользовательский код не должна влиять.

Sergey
12.02.2018
12:29:23
http://hg.openjdk.java.net/jdk8/jdk8/hotspot/file/87ee5ee27509/src/os_cpu/linux_x86/vm/os_linux_x86.cpp#l396

Bogdan
12.02.2018
12:29:38
но это нужно оптимизировать, а до оптимизации дойти должно

Andrew
12.02.2018
12:30:33
Даже не хочу спрашивать, что ты этой фразой имел ввиду.

Sergey
12.02.2018
12:33:04
насколько помню, эта оптимизация включается если в тело проверки попадаем в 0.01% случаев

вернее меньше чем 0.01%

Bogdan
12.02.2018
12:34:36
насколько помню, эта оптимизация включается если в тело проверки попадаем в 0.01% случаев
а не много платим за один if? проверка, анализ и изменения в райнтайме

хотя тут хз

Andrew
12.02.2018
12:37:38
Я не понимаю, к чему весь этот разговор. У тебя либо наллабл-поле и ты расставляешь все проверки сам, либо lateinit и за тебя это делает компилятор. Даже для платформ-типа, превращённого в нонналл, будут эти проверки. Какое к этому отношение имеет цена проверки?

Andrew
12.02.2018
12:40:24
Я всё ещё не увидел, чем хуже.

Bogdan
12.02.2018
14:09:28
Я всё ещё не увидел, чем хуже.
оверхед, за то что мы саи ручаемся за нот налл

Igor
12.02.2018
14:35:20
А почему нельзя сделать inline suspend функцию, которая вызывает suspend лямбды?

Kirill
12.02.2018
15:14:41
А почему нельзя сделать inline suspend функцию, которая вызывает suspend лямбды?
инлайнить несколько стейт машин придётся. это сложно

Igor
12.02.2018
18:09:31
Те нет способа написать свою функцию, которая просто будет вызвать launch(UI), передавая туда лямбду? А то переодически забываю UI передавать ?

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