
Никита?❄️
30.08.2018
11:32:45

Quantum Harmonizer
30.08.2018
12:14:47
> Любая либа становится круче и удобнее, если ты просто начинаешь использовать её из Котлина, просто по факту использования Котлина.
> У тебя аж голос изменился, так эмоционально всё описываешь.

Oleksandr
30.08.2018
12:22:22
это ж надо уметь, сука, выставлять недостатки за достоинства (на словах)

Google

Никита?❄️
30.08.2018
12:25:15
я помню мне в 2013 один кореш показывал в elixir потоки, как быстро они работают

Oleksandr
30.08.2018
12:25:24
Но как только я начну писать сложную бизнес-логику, делать какую-то иерархию классов, моделировать сложный домен, то в нетипизированном языке я очень быстро умру. Очень быстро. И всё это поддерживать будет невозможно. На этом строится философия Kotlin, он еще более типизированный, чем Java, еще более строгий. Это core belief в команде Kotlin, что язык промышленного масштаба должен быть строго типизированным
вот это чистой воды лицемерство

Nikita
30.08.2018
12:29:33
почему?

Oleksandr
30.08.2018
12:36:14
почему?
рассуждение "надо больше типов" правильное, я лично его поддерживаю
но
1) в котлине система типов ушла на пол-шага вперед относительно джавы, что превозносится как супер-достижение
2) главное, что баланс "насколько именно надо упороться по типам" диктуется разработчиками котлина

Quantum Harmonizer
30.08.2018
12:37:45

Oleksandr
30.08.2018
12:40:42
то есть, если развить аргумент про "строгую типизацию" (в кавычках, тк это точно определенный термин, и не имеет мало общего с контекстом из статьи), то надо переходить на условный хаскель
но вот так сходу это сделать, очевидно (не поймут-с), не получится, и нужна серия толчков в нужном векторе
именно то, что делается в, скажем, скале

Quantum Harmonizer
30.08.2018
12:41:48
ну так-то кроме скалы вообще все языки отстой

Nikita
30.08.2018
12:41:55
да не такая строгая эта типизация

Oleksandr
30.08.2018
12:41:56
котлин же занимает позицию "а мы тут улучшим синтаксис, чутка поправим систему типов, и будем орать, что у нас ФП язык"
вот это и бесит

Nikita
30.08.2018
12:42:17
да чувак самопиаром занимается

Google

Nikita
30.08.2018
12:42:23
че подпалился то?

Quantum Harmonizer
30.08.2018
12:42:28

Oleksandr
30.08.2018
12:42:30
по факту, это джава++, и в таком ключе котлин идеален

Nikita
30.08.2018
12:42:51
Java#

Quantum Harmonizer
30.08.2018
12:42:54
https://t.me/kotlin_lang/82711

Nikita
30.08.2018
12:42:55
XD

Anton
30.08.2018
12:44:03
то есть, если развить аргумент про "строгую типизацию" (в кавычках, тк это точно определенный термин, и не имеет мало общего с контекстом из статьи), то надо переходить на условный хаскель
но вот так сходу это сделать, очевидно (не поймут-с), не получится, и нужна серия толчков в нужном векторе
чому же сходу не получится, вот eta, например - просто взяли и начали делать, и вроде как процесс идёт и финасирование есть. собственно запиливают хаскель на жвм

Quantum Harmonizer
30.08.2018
12:44:31
да можно и без JVM)

Oleksandr
30.08.2018
12:45:31
то есть, надо делать свою экосистему
и вот тут возвращаемся к моменту, почему мне не нравится котлин: они хотят сесть на два несовместимых стула

Luger
30.08.2018
12:46:38

Oleksandr
30.08.2018
12:46:52
ну то есть офк можно хайберы со спрингами, но это редкость
но тогда херится концепт джавы 2
и в итоге получается полная каша

Luger
30.08.2018
12:50:01

Oleksandr
30.08.2018
12:50:26
можно, скала-джс так и делает

Google

Oleksandr
30.08.2018
12:52:25
часть поста про корутины читается как "ну крч мы сделали хуже, но так надо, и вообще, на самом деле, это лучше"
сделай они либу, вообще претензий не было бы
но нет

Quantum Harmonizer
30.08.2018
12:53:16
а ты необучаемый

Nikita
30.08.2018
13:11:40
Есть вопрос, distinct удалит все элементы кроме первого встреченого?
речь про collection stream

Никита?❄️
30.08.2018
13:12:00

Nikita
30.08.2018
13:12:08
ну понятно что дубликаты

Никита?❄️
30.08.2018
13:12:28
первый элемент останется, да
то есть 1 2 1 2 3 3 distinct даст 1 2 3

Nikita
30.08.2018
13:13:42
с цифрами то ок, а если
{{key0, val0}, {key1, val1}, {key0, val2}}
то останется {{key0, val0}, {key1, val1}}
?

Никита?❄️
30.08.2018
13:14:14

Nikita
30.08.2018
13:14:25
нет
лист пожо
но дистинкт по свойству

Никита?❄️
30.08.2018
13:14:49
смотри на реализацию equals

Евгений
30.08.2018
13:14:52
пожо сравнивается через equals и hashcode

Nikita
30.08.2018
13:14:58
ох

Google

Евгений
30.08.2018
13:15:12

Nikita
30.08.2018
13:15:25
это все понятно
не понятно первый или не первый)
может он их сортирует сначала или с конца идет

Евгений
30.08.2018
13:16:03
если equals возвращает true то они одинаковые

Никита?❄️
30.08.2018
13:16:11

Евгений
30.08.2018
13:16:12
не важно, первый или последний

Nikita
30.08.2018
13:16:18
важно

Евгений
30.08.2018
13:16:26
не важно

Nikita
30.08.2018
13:16:36
если eq сравнивает айдишники а кроме них есть другие поля

Admin
ERROR: S client not available

Евгений
30.08.2018
13:16:51
у тебя equals вообще определен?

Никита?❄️
30.08.2018
13:16:55
важно
{a a} {b a} {b b} {b b} -> disctinct -> size == 3

Евгений
30.08.2018
13:16:59
что значиьт "если"?

Mikhail
30.08.2018
13:17:16

Евгений
30.08.2018
13:17:26
@javastart ?

Никита?❄️
30.08.2018
13:17:32

Nikita
30.08.2018
13:18:27
я обьект обернул
мне надо миграцию сделать, чтобы дубликаты убрать
да кароче быстрее эксперимент провести)

Google

Евгений
30.08.2018
13:19:08
блин как ты в сет кладешь элементы?
здесь тоже самое
сделай new HashSet(list)

Никита?❄️
30.08.2018
13:20:02

Евгений
30.08.2018
13:20:28
еще можно повесить @EqualsAndHashcode
для ленивых

Nikita
30.08.2018
13:20:58
Inline:
public class EqualizeWrapper<T> {
private T t;
private Function<T, ?> getKey;
public EqualizeWrapper(T t, Function<T, ?> getKey) {
this.t = t;
this.getKey = getKey;
}
public T unwrap() {
return this.t;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
EqualizeWrapper<T> that = (EqualizeWrapper<T>) o;
return Objects.equals(getKey.apply(this.t), getKey.apply(that.t));
}
@Override
public int hashCode() {
return Objects.hash(getKey.apply(this.t));
}
}

Никита?❄️
30.08.2018
13:21:03
ну или создай класс-обертку, заэкстендься от нужного класа, override equals как тебе надо и в стриме .map юзай для получения нужного класса
совсем дикий вариант, но чё поделать)

Nikita
30.08.2018
13:21:21
дак так и есть
вопрос же был не как, а что будет)
XD

Никита?❄️
30.08.2018
13:23:26
он сделает 100500 сравнений equals
с предыдущими
и где true - те будут выкинуты из стрима

Nikita
30.08.2018
13:24:43
ну дак вот об этом и речь) первый или последний останется
по логике вещей последний)

Никита?❄️
30.08.2018
13:24:52
первый останется
но тебя это не должно волновать
они же равны)

Евгений
30.08.2018
13:25:24
они не равны
они разные!!111

Nikita
30.08.2018
13:25:43
ну с точки зрения алгоритма будут равны)