
Igor
27.04.2017
15:07:38

Quantum Harmonizer
27.04.2017
15:08:07
А где был я? Мне не нравится, что лямбда и fun имеют разный синтаксис :)

Igor
27.04.2017
15:09:03

Google

Quantum Harmonizer
27.04.2017
15:12:21
Что-то не понял, а как бы хотелось?
Чтобы все функции объявлялись одинаковым (консистентным) синтаксисом, например,
val work = { material: Material, instruction: Instruction -> }

Roman
27.04.2017
15:12:23

Quantum Harmonizer
27.04.2017
15:12:44
хотя нет, сайты вроде нормальные получились, но пхп больше не хочется.)

Roman
27.04.2017
15:13:15

Quantum Harmonizer
27.04.2017
15:14:16

Roman
27.04.2017
15:15:21
Роман, где ты раньше был (6 лет назад ??), когда проектировали язык?
на самом деле синтаксис лямбд понятное дело никто сейчас менять не станет. а вот такой неломающий ничего сахар добавить проблем не вижу. разработчики jetbrains немного живут в своем синтетическом вакууме, реальные продакшен кейсы им часто недоступны. они сами это признают и потом так открыты к мнению и запросам сообщества, что круто. если мы хотим что-то поменять и нас таких много, то думаю есть реальные шансы в каком-нибудь котлин 1.3 или 1.4 это получить

Boris
27.04.2017
15:15:44

Roman
27.04.2017
15:16:26
но если такое сделать, то и в if логично тоже самое добавить

Igor
27.04.2017
15:16:49

Roman
27.04.2017
15:16:52
будет свобода выбора

Google

Roman
27.04.2017
15:17:11
кроме того, не всегда нужно все кейсы обрабатывать, а when предполагает к этому

Quantum Harmonizer
27.04.2017
15:17:21

Boris
27.04.2017
15:18:21
в ифе-то зачем?

Quantum Harmonizer
27.04.2017
15:18:56

Roman
27.04.2017
15:19:03
или задепрекейтить ?
я считаю, что для распространения языка важна его интуитивность. if это традиционная конструкция, которая есть в Java и большинстве современных языков. депрекейтить if политически неверное решение

Boris
27.04.2017
15:19:06

Igor
27.04.2017
15:19:16

Quantum Harmonizer
27.04.2017
15:19:51

Roman
27.04.2017
15:20:05

Boris
27.04.2017
15:20:25
а концептуально-то?

Quantum Harmonizer
27.04.2017
15:21:11
То есть я отлично понимаю, что это наследие Джавы, и Котлин в этом плане гибрид Скалы с ней, но глаза почему-то режет.)

Boris
27.04.2017
15:22:15

Igor
27.04.2017
15:22:44

Roman
27.04.2017
15:27:52
В котлине и там уже много синтаксических фишек из-за которых часто разгараются споры как надо писать тот или иной код (ибо есть куча разных способов). Котлин бы уже чистить пора, а не добавлять туда больше такого сахара

Quantum Harmonizer
27.04.2017
15:28:59
Вот. Заменить if паттерн-матчингом. Для консистентности ?

Google

Roman
27.04.2017
15:31:22
Паттерн match нарушает DRY принцип. В языке где нет кортежей нет места паттерн-матчу, а кортежы в котлине были выпилены вполне сознательно: https://blog.jetbrains.com/kotlin/migrating-tuples/

Igor
27.04.2017
15:32:06

Quantum Harmonizer
27.04.2017
15:33:12
Я бы всё, где есть component*, рассматривал как кортеж, например.

Roman
27.04.2017
15:33:14
Do not repeat yourself (DRY). Если у вас есть data сlass у которого уже поименованы правильно поля, то зачем вам снова повторять эти меня завязывая на новые переменные с такими же именами?

Quantum Harmonizer
27.04.2017
15:34:14
Можно и не повторять.
when (Pair(1, 2)) {
(1, _) -> ...
(_, 34) -> ...
(_, _) -> ...
}

Roman
27.04.2017
15:34:16
Паттерн матч есть в языках где нету flow-sensiive typing. Это всё от древности. Наследие каменного века.
Да desctructuring в Kotlin это скорее зло, когда используется не с классами типа Pair/Triple а с произвольными data классами (я бы лично запретил).

Roman
27.04.2017
15:35:47

Roman
27.04.2017
15:36:04
Та кже известный в народе как smartcast

Roman
27.04.2017
15:36:39
да, так понятнее =)

Quantum Harmonizer
27.04.2017
15:37:05

Igor
27.04.2017
15:46:20
Та кже известный в народе как smartcast
Ну не знаю, мне кажется паттерн-матчинг удобнее, вот пример https://pastebin.com/hCrcaDNh
Плюс меньше неоднозначностей.
Ну да ладно, посмотрим что будет в 1.2/2.0

Quantum Harmonizer
27.04.2017
15:55:28

Igor
27.04.2017
15:56:12

Quantum Harmonizer
27.04.2017
15:56:16

Roman
27.04.2017
16:23:07
Весь этот pattern match выглядит абсолютно не maintenable. Добавил к User еще один атрибут и что всё переделывать? write-only код получается
Проект типа "Сделать и забыть" — пойдет. А Котлин все-таки изначально задумывался как язык чтобы проще было писать и поддерживать проекты » 1MLOC постепенно переводя их с Java на Kotlin

Quantum Harmonizer
27.04.2017
16:26:13
Раз уж говорим про LOC, любопытство взяло: сколько строк кода в IDEA CE? :)

? animufag ?
27.04.2017
16:28:49

Google

Руслан
27.04.2017
16:29:41

Roman
27.04.2017
16:30:45
Ну можно option atribute добавить, это раз. Но проблема не в этом. Проблема в том, что при росте числа атрибутов pattern match перестает быть удобен синтаксически. Он хорошо только для игрушечных примеров. С развитием и ростом кода, все-равно придется от них отказаться

Quantum Harmonizer
27.04.2017
16:30:55

Руслан
27.04.2017
16:33:45
нет, тут гитхаб не врет
интереснее сколько в ultimate

Admin
ERROR: S client not available

Руслан
27.04.2017
16:34:10
ну и еще тут плагины не учитываются

? animufag ?
27.04.2017
16:35:09

Руслан
27.04.2017
16:36:46
например
https://github.com/JetBrains/intellij-community/search?l=kotlin
https://github.com/intellij-rust/intellij-rust/search?l=kotlin

Quantum Harmonizer
27.04.2017
16:36:52

? animufag ?
27.04.2017
16:37:47
ммм. ну тогда лучше бы в котлине был бы deriving

Igor
27.04.2017
16:37:59

Roman
27.04.2017
16:44:22
Ну интерпрайз ещё долго на Java будет. Котлин позиционирует себя как язык прагматичный, для масс. Поэтому всё идёт через призму удобства и понятности.

Михаил
27.04.2017
21:40:43
Поясните знающие) в jvm в рантайме существует информация о параметрах типа дженериков?

Alexey
27.04.2017
21:41:30
поэтому в рантайме нет информации о типе дженерика

Михаил
27.04.2017
21:42:31
Но есть метод в джаве который их возращает)
Как он работает тогда?

Sergey
27.04.2017
21:44:18
какой метод?

Михаил
27.04.2017
21:45:03
ParameterizedType type = (ParameterizedType) screen.getClass().getGenericSuperclass();
Class screenClass = (Class) type.getActualTypeArguments()[0];
String geneticName = screenClass.getName();

Google

Михаил
27.04.2017
21:45:10
Рабочий код

Alexey
27.04.2017
21:45:26
и что он возвращает?
List<MyClass> вернет "MyClass" ?
geneticName ?

Михаил
27.04.2017
21:45:57
Ну именно этот код нет
Но да

? animufag ?
27.04.2017
21:46:07

Михаил
27.04.2017
21:46:10
Вернет с именем пакета

Alexey
27.04.2017
21:46:21
интересно, хмм?

? animufag ?
27.04.2017
21:47:24
ну да интересно, что везде говорят что в рантайме информация о дженериках теряется

Alexey
27.04.2017
21:48:15
вот пишут что стирается тип

Михаил
27.04.2017
21:48:21
Я ток могу предположить что метод выводит как то тип

? animufag ?
27.04.2017
21:49:23
ну ок тут статейку нагуглил

Михаил
27.04.2017
21:49:23
https://docs.oracle.com/javase/7/docs/api/java/lang/reflect/ParameterizedType.html

? animufag ?
27.04.2017
21:49:27
https://habrahabr.ru/post/66593/