@kotlin_lang

Страница 297 из 982
Михаил
30.08.2017
10:29:41
А почему сразу не вынести это дело в дефолтные аргументы?

Алексей
30.08.2017
10:30:17
а милисекунды точно не изменятся?)

если я каждому присвою System.currentTimeMillis

Михаил
30.08.2017
10:32:22
В дефолтных аргументах можно юзать другие аргументы

Google
Quantum Harmonizer
30.08.2017
10:32:23
Алексей
30.08.2017
10:33:31
так у пользователя могут меняться данные

как их не изменять?)

Igor
30.08.2017
10:33:52
Алексей
30.08.2017
10:34:01
а не накладно?

копировать объекты вместо изменения одного значения

Quantum Harmonizer
30.08.2017
10:36:27
а не накладно?
Не особо, если не нужно скопировать несколько миллионов пользователей в цикле.

Quantum Harmonizer
30.08.2017
10:36:52
Вообще, можно создать дополнительный конструктор, который просавит все time в currentTimeMillis().

Алексей
30.08.2017
10:38:03
А это точно data class?
согласен, учитывая что дата классы должны служить только для хранения данных - возможно я и не прав что его таким сделал

Quantum Harmonizer
30.08.2017
10:39:57
data class — это обычный класс, который поддерживает hashCode, equals, toString, copy и destructuring. Использовать его можно как угодно.

Алексей
30.08.2017
10:41:24
ну кстати, про copy наверное верный шаг

https://kotlinlang.org/docs/reference/data-classes.html

Google
Алексей
30.08.2017
10:41:32
надо было сразу сюда залезть)

всем спасибо)

? animufag ?
30.08.2017
12:19:44
ну окей, в любом случае, что есть тесты для такой штуки, попробовать взять все зависимости ? это пару строк кода )
а как тестятся зависимости в активити? роболектрик? или просто пишешь зависимости в тесте и этого достаточно?

Va
30.08.2017
12:21:43
а как тестятся зависимости в активити? роболектрик? или просто пишешь зависимости в тесте и этого достаточно?
биндинги сами по себе, в этом и прелесть, робоэлектрик тут не нужен ты тестишь модули, контекстуально тебе пофиг, где они лежат

Deni
30.08.2017
12:54:41
inline fun <T> (() -> T).callIf(predicate: () -> Boolean): T? { return if (predicate()) this() else null }

Подскажите, есть подобный метод готовый

Или как можно выполнить это же в одну строчку без своего экстеншена и без if else

? animufag ?
30.08.2017
13:02:25
чем это удобнее if (predicate()) { f() }

Ivan
30.08.2017
13:02:49
Нужно меньше кода

? animufag ?
30.08.2017
13:02:57
это ведь по сути не комбинатор тыт тут же вызываешь функцию

Igor
30.08.2017
13:03:54
Нужно меньше кода
Покажи как пример, как ты ее юзаешь

? animufag ?
30.08.2017
13:04:06
понимаю вот сделать чтобы функция вызывалась если аргументы не нулы – вот это реально жиза и там неплохо бы сэкономить на строках

Dmitry
30.08.2017
13:15:47
Подскажите, есть подобный метод готовый
разве что (...).takeIf { predicate }?.run { blabla }

Deni
30.08.2017
13:16:59
чем это удобнее if (predicate()) { f() }
Так ведь возвращаемый тип

Причем nullable

? animufag ?
30.08.2017
13:17:37
ну так в скопе ифа работать? или ты про то что лень else { null } ?

Deni
30.08.2017
13:18:09
Да

Mi
30.08.2017
13:23:24
зачем там вообще нул возвращать

если можно ничего не возвращать

если функция ничего не возвращает

Google
Mi
30.08.2017
13:23:43
это же не джава

хотя нет, в данном случае нельзя

а жаль

Deni
30.08.2017
13:50:00
)

Алексей
30.08.2017
13:55:57
https://stackoverflow.com/questions/35914095/package-protected-alternative-in-kotlin Блин, это правда что из-за 5 классов надо отдельный модуль создавать?)

Sergey
30.08.2017
14:06:19
боюсь спросить зачем вам понадобился package private

Алексей
30.08.2017
14:09:09
ну есть у меня допустим пакет с базой данных, там: - sqliteopenhelper - класс с моделью бд - интерфейс с методами взаимодействия с бд - класс, наследник от интерфейса - 2 класса провайдера с тупо методам аля «получить что надо из бд» вот я хочу чтобы классы, что находятся вне пекейджа видели только классы - провайдеры, а о существовании остального не знали

Va
30.08.2017
14:10:28
х%&ярь все в один файл )))) а по теме, если у тебя прям настолько независимо все, то это действительно должен быть отдельный модуль

желательно еще и в либу вынесеный ?

Maxim
30.08.2017
14:11:02
в ответе же поясняется, что package private на самом деле никакой не private, потому что любой может создать такой же пакет, и внутри него обращаться к тем классам, которые по идее должны были быть скрыты

? animufag ?
30.08.2017
14:11:42
inline fun <T> (() -> T).callIf(predicate: () -> Boolean): T? { return if (predicate()) this() else null }
короче для функций эти расширения нет никакого смысла делать. нужен fun<T> Boolean.ifTrue(getT: () -> T): T? = if (this == true) getT() else null

Алексей
30.08.2017
14:11:46
верно, но это скорее моральное успокоение) т.к после прогварда мало кому захочется создавать пакет a.b.c.d и вызывать там методы a,b,c ?

тут скорее чтобы коллеги не могли начать вдруг писать например методы прямых sql запросов

Maxim
30.08.2017
14:14:14
тут скорее чтобы коллеги не могли начать вдруг писать например методы прямых sql запросов
а) создать модуль б) поставить рядом возле себя канделябр, и как только коллеги начинают применять методы прямых запросов - канделябром по е*алу

Алексей
30.08.2017
14:14:21
=)

спасибо

Boris
30.08.2017
14:15:32
Ещё можно в один файл положить и сделать приватными

Алексей
30.08.2017
14:15:55
ну это же не вариант)

Igor
30.08.2017
14:19:16
Еще можно использовать модулярную-визибилите (доступно с Android Z ?)

Google
Глеб
30.08.2017
20:04:25
Всем доброго времени суток

Господа, а есть чатик по котлину?

Я, кажется, баг нашел

http://i.imgur.com/ihYblP2.png

val fullName ловит в this класс, из которого происходит доступ к полю

в итоге получается забавная шляпа

http://i.imgur.com/tlJhWEH.png

Вопрос: баг или я что-то сделал не так?

Ivan
30.08.2017
20:08:15
Ну хотя так и с джавой не сложно сделать

Глеб
30.08.2017
20:09:09
И всё-таки, не смотря на то, что причины такого поведения мне, в целом, понятны, хотелось-бы узнать, так оно и должно быть, или это ошибка в компиляторе?

Пока что больше похоже на второе

Ivan
30.08.2017
20:12:15
Захватил ссылку просто

Сделай по человески, нормально

И проблемы не будет

Dibro
30.08.2017
20:13:36
И проблемы не будет
баг все равно есть

Глеб
30.08.2017
20:13:52
Сделай по человески, нормально
а можно мудрое наставление?

тут, вроде, буквально одна строчка кода, и я слабо представляю как будет "по-человечески" в данном случае

Ivan
30.08.2017
20:14:24
Никакого бага нет, ссылка остаётся и все. Я так ловил раз эксеншн когда якобы пытался активити в реалм сохранить

Ну вот перепиши без летов этих, и проверь

Google
Ivan
30.08.2017
20:15:21
Вангую все будет ок

Глеб
30.08.2017
20:15:32
Всё ок даже если там fun вместо val

Но есть нюанс (c)

Dibro
30.08.2017
20:16:13
Никакого бага нет, ссылка остаётся и все. Я так ловил раз эксеншн когда якобы пытался активити в реалм сохранить
как я понял, this в этом контексте имеет значение объекта в котором оно вызывается, это уж точно неадекватное поведение

Ivan
30.08.2017
20:16:19
Ну лет это же new Object () {{ }} В джаве, да?

Если да, то в этом и проблема)

Глеб
30.08.2017
20:16:44
Если-бы...

тогда this указывал-бы на анонимный Object

или как там его

а так this указывает на объект, запросивший поле fullName

и по счастливому совпадению у этого объекта также было поле name

иначе я и вовсе поймал-бы краш

Dibro
30.08.2017
20:18:09
посмотри байткод

может там что полезное

Ivan
30.08.2017
20:18:44
1) It declares an anonymous class which extends the class you use in the constructor and 2) creates an instance of this anonymous class.

Глеб
30.08.2017
20:18:59
оффтоп: @Dibro, демон, ты как буквы перевернул!?

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