@kotlin_lang

Страница 738 из 982
dimiii
04.07.2018
11:58:57
Резюмируем: аннотации хороши для аннотирования

В раж метапрограммирования лучше не пускаться

Andrey
04.07.2018
12:09:54
Аннотации хороши для: 1. Различных валидаций времени компиляции. Для всего остального они не очень, мягко говоря. Их засилье в джаве связано с тем, что они появились в языке очень рано. До дженериков и лямбд. Поэтому в Kotlin их лучше использовать только если иначе совсем никак, благо в языке много других способов реализовать ту же функциональность.

Костя
04.07.2018
12:28:34
а чем плохо такое решение ? https://habr.com/post/66593/

Google
Костя
04.07.2018
12:28:50
сделать класс-наследник List<Float> например

просто у меня ситуация что надо менять конвертеры в retrofit

а там это можно только или по аннотациям у методов кастомным, или по значению типа, что для листа неочень выйдет

т.к. у них ещё внутренний параметр

Vadim
04.07.2018
12:33:56
Есть какая обратная функция для String.format ? аля deformat ?

String.format(“%1$s likes”, likeCount)

Andrew
04.07.2018
12:35:39
String.format(“%1$s likes”, likeCount)
Регулярочки разве что. Аналогов sscanf не завозили.

Vladymyr
04.07.2018
12:38:24
Не полуается собрать проект, ошибка "Failed to resolve: appcompat-v7", implementation 'com.android.support:appcompat-v7:27.1.1' В чём может быть проблема?

Andrew
04.07.2018
12:39:14
repositories { google() } есть? Ну и да, это очень уж мимо котлина.

Vladymyr
04.07.2018
12:39:36
есть

Кузьма
04.07.2018
13:06:58
всем привет, может кто-нибудь подсказать, при попытке подключить корутины к Android проекту у меня ломается вся сборка, больше не видны импорты ни View ни AppCompatActivity и т.п. .. подключаю так : implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:0.23.4' implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:0.23.4'

код, который пытаюсь выполнить launch(UI) { val response = async(CommonPool) { coinMarketCupApi.ticker(0, 100, null).execute() }.await() adapter.addAll(response.body() ?: listOf()) }

Oleg
04.07.2018
13:08:37
на версию stdlib не ругается? =)

Google
Кузьма
04.07.2018
13:08:54
ломается при подключении kotlinx-coroutines-android

если подключать core, то всё работает

на версию stdlib не ругается? =)
что за версия stdlib? где её посмотреть?

Oleg
04.07.2018
13:11:40
Could not find org.jetbrains.kotlin:kotlin-stdlib-common:1.2.51. такого в ошибках нет?

Кузьма
04.07.2018
13:17:36
Could not find org.jetbrains.kotlin:kotlin-stdlib-common:1.2.51. такого в ошибках нет?
нет, сейчас запустил таску :androidDebug, она успешно собралась

сейчас скрин скину



такое ощущение, что это студия ломается

а с кодом всё норм

dimiii
04.07.2018
13:20:45
неверное ощущение, aлсо https://t.me/kotlin_mobile

Алексей
04.07.2018
13:20:53
Как сделать lateinit val?

Кузьма
04.07.2018
13:21:10
Как сделать lateinit val?
кажется никак

val можно инициализировать через lazy {}

Алексей
04.07.2018
13:21:46
Ну у меня id, он должен быть val

Жабра
04.07.2018
13:21:47
async(CommonPool) не имеет смысла, т.к. дефолтный контекст DefaultDispatcher, а он и есть сейчас CommonPool. Да и к тому же async { }.await() путает, пишите withContext(DefaultDispatcher)

Кузьма
04.07.2018
13:22:14
Konstantine
04.07.2018
13:22:16
Жабра
04.07.2018
13:22:58
Lazy.
Ну lazy - это другое.

Google
Konstantine
04.07.2018
13:24:03
Ну lazy - это другое.
Суть в данном случае одна. Проинициализировать переменную позже.

Жабра
04.07.2018
13:24:20
Суть в данном случае одна. Проинициализировать переменную позже.
Да, но работает же по-другому. А если надо передать динамически?

Кузьма
04.07.2018
13:24:58
Что, простите?
пример какой-нибудь статьи или сниппета с withContext()

Konstantine
04.07.2018
13:25:01
Жабра
04.07.2018
13:26:25
пример какой-нибудь статьи или сниппета с withContext()
Единственное, что вам в начале нужно знать, это то что withContext(DefaultDispatcher) { ... } работает так же, как и async { ... }.await()

Что передать динамически?
Если id вычисляется по ходу и надо инициализировать переменную.

Konstantine
04.07.2018
13:27:18
Andrey
04.07.2018
13:27:22
Да, но работает же по-другому. А если надо передать динамически?
В какой момент вы собираетесь передать динамически и что? lazy val инициализируется при первом обращении.

Konstantine
04.07.2018
13:28:42
Естественно. Но не всегда это удобно и вообще возможно.
Если вдруг он скажет, что в его случае это не подходит - то да. К чему докапываешься, я не понимаю)

Алексей
04.07.2018
13:28:47


Andrey
04.07.2018
13:28:58
Америку открыли.
Я просто пытаюсь понять, какую задачу вы решаете.

Жабра
04.07.2018
13:29:17
Если вдруг он скажет, что в его случае это не подходит - то да. К чему докапываешься, я не понимаю)
Ну что нельзя тупо советовать человеку использовать lazy как будто разницы никакой. :)

Алексей
04.07.2018
13:29:28
Я вот не хочу var, хочу val)))

Quantum Harmonizer
04.07.2018
13:30:20
Я вот не хочу var, хочу val)))
https://github.com/Miha-x64/Flawless

Жабра
04.07.2018
13:31:06
Я просто пытаюсь понять, какую задачу вы решаете.
Я имел ввиду, что иногда не вариант инициализировать переменную в lazy. Когда кода слишком много. lateinit var можете инициализировать откуда угодно, а lazy инициализируется при первом обращении и то внутри своего блока.

Konstantine
04.07.2018
13:31:47
Ну что нельзя тупо советовать человеку использовать lazy как будто разницы никакой. :)
Я сказал - не подойдёт к его задаче - тогда да. В большинстве случаев - суть одна и она отлично заменяет лейтинит.

Google
Konstantine
04.07.2018
13:32:18
Andrey
04.07.2018
13:34:04
Алексей, а почему вам так критично, чтобы было val, а не var?

Andrey
04.07.2018
13:37:24
Потому что это id
Ок. А что предполагается делать, если на момент обращения к id он ещё не инициализирован? lateinit в этом случае будет падать в рантайме с ошибкой UninitializedPropertyAccessException Это то поведение, которое вам нужно? Кроме того, примитивы (Long) не бывают lateinit

Алексей
04.07.2018
13:40:53
Ок. А что предполагается делать, если на момент обращения к id он ещё не инициализирован? lateinit в этом случае будет падать в рантайме с ошибкой UninitializedPropertyAccessException Это то поведение, которое вам нужно? Кроме того, примитивы (Long) не бывают lateinit
После создания активити, я получаю из бандла переданный мне id, и я хочу сохранить его в val переменную. Мне подсказали как через lazy сделать. Может до меня когда нибудь и дойдет почему нельзя было сделать latainit val. Пока пострадаю)

Алексей
04.07.2018
13:42:15
Ок

Andrey
04.07.2018
13:43:04
После создания активити, я получаю из бандла переданный мне id, и я хочу сохранить его в val переменную. Мне подсказали как через lazy сделать. Может до меня когда нибудь и дойдет почему нельзя было сделать latainit val. Пока пострадаю)
Нельзя так как val не может быть переприсвоен. Для lateinit компилятор не может гарантировать отсутствие переприсвоения, поэтому lateinit val считается ошибкой.

Quantum Harmonizer
04.07.2018
13:43:30
* не хочет :)

Andrey
04.07.2018
13:45:04
* не хочет :)
Алгоритм, так гарантировать отсутствие переприсвоения для lateinit var foo: String в студию.

Quantum Harmonizer
04.07.2018
13:45:50
Алгоритм, так гарантировать отсутствие переприсвоения для lateinit var foo: String в студию.
проверять на null при записи, как это делает isInitialized или любая попытка чтения

Andrey
04.07.2018
13:46:21
Все проверки компилятора должны быть выполнены до исполнения.

Quantum Harmonizer
04.07.2018
13:47:11
Вы путаете время компиляции и время исполнения.
я не говорил, что эта проверка будет работать в компайл-тайме. lateinit — это вообще про рантайм, целиком и полностью.

Алексей
04.07.2018
13:47:15
Почему нельзя делать latainit var для Int и Long?

Quantum Harmonizer
04.07.2018
13:48:07
Почему нельзя делать latainit var для Int и Long?
Потому что эти типы компилируются в примитивные int и long, которые не могут быть null

Алексей
04.07.2018
13:48:33
Ок

Google
Алексей
04.07.2018
13:50:07
Да

Quantum Harmonizer
04.07.2018
13:50:10
это уже java.lang.Integer

Kirill
04.07.2018
13:50:15
А тут что происходит?

А.

То есть он по ситуации смотрит.

Но старается сделать примитив где можно.

Quantum Harmonizer
04.07.2018
13:51:03
lateinit можно было бы тоже забоксить, но, видимо, консистентность/предсказуемость важнее

Kirill
04.07.2018
13:51:19
Ясно.

Andrey
04.07.2018
13:52:44
я не говорил, что эта проверка будет работать в компайл-тайме. lateinit — это вообще про рантайм, целиком и полностью.
А val - это целиком про время компиляции. Иначе толку от него не много, если компилятор не будет проверять, что ты val два раза не проинициализировал.

Kirill
04.07.2018
13:53:24
Там же const для компайл тайм проверок, нет?

Quantum Harmonizer
04.07.2018
13:54:04
Там же const для компайл тайм проверок, нет?
const для компайл-тайм-констант, очень ограниченная штука

Leonid
04.07.2018
13:54:16
val обычно в final поле компилируется

А lateinit val даже с проверкой потеряет эту семантику

Andrey
04.07.2018
13:57:16
const для компайл-тайм-констант, очень ограниченная штука
const - значение, которое val, при этом может быть вычислено ещё до исполнения. Например const val bar = 1 + 1 в байт коде выглядит так: public final static I bar = 2 То есть его при компиляции уже посчитали и прописали результат

Sander
04.07.2018
17:53:35
ребята у меня вопрос как начинающиму, который изучает Kotlin, есть видео курсы только по Java нормальные, по Kotlin нормальных курсов нет step by step, поэтому как лучше изучать материал? смотрю это сейчас на udemy - https://www.udemy.com/java-the-complete-java-developer-course/learn/v4/ - Просмотреть вначале видео уроки по Java, а потом начать изучать Kotlin? Потому что по Kotlin нормальных курсов нет, тогда легче уже будет разобраться с Kotlin. Сейчас изучая Kotlin остановился на коллекциях, понял что надо еще изучить много базоых вещей. ---- может кто что посоветует, кто уже проходил этот путь обучения, можно конечно просто документацию прочесть, но начинающему мне кажется по видео курсам будет проще, хоть и медленней.

---- наверное вопрос очень сложный?

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