
? animufag ?
02.06.2017
15:57:03
что

Михаил
02.06.2017
15:57:20

Quantum Harmonizer
02.06.2017
15:57:38
напробывались у друга :)

Михаил
02.06.2017
15:58:03

Google

? animufag ?
02.06.2017
15:58:51
серьёзно? а как так... citation needed
а ещё сейчас за англ пояснят

mitya
02.06.2017
16:32:26

? animufag ?
02.06.2017
16:34:39
давайте определимся. есть такое слово пробывал (был), которое не имеет отношения к пробовал (проба)

Boris
02.06.2017
16:37:57

? animufag ?
02.06.2017
16:39:19
ну бывал то точно есть
почему бы и не докинуть про или по в начало

Anton
02.06.2017
16:40:28
пробыл вместо пробывал

Михаил
02.06.2017
16:40:36

Михаил
02.06.2017
16:43:34

Sergey
02.06.2017
16:46:17
tkbo

Anton
02.06.2017
17:00:43
чет не понимаю к чему эта ебля с open final обязательном указании override

Pavel Shackih
02.06.2017
17:01:52

Google

Anton
02.06.2017
17:02:57
там обоснование почему это удобно?)

Михаил
02.06.2017
17:03:11
da

Anton
02.06.2017
17:03:24
ок спс)
чет не врубаюсь в сиалед классы. похоже на энамы и единственный кейс где применяется в доках - when-is . зачем они вообще?

Юра
02.06.2017
18:47:19
У enum'a не может быть разных наборов полей

Михаил
02.06.2017
18:48:23
тоже не знаю пчастых кейсов для силед классов)

Boris
02.06.2017
18:49:41
Мне тоже не приходилось использовать, но я так понимаю, что в функциональном стиле они как-то лучше играют

Igor
02.06.2017
18:52:10

Anton
02.06.2017
18:52:37
спасибо

Igor
02.06.2017
18:53:40
Последнее время только на них и инвариантные модели в биз. домене, но я правда без OOP вообще пишу.

Anton
02.06.2017
18:54:18
если писать в ооп они могут вообще никогда не пригодится?

Михаил
02.06.2017
18:55:12
В джаве же без них живут)

Anton
02.06.2017
18:56:39
ну там мног обез чего живут)

Михаил
02.06.2017
18:58:03
Ну может во ток вариант что ты пишкшь библу и тебе надо унаслкдоваться, но чтобы в клиентском коде это было невозможно

? animufag ?
02.06.2017
18:59:09
ну например ты можешь сделать двух разных наследников у класса и по разному определить у них реализацию метода
либо можешь сделать енум с полями и глобальную функцию, которая через when обходит.
и то и другое вроде одинаково легко тестируется и в целом взаимозаменяется. ну плюсы/минусы вроде можно повыдумывать
попробуй сделать парсер в ast. вроде ощущается в таком случае профит

Igor
02.06.2017
19:03:12
если писать в ооп они могут вообще никогда не пригодится?
Вон @HeapyHop говорил что сделал из него такое (воспроизвел по памяти)
sealed class Result<out T>
class Success<T>(val value:T): Result<T>()
class Failed(e: Exception): Result<Nothing>()
Это типа как Option в java, чуток функциональщины в ООП языке. Для чего-то большего наверное не пригодится.
А вот Бреслав объясняет, как sealed class в противовес ООП решает expression-problem
https://youtu.be/9x6utkLDBs8?t=14m7s

Anton
02.06.2017
19:05:06
спасибо)

? animufag ?
02.06.2017
19:05:26

Igor
02.06.2017
19:06:20
Поправил код (писал без IDEA)

Google

? animufag ?
02.06.2017
19:06:42
не говорю что его там обязательно нет. просто не знаю зачем он там

Igor
02.06.2017
19:08:03
Нужно тип проставить, я же наследуюсь от дженерик типа

? animufag ?
02.06.2017
19:12:01
ну да
https://github.com/FineCinnamon/Katz/blob/master/katz/src/main/kotlin/katz/data/Option.kt#L118
тут ещё забавней

Igor
02.06.2017
19:14:58
Когда у кейса нет аргументов в конструкторе (у Failed есть) я тоже обычно object использую.
Мне еще кажется что
when (x) { is A -> {…}; is B -> {…}, …}
уже никогда не оптимизируют (Бреслав вон еще в 2013 обещал) - тк sealed класс это редкий кейс, а Hotspot все сам оптимизируют.
Страдают только полтора андроид разработчка, которые пытаются “паттернматчить” на далвике.

Михаил
03.06.2017
06:59:20
Ребят, как такую ситуацию в котлине реализовать?
(имеются в виду дженерики)

Alexey
03.06.2017
07:14:19
https://kotlinlang.org/docs/reference/generics.html

Михаил
03.06.2017
07:15:19
читал
там все печально

Alexey
03.06.2017
07:23:12
в данном у вас случае in AbstractPresenter

Михаил
03.06.2017
07:25:33
есть дженерик является типом поля, то он находится в инвариантной позиции

Alexey
03.06.2017
07:27:49
T:AbstractPresenter?

? animufag ?
03.06.2017
07:27:57

Антон
03.06.2017
07:28:13
Ctrl+Alt+Shift+K

Google

Михаил
03.06.2017
07:28:17

Admin
ERROR: S client not available

Alexey
03.06.2017
07:29:26
abstract class AbstractView<T : AbstractPresenter> {
lateinit var presenter: T
}

Михаил
03.06.2017
07:30:02

Alexey
03.06.2017
07:32:16

Михаил
03.06.2017
07:33:11
http://jetbrains.github.io/kotlin-spec/#_finite_bound_restriction
тогда такой вопрос: что мне указывать в дженериках в этих двух местах?

Alexey
03.06.2017
07:41:15
оценку такого кода на котлине я дать не могу, но вы подумайте над архитектуруй. Вы что-то не то совсем творите.

Михаил
03.06.2017
07:45:55
Данный код с дженериками в джаве работает на ура и очень даже удобен, т.к. позволяет в Abstract-классы вынести бойлерплейт код MVP

Ivan
03.06.2017
07:53:03
Покажи код на джаве этот

Михаил
03.06.2017
07:53:49

Ivan
03.06.2017
07:54:58
А ну вы просто затираете дженерик
Тогда котлин все правильно делает :)

? animufag ?
03.06.2017
07:56:23

Google

Михаил
03.06.2017
07:56:39
кроме того, слово "инвариантный", как и слова "ковариантный" и "контравариантный" встречаются в самих доках котлина по дженерикам

Ivan
03.06.2017
07:59:44
Бомбануло же как у меня mPresenter
Убивал бы

Igor
03.06.2017
08:00:56
Интересно, а есть выражение generic-hell (по типу callback-hell)?
Когда вижу такое в чатах про андроид-архитектуру, это всегда приходит на ум.

Alexey
03.06.2017
08:01:16

Михаил
03.06.2017
08:01:17

? animufag ?
03.06.2017
08:01:26

Igor
03.06.2017
08:04:34
Кстати в Kotlin есть магическая аннотация @UnsafeVariance, для блокировки таких ошибок.

Михаил
03.06.2017
08:12:03
попробуй так:
open class AbstractView<P : ViewPresenter<in View>>(context: Context, attrs: AttributeSet) : FrameLayout(context, attrs)abstract class AbstractPresenter<V> : ViewPresenter<V>() where V : View, V : IView

Михаил
03.06.2017
08:12:39