
Денис
09.10.2018
11:30:11
(я всё к тому, что получился ну какой-то супербессвязный набор слов, ну да ладно)
Отправка автора в рид-онли на сутки вошла во второй раунд

Andrew
09.10.2018
11:30:32
Но с неожиданным витком — заговорили о continue / break.

Nick
09.10.2018
11:36:13
Подскажите, можно ли как-то прочекать в геттере переменной её значение не уходя в рекурсию?

Google

Alexandr
09.10.2018
11:36:32
мдэ...

Alexander
09.10.2018
11:37:25
Удивительно. Отловил ошибку. Пишу lu[row, col] /= luDiag - ошибка генерации байт-кода, пишу lu[row, col] = lu[row, col] / luDiag - работает. Все тут: https://youtrack.jetbrains.com/issue/KT-27469

Vladimir
09.10.2018
11:37:40

Beholder
09.10.2018
11:37:43

Алексей
09.10.2018
11:38:49

Nick
09.10.2018
11:38:53

Beholder
09.10.2018
11:39:17
а то!

Nick
09.10.2018
11:39:31
Найс, спасибо

dimiii
09.10.2018
11:44:56

Beholder
09.10.2018
11:45:45
на ассемблере завсегда быстрее

Alexander
09.10.2018
11:51:55
Проблема с математическими либами в том, что нет общего интерфейса. Они все написаны во времена, когда было только процедурное программирование и про интерфейсы вообще слыхом не слыхивали

Andrey
09.10.2018
11:59:47

Google

Alexander
09.10.2018
11:59:58
Пример?

Руслан
09.10.2018
12:05:25

Alexandr
09.10.2018
12:06:28

Bogdan
09.10.2018
12:10:56

Dmitry
09.10.2018
12:11:57
Всем привет! А кто корутинами пользуется? Вопрос такой - как мне оптимальнее с разных методов (например онклик на два разные кнопки) отменять действие, скажем, запроса - и посылать последнее изменение без предыдущих? Первый вариант который я накопал - это через job.cancel() - new Job() . Но я думаю есть что то более лучшее, никто не подскажет? Пример кода или ссылочку на почитать.
Первый вариант:
private var jobRequest = Job()
fun someMethod1() {
jobRequest.cancel()
jobRequest = Job()
launch(UI + jobRequest) {
delay(3000)
// do something 1
fun someMethod2() {
jobRequest.cancel()
jobRequest = Job()
launch(UI + jobRequest) {
delay(3000) // time msec
// do something 2
}
}

Alexander
09.10.2018
12:12:25

Alexey
09.10.2018
12:13:53

Жабра
09.10.2018
12:18:06
https://paperpaper.ru/papernews/2018/10/09/jetbrains-i-politeh-zapustili-sovmestnyj-onla/

Dmitry
09.10.2018
12:20:51

Жабра
09.10.2018
12:22:31

Dmitry
09.10.2018
12:24:16
@Gabrodih ну то есть тоже по сути через new Job - job.cancel() ?

Жабра
09.10.2018
12:24:58
Все запущенные корутины в наследниках этого класса будут автоматически его использовать
Можно будет явно указать другой контекст
Но по дефолту Main

Dmitry
09.10.2018
12:25:56
@Gabrodih понятно. Прикольно. Я слышал еще способ через actor , но пока не смог разобраться как это может выглядеть

Google

Nameless
09.10.2018
12:44:52

Quantum Harmonizer
09.10.2018
12:45:19

Nameless
09.10.2018
12:45:25
а зачем?

Quantum Harmonizer
09.10.2018
12:45:42

Nameless
09.10.2018
12:46:04
а как иначе?
приватный сеттер чем хуже? какую проблему не решает?

Quantum Harmonizer
09.10.2018
12:46:14

Nameless
09.10.2018
12:48:21
nullability
Можно обойтись через объект заглушку с интерфейсом View, поопрятнее будет имхо и ссылку на настоящий View не будем держать

Quantum Harmonizer
09.10.2018
12:54:09

Nameless
09.10.2018
12:54:32

Andrey
09.10.2018
13:23:03

Руслан
09.10.2018
13:25:36

Руслан
09.10.2018
13:26:10
Аннотировать сам вызов разве что

Andrey
09.10.2018
13:28:00
А что в фп принято интерфесить ?
Ну в статически типизированном (Hindley–Milner based) ФП принято typeclass использовать.
typeclass - тот же интерфейс, даже получше в плане функциональности.

Alexey
09.10.2018
13:31:01

Quantum Harmonizer
09.10.2018
13:31:09
Вот мне кажется, что это самое непопулярное ключевое слово.
Проблема может возникнуть тогда, когда его сломают, а заметит только 1.5 человека. После релиза.

Руслан
09.10.2018
13:32:02

Andrey
09.10.2018
13:32:15

Google

Andrey
09.10.2018
13:33:48
Да и вообще как-то странно раздувать стек возврата хвостовыми вызовами.

Alexey
09.10.2018
13:34:54

Andrey
09.10.2018
13:36:44

Alexey
09.10.2018
13:37:48

Andrey
09.10.2018
13:38:23
Только всё одно, с трамплином немного более громоздко по коду получается, плюс хвостовые вызовы долгие будут и в куче будет много короткоживущих объектов.
В языке, в котором есть циклы, вообще можно отказаться от хвостовой рекурсии. Рекурсивными делать только вызовы не сводящиеся к хвостовым.
Опять же, читаемость потеряется, так как вычисления будут "размазаны" по коду, который их организует, но принципиальных проблем нет.
Вот в чистых ФП языках - да, без оптимизации никак. Там же кроме рекурсии нет других способов реализовать итеративные вычисления.


Костя
09.10.2018
13:51:37
Всем привет, подскажите момент с дженериками:
есть такое наследование
HouseCardAdapter : BaseCardAdapter<House>
BaseCardAdapter<R : Realty> : ArrayAdapter<R>
House : Realty
и как мне описать глобальный филд adapter, когда пишу так
var arrayAdapter : ArrayAdapter<Realty>, то при создании
arrayAdapter = HouseCardAdapter()
получаю compile-time error
вопрос как правильно описать глобальный филд, чтобы он работал с разными адаптерами

Admin
ERROR: S client not available

Костя
09.10.2018
13:53:19
в будущем будет LandCardAdapter : BaseCardAdapter<Land>
надо чтобы я могу инитить его и HouseCardAdapter и LandCardAdapter

Sergey
09.10.2018
13:54:16
https://twitter.com/kotlin/status/1049657568413540357/photo/1

Костя
09.10.2018
13:56:14
а иметь бы одну переменную

Andrey
09.10.2018
13:57:21

Костя
09.10.2018
13:58:51
ну вообще всё так же
кроме out
но ошибка

Andrey
09.10.2018
13:59:04
Точнее даже не так. Достаточно, чтобы ArrayAdapter был ковариантен.
Ну так out и есть ковариантность

Google

Костя
09.10.2018
13:59:29
ArrayAdapter стандартный джавовский - андройдовский
похоже туда out не впилить
это не мой класс я от него только наследуюсь

Andrey
09.10.2018
13:59:59
Тогда никак. Дженерики инвариантны по умолчанию.

Костя
09.10.2018
14:00:25
эх..
придется что ли 2 переменные держать

Andrey
09.10.2018
14:00:38
Ну или val fld: ArrayAdapter<*> = HouseCardAdapter()

Костя
09.10.2018
14:01:06
так не работает тоже, метод есть там addAll
который принимает коллекцию
и вот он ругается, n&r^ звездочка непоределенная коллекция

Andrey
09.10.2018
14:02:18
который принимает коллекцию
Тогда вы хотите странного. У вас тип поля не может гарантировать, что вы в HouseCardAdapter не начнёте пихать Land
Поэтому система типов вам такое и не даёт

Костя
09.10.2018
14:03:06
а если переопределить у каждого addAll
метод
может помочь как-то ?

Andrey
09.10.2018
14:04:03

Костя
09.10.2018
14:04:09
я вроде понимаю в чем дело, просто андройдовский ArrayAdapter просто <T> то есть он держит массив каких-то элементов, может чистить его, добавлять, принимать
странно что не получается сделать какой-то адаптер которому неважно чем его инитить лишь бы наследниками ArrayAdapter
точнее это сделать можно через *
но вот как сделать добавление чтобы работало