@kotlin_lang

Страница 537 из 982
Igor
11.02.2018
10:42:22
как считаете, такая каша — нормально, или лучше расписать? update.message?.text ?.let { commandRegex.find(it) } ?.groupValues ?.get(1) ?.let { commands[it.toLowerCase()] } ?.invoke(update)
Чат-бота пишешь? Лямбды в commands с сайд-эффектами? Если да, то лучше разделить парсин комманды в лямбду, от ее вызова.

Igor
11.02.2018
11:08:59
да я уже в метод завернул, как выше посоветовали
Я немножко о другом, можно вынести всю чистую логику в отдельную функцю, даже generic fun <T> findByCommand(update: Update, commands: Map<String, T>): T? = update.message ?.text ?.let { commandRegex.find(it) } ?.groupValues?.get(1)?.toLowerCase() ?.let(commands::get) Потом ты сможешь ее тестировать атомарно, простыми дата-тестами без моков, ведь они зависит только от аругментов.

Google
Igor
11.02.2018
17:48:13
Ребят, как в koin сделать временный контекст, что бы View прокинуть в презентеру в конструктор? Все пример на сайте, через метод, уже после создания.

Va
11.02.2018
21:26:00
Ребят, как в koin сделать временный контекст, что бы View прокинуть в презентеру в конструктор? Все пример на сайте, через метод, уже после создания.
как выяснилось никак, поэтому, пришлось отказаться от него. koin не di контейнер, а вообще какой-то service locator

Sviat
11.02.2018
21:37:07
Зачем вообще инжектить вью/контекст в презентер? Это нарушение мвп и какой-то бэд пректис

Михаил
12.02.2018
02:43:53
Ребят, как в koin сделать временный контекст, что бы View прокинуть в презентеру в конструктор? Все пример на сайте, через метод, уже после создания.
Смысл презентера в мвп под андроид в том, что он существует дольше вьюхи. Вьюха при изменении конфигурации может пересоздаваться, а презентер - нет. Поэтому презентер при своем создании ничего не должен знать о вьюхе

Dmitriy
12.02.2018
02:57:04
Igor
12.02.2018
06:38:56
Sviat
12.02.2018
06:39:51
Для таких случаев у презентера есть методы takeView dropView

Но суть уже описали выше. Презентер живёт дольше вьюхи, значит в конструктор вьюху кидать нельзя

Dmitriy
12.02.2018
06:42:40
И не только clean

Igor
12.02.2018
06:43:53
Но суть уже описали выше. Презентер живёт дольше вьюхи, значит в конструктор вьюху кидать нельзя
> вьюху кидать нельзя Это бред какой-то. Я создаю retain fragment, и назначаю его View - все его ЖС такой-же как у презентера. Я НЕ храню в презентере состояния, это просто прослойка для связывания.

Google
Igor
12.02.2018
06:44:27
как выяснилось никак, поэтому, пришлось отказаться от него. koin не di контейнер, а вообще какой-то service locator
В общем, я нашел способ. Через setProperty() > а вообще какой-то service locator Да какая разница, главное что у меня в коде 0 аннотаций, а все зависимости прокидываются через конструктор. Единственное место где виден koin - это создание дерева-зависимостей и презентеров.

Sviat
12.02.2018
06:45:58
И что это будет? Вы инжектите презентер во Вью и хотите ещё и Вью в презентер? Циклическая зависимость

Igor
12.02.2018
06:48:45
И в чем проблема? У нас GC, а не ARC. Все зависимости идут на интерфейсы.

Vladimir
12.02.2018
09:32:08
привет. я собрал проект, и вот какие классы попали в jar файл: https://gist.github.com/marshall-lee/7579fc2c21769cbfc91e3925b260b868 в зависимостях я разумеется явно их не указывал, у меня там только kotlin-stdlib-jdk8. они правда нужны котлиновскому рантайму, или у меня билд плохо настроен?

Quantum Harmonizer
12.02.2018
09:45:23
то есть какие-то штуки из intellij нужны котлину в рантайме? Оо
Не «какие-то штуки из intellij», а библиотека с аннотациями.

Vladimir
12.02.2018
09:46:02
ок)

Sergey
12.02.2018
10:01:09
вроде бы они собираются убрать эту зависимость, если не ошибаюсь где то писали об этом

picty
12.02.2018
10:24:17
Ребята, подскажите, как можно у data class сделать приватными setters у переменных?

Алексей
12.02.2018
10:26:42
Ребята, подскажите, как можно у data class сделать приватными setters у переменных?
никак, скорее всего. Только ручками поле объявлять

Kuzma
12.02.2018
10:27:55
может кто-нибудь подсказать что за зверь такой Function Literals with Receiver, и для чего он нужен. прочитал доку на kotlinlang и пока что-то не сильно догоняю полезность сих функций

Kuzma
12.02.2018
10:41:54
типа для декларативного объявления чего-либо?

DarkMentat
12.02.2018
10:41:54
А не подскажете, что за зверь этот Detekt? И чем он лучше обычного линта, что в студию встроен?

Даниил
12.02.2018
10:46:46
по-хорошему линтер не должен зависеть от IDE, я считаю

DarkMentat
12.02.2018
10:47:26
ну он вроде и не зависит, те же градлотаски

емнип

просто в чем суть, хочу хоть какой-то линт подрубить. и в растерянности: есть стандартный, если всякие сторонние, что есть что и как быть?

Даниил
12.02.2018
10:48:39
ну сторонние это только detekt мб

Google
DarkMentat
12.02.2018
10:48:49
и ктлинт вродь

Даниил
12.02.2018
10:48:53
ktlint точно сырой

detekt хз

Igor
12.02.2018
10:50:01
типа для декларативного объявления чего-либо?
Ну да, тот же Anko на нем построен и позволяет весь UI описывать в коде, еще новый kotlin-gradle-DSL или html DSL из ktor. Если хочешь сделать красивый DSL, как в groovy (только стат. проверяемый), то это для тебя.

DarkMentat
12.02.2018
10:50:39
про линт: и не знаете, есть в стандартном варнинг про hardcoded strings? или какое-то уже готовое кем-то написанное правило?

Kuzma
12.02.2018
10:51:35
@angmarr пока что эта штука взрывает мне мозг =) спасибо ☕️☕️

DarkMentat
12.02.2018
10:51:39
линт джавовский ругает, котлиновский нет

Anton
12.02.2018
11:01:14
В чем сырость ктлинта?

Bogdan
12.02.2018
11:06:01
Ребята, подскажите, как можно у data class сделать приватными setters у переменных?
Нежную может уже ответили, после проперти пишешь прайвет в сет. В гуглани

Mikhail
12.02.2018
11:06:55
picty
12.02.2018
11:07:23
Нежную может уже ответили, после проперти пишешь прайвет в сет. В гуглани
в конструкторе не выйдет так: data class MyData(var title: String = "")

Mikhail
12.02.2018
11:07:31
В чем сырость ктлинта?
Он вроде ведь только кодстайл проверяет

Anton
12.02.2018
11:07:54
Да

А детект?

Mikhail
12.02.2018
11:08:28
А детект?
а детект - это статический анализатор

всякие правила типа "ветка else никогда не будет задействована" и прочие вещи

Bogdan
12.02.2018
11:09:10
в конструкторе не выйдет так: data class MyData(var title: String = "")
Пробуй написать его в теле, еще один и может идея подскажет. Я пока с компа зайду

Sergey
12.02.2018
11:10:19
сделать только сеттер приватным не получится, можно только все проперти целиком, а в теле добавить публичный геттер

data class MyData(private var _title: String = "") { val title get() = _title }

Google
Bogdan
12.02.2018
11:18:40
data class MyData(private var _title: String = "") { val title get() = _title }
может лутше в конструкторе булиный вал а внутри приватный вар?

Sergey
12.02.2018
11:20:06
в этом случае код разве не скмопилируется в ява класс с двумя полями? (если отдельно делать var)

если бы можно было убрать val из констркутора, то да. но в дата классе все параметры констркутра должны быть val/var

Sergey
12.02.2018
11:21:53
в моем примере будет только одно поле

val title get() = _title скомпилируется в String getTitle() { return _title; }

Bogdan
12.02.2018
11:23:05
да таки

декомпилировал

но смотрится страннл

Sergey
12.02.2018
11:25:18
ну, похожий пример есть в документации https://kotlinlang.org/docs/reference/properties.html#backing-properties

Anton
12.02.2018
11:31:55
да детект мощнее намного чем ктллинт) спасиб

picty
12.02.2018
11:32:40
ну, похожий пример есть в документации https://kotlinlang.org/docs/reference/properties.html#backing-properties
один из минусов - это необчень приходится "портить" название переменной в конструкторе или же геттер))

DarkMentat
12.02.2018
11:35:05
да детект мощнее намного чем ктллинт) спасиб
так а все же, зачем он, если есть стандартный?

Anton
12.02.2018
11:35:20
обычный линт?

он разве поддерживает котлин? вроде только начинает

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