@kotlin_lang

Страница 116 из 982
Igor
27.04.2017
15:07:38
и да, это как раз про случаи, когда смарт касты не работают
Роман, где ты раньше был (6 лет назад ??), когда проектировали язык?

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

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

Roman
27.04.2017
15:12:23
Роман, где ты раньше был (6 лет назад ??), когда проектировали язык?
я вообще тогда не занимался ни джавой ни андроидом, под оракл писал =)

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

Quantum Harmonizer
27.04.2017
15:14:16
почему будут ифы не нужны? а else как?
when (val x = x, val y = y) { (null, null) -> ... (null, _) -> println(x) }

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
when (val x = x, val y = y) { (null, null) -> ... (null, _) -> println(x) }
да, нормально, хоть и не привычно

но если такое сделать, то и в if логично тоже самое добавить

Igor
27.04.2017
15:16:49
Чтобы все функции объявлялись одинаковым (консистентным) синтаксисом, например, val work = { material: Material, instruction: Instruction -> }
Подожди, это сейчас валидная лямбда, а ты хотел бы: class MyClass { val doWork = { material: String, instruction: Int -> "hello world" } } Тут doWork считался методом?

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
А я хотел бы стереть разницу. Лямбда === функция. :)
Если по честноку, я пишу такой код в продакшене: class AnalyticsFunctions( val send: (GoogleEvent) -> Unit = ignore(), val sendGoogle: (String) -> Single<Unit> = ignore()) и поля юзаю как методы

Quantum Harmonizer
27.04.2017
15:19:51
Boris
27.04.2017
15:20:25
Есть конечно. fun === метод, лямбда === анонимный класс.
ну как там это внутри сделано это второй вопрос, это и поменяться может

а концептуально-то?

Quantum Harmonizer
27.04.2017
15:21:11
а концептуально-то?
Неконсистентно.

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

Boris
27.04.2017
15:22:15
Не может, потому что бинарная совместимость.
так совместимость это не значит, что не может меняться, это значит, что не может меняться несовместимо :-)

Igor
27.04.2017
15:22:44
Я не считаю, что они в вакууме. Они не хотят тащить в язык ВСЕГО И ПОБОЛЬШЕ, и я с ними в этом более-менее согласен. Для каждый фичи должны быть серьёзные причины.
Вот тут, однозначно да. Я тут как-то бегал-кричал что в Kotlin нужны "алиасы на пакеты", но через пару месяцев (да посмотрев как на Scala) в итоге понял всю мудрость авторов языка ? и перешел на object - ведь у них есть куча плюсов, по сравнению с функциями на топ левеле.

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/

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:36:04
Та кже известный в народе как smartcast

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

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

Igor
27.04.2017
15:56:12
2.0 не планируется :)
Вообще? А я рассчитывал хотя бы к 2022)

Quantum Harmonizer
27.04.2017
15:56:16
Вообще? А я рассчитывал хотя бы к 2022)
Андрей Бреслав сказал, что ломать ничего не собираются =)

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
Весь этот pattern match выглядит абсолютно не maintenable. Добавил к User еще один атрибут и что всё переделывать? write-only код получается
на самом деле если у тебя класс используется повсеместно и ты его изменяешь то как бы энивей тебя ждут проблемы

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

Quantum Harmonizer
27.04.2017
16:30:55
https://github.com/JetBrains/intellij-community/
200к комитов, 106 веток, 48к релизов, 2% кода на Котлине... я подслеповат?)

Руслан
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
Ну можно option atribute добавить, это раз. Но проблема не в этом. Проблема в том, что при росте числа атрибутов pattern match перестает быть удобен синтаксически. Он хорошо только для игрушечных примеров. С развитием и ростом кода, все-равно придется от них отказаться
да. есть такое. я думаю что есть ситуации где класс это именованый тупл и его удобно матчить и он используется просто как возврат результата работы функции. и есть обычные сущности из бизнес логики которые постоянно обрастают и их матчить не стоит. да и их дата классами не делают наверное. ну, наверное, у тебя найдётся контрпример - я просто внёс своё мнение

Руслан
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

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

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

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

Alexey
27.04.2017
21:41:30
Поясните знающие) в jvm в рантайме существует информация о параметрах типа дженериков?
насколько мне известно происходит type erasure. Т.е. во время компиляции дженерики заменяются кастами

поэтому в рантайме нет информации о типе дженерика

Михаил
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
Ну именно этот код нет

Но да

Михаил
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
Ну именно этот код нет
https://docs.oracle.com/javase/tutorial/java/generics/erasure.html

вот пишут что стирается тип

Михаил
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/

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