@kotlin_lang

Страница 170 из 982
? 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
Sergey
02.06.2017
16:46:17
tkbo

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

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
чет не врубаюсь в сиалед классы. похоже на энамы и единственный кейс где применяется в доках - when-is . зачем они вообще?
Можешь почитать про кейс-классы в Scala, они тоже самое или про union-типы. Вот на википедии чуток описано про обо https://en.wikipedia.org/wiki/Tagged_union

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
спасибо)

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
в данном у вас случае in AbstractPresenter
неа, там инвариантность

есть дженерик является типом поля, то он находится в инвариантной позиции

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
Наверное имели ввиду ко или контр вариативность
вот там как раз таки не "ко" и не "контра"

Ctrl+Alt+Shift+K
это не поможет, тут все сложно для котлин-плагина )

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
abstract class AbstractView<T : AbstractPresenter> { lateinit var presenter: T }
проблема в том, что в котлине нужно явно указать дженерик у AbstractPresenter в данном случае

Alexey
03.06.2017
07:32:16
проблема в том, что в котлине нужно явно указать дженерик у AbstractPresenter в данном случае
не пойму что вы хотите. вот: open class AbstractPresenter class SimplePresenter : AbstractPresenter() abstract class AbstractView<T : AbstractPresenter> { lateinit var presenter: T } class SimpleView : AbstractView<SimplePresenter?) что не так? как вам нужно?

Михаил
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
оценку такого кода на котлине я дать не могу, но вы подумайте над архитектуруй. Вы что-то не то совсем творите.
Краткое описание этого кода: Даны абстрактные классы для MVP. В дженерике AbstractView декларируется презентер, который будет полем для данной вью и будет делать takeView и dropView в необходимых местах. В дженерике AbstractPresenter декларируется вью, которая будет приниматься этим презентером в методах takeView и dropView. Model можно опустить, она тут роли не играет

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

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

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




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

Тогда котлин все правильно делает :)

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)? Когда вижу такое в чатах про андроид-архитектуру, это всегда приходит на ум.

? 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

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