Size: a a a

Чат подкаста «Разбор Полётов»

2020 May 19

AL

Alexander Levin in Чат подкаста «Разбор Полётов»
Anton Arhipov
Там пример:

Val email = user.email

Как это писать по другому?

Val email = user

А компилятор пускай сам достанет из юзера что надо, так что-ли?
Эта строка написана вроде, что только этот вариант в Котлине гарантирует, что ты не взорвёшься из-за добавления нового параметра.
источник

ПФ

Паша Финкельштейн... in Чат подкаста «Разбор Полётов»
Ну и одно поле вытаскивать как val (name) = user. Это вырожденный случай, но может работать
источник

AA

Anton Arhipov in Чат подкаста «Разбор Полётов»
Andrey Listochkin
/cc @JBaruch

Язык хороший. Когда появился в 2016м, в него положили кучи приятных вещей, которые облегчали людям жизнь. По эргрномике язык (не окружения - ide, тулзов, библиотек) был близок к его тогдашним современникам - TS и Swift. Но имхо развиваться дальше он не стал так же быстро, как TS, и после TSа писать на Котлине очень кринжово. Вроде бы все так, но шаг вправо-влево и не хватает мелочей.

Например, array и object destructuring в Котлине работает не по именам, а по позициям полей. Штааа???

У меня есть класс, в нем id, username, email типов int, string, string. Я в коде пишу

val (id, username, email) = user;

все круто.

Теперь прилетяет реквест юзерам роли добавить. Я добавил поле role: string после юзернейма, и теперь в строке выше в переменную email попадет роль. Компилятор и Идея мне ничего не скажет. Получается, позиционные аргументы я не могу юзать без опасений. И я в 2020м году должен писать кода вида

val email = user.email;

как какой-то крестьянин.

Еще напрягает то, как в языке сделаны Корутины. Ты делаешь контекст, в нем уже можешь awaitить. Но из-за того, что асинхронный код в языке явно не виден, в Идее для мест разрывов управления слева добавлен еще один столбик гаттеров и рисуются такие извилистые стрелки. Язык создавался для JVM - среды, где полно синхронного io, и есть большой риск помешать в одном куске кода бликирующие вызовы и корутины. Явно нужно было для корутин сделать синтаксис. Его не сделали, и получается, что в свою среду разработки пришлось добавлять костылики, чтоб визуально асинхронщина была видна. Ну а если ты Котлин пишешь не в их ide, то ссзб, страдай.

Также мне как человеку, который 10 лет под JVM не писал, был непонятен зоопарк с Фьючерами. Чтобы юзать корутины, нужно все джавашные фьючи конвертить в котлиновские. Чем джавашные не угодили я хз. Но даже если и так, что, нельзя автогенерить при компиляции код для конверсии? И нельзя было его сделать для Scala/Akka фьюч и их аналогов в Clojure и мб Groovy (хз есть ли они там). А так пришлось писать дополнительные методы для конвертации ручками.

Опять же. В один мавен артифакт нельзя положить код на Java, Scala, и Kotlin сразу. Почему? Я чего-то думал, что все компилится в .class-файлы и они совместимы между собой. Почему все эти "языки будущего" на JVM за 6-17 лет не смогли друг с другом уживаться, я в упор не понимаю. Но я должен ради них дробить проект на отдельные артифакты, писать билд-скрипты для каждого и для них всех общий.

Есть вопросы по тулингу. Я не хочу в 21м веке гонять форматры-линтеры в ide ручками. Я хочу, чтоб а прекоммит хуке у меня все форматилось и линтилось само собой. Почему JetBrains не предоставляет форматилку-линтилку в виде cli-тулзы? Они что, предлагают мне в CI поднимать в доккере IDEA и по ней чем-то Силиниум-подобным кликать кнопки, чтоб провалидировать, что код в пул-реквесте правильно отформатирован? Нашлись конечно отчаянные ребята в Австралии, которые написали свой линтер. Но не понятно, как гарантируется его совместимость с форматтером, который в Idea зашит.

Я пописал на Kotlin неделю в Виксе в 2019. После TS выглядело как привет мой 2015й. Я понимаю, что им восхищаются андроидщики, тк все ж не Java 6. Но имхо надо стараться лучше.
В один мавен артифакт положить кода скомпилированный жавой и котлином - мне кажется можно, почему нельзя то? Непонятно зачем правда, но я не вижу припятствий
источник

ПФ

Паша Финкельштейн... in Чат подкаста «Разбор Полётов»
Andrey Listochkin
может быть. В компании в тот момент шла большая миграция на Bazel. Я хотел с ним начать, но коллега резонно заметил, что мы и с Котлином можем на грабли понаступать (с учетом того, что нужно было его подружить со Скала), то лучше взять что-то с чем уже умеем.
со скалой я тоже мешал в одном артефакте. Нет этой проблемы
источник

ПФ

Паша Финкельштейн... in Чат подкаста «Разбор Полётов»
А вот про базель я ничо сказать не могу. Он наверное очень хороший, ток не умеет ничего )
источник

ПФ

Паша Финкельштейн... in Чат подкаста «Разбор Полётов»
Anton Arhipov
В один мавен артифакт положить кода скомпилированный жавой и котлином - мне кажется можно, почему нельзя то? Непонятно зачем правда, но я не вижу припятствий
ну вот у меня есть kotlin-spark-api, его можно в принципе распространять одним джарником, почему нет?
источник

過酸化水素 in Чат подкаста «Разбор Полётов»
Фиг его знает, я когда пользуюсь completablefuture, у меня начинает подгорать.
И я постоянно ловлю на мысли себя: неочевидно
источник

AA

Anton Arhipov in Чат подкаста «Разбор Полётов»
Andrey Listochkin
/cc @JBaruch

Язык хороший. Когда появился в 2016м, в него положили кучи приятных вещей, которые облегчали людям жизнь. По эргрномике язык (не окружения - ide, тулзов, библиотек) был близок к его тогдашним современникам - TS и Swift. Но имхо развиваться дальше он не стал так же быстро, как TS, и после TSа писать на Котлине очень кринжово. Вроде бы все так, но шаг вправо-влево и не хватает мелочей.

Например, array и object destructuring в Котлине работает не по именам, а по позициям полей. Штааа???

У меня есть класс, в нем id, username, email типов int, string, string. Я в коде пишу

val (id, username, email) = user;

все круто.

Теперь прилетяет реквест юзерам роли добавить. Я добавил поле role: string после юзернейма, и теперь в строке выше в переменную email попадет роль. Компилятор и Идея мне ничего не скажет. Получается, позиционные аргументы я не могу юзать без опасений. И я в 2020м году должен писать кода вида

val email = user.email;

как какой-то крестьянин.

Еще напрягает то, как в языке сделаны Корутины. Ты делаешь контекст, в нем уже можешь awaitить. Но из-за того, что асинхронный код в языке явно не виден, в Идее для мест разрывов управления слева добавлен еще один столбик гаттеров и рисуются такие извилистые стрелки. Язык создавался для JVM - среды, где полно синхронного io, и есть большой риск помешать в одном куске кода бликирующие вызовы и корутины. Явно нужно было для корутин сделать синтаксис. Его не сделали, и получается, что в свою среду разработки пришлось добавлять костылики, чтоб визуально асинхронщина была видна. Ну а если ты Котлин пишешь не в их ide, то ссзб, страдай.

Также мне как человеку, который 10 лет под JVM не писал, был непонятен зоопарк с Фьючерами. Чтобы юзать корутины, нужно все джавашные фьючи конвертить в котлиновские. Чем джавашные не угодили я хз. Но даже если и так, что, нельзя автогенерить при компиляции код для конверсии? И нельзя было его сделать для Scala/Akka фьюч и их аналогов в Clojure и мб Groovy (хз есть ли они там). А так пришлось писать дополнительные методы для конвертации ручками.

Опять же. В один мавен артифакт нельзя положить код на Java, Scala, и Kotlin сразу. Почему? Я чего-то думал, что все компилится в .class-файлы и они совместимы между собой. Почему все эти "языки будущего" на JVM за 6-17 лет не смогли друг с другом уживаться, я в упор не понимаю. Но я должен ради них дробить проект на отдельные артифакты, писать билд-скрипты для каждого и для них всех общий.

Есть вопросы по тулингу. Я не хочу в 21м веке гонять форматры-линтеры в ide ручками. Я хочу, чтоб а прекоммит хуке у меня все форматилось и линтилось само собой. Почему JetBrains не предоставляет форматилку-линтилку в виде cli-тулзы? Они что, предлагают мне в CI поднимать в доккере IDEA и по ней чем-то Силиниум-подобным кликать кнопки, чтоб провалидировать, что код в пул-реквесте правильно отформатирован? Нашлись конечно отчаянные ребята в Австралии, которые написали свой линтер. Но не понятно, как гарантируется его совместимость с форматтером, который в Idea зашит.

Я пописал на Kotlin неделю в Виксе в 2019. После TS выглядело как привет мой 2015й. Я понимаю, что им восхищаются андроидщики, тк все ж не Java 6. Но имхо надо стараться лучше.
А по тулингу - да. Недоработки. Рук не хватает. Ну или просто не задумывались об этом.
источник

AA

Anton Arhipov in Чат подкаста «Разбор Полётов»
Тут не прошло и 300 лет, из идеи начали инспекции выносить в отдельную утилиту, чтоб в ci запускать - уже огромный шаг для человечества.

Так и до форматтера дойдём
источник

AL

Andrey Listochkin in Чат подкаста «Разбор Полётов»
Anton Arhipov
В один мавен артифакт положить кода скомпилированный жавой и котлином - мне кажется можно, почему нельзя то? Непонятно зачем правда, но я не вижу припятствий
Можно, когда они уже скомпилированы в .class-файлы.

Я не помню терминологии, как эта штука называется. Но в Идее я не смог сделать src/main/kotlin и src/main/scala в одом проекте/паккадже/компилейшн-юните/папке(?) и импортить скалла-классы в Котлин и Котлин-классы в Скалу. Пришлось дробить на два. И потом делать три ppm.xmlчтобы из двух кусков общий Джар сделать.

Мб вопросы к Мавен-плагинам, мб к криворукости меня и моего коллеги (который в отличие от меня на Скала/Джава фултайм пишет).
источник

AL

Andrey Listochkin in Чат подкаста «Разбор Полётов»
Я вам одно скажу - Котлин всяко лучше Скалы 😉
источник

AA

Anton Arhipov in Чат подкаста «Разбор Полётов»
Andrey Listochkin
Можно, когда они уже скомпилированы в .class-файлы.

Я не помню терминологии, как эта штука называется. Но в Идее я не смог сделать src/main/kotlin и src/main/scala в одом проекте/паккадже/компилейшн-юните/папке(?) и импортить скалла-классы в Котлин и Котлин-классы в Скалу. Пришлось дробить на два. И потом делать три ppm.xmlчтобы из двух кусков общий Джар сделать.

Мб вопросы к Мавен-плагинам, мб к криворукости меня и моего коллеги (который в отличие от меня на Скала/Джава фултайм пишет).
Ну тут явно вопрос не к идее.
источник

D

Dima in Чат подкаста «Разбор Полётов»
Andrey Listochkin
Я вам одно скажу - Котлин всяко лучше Скалы 😉
а чем?
источник

AA

Anton Arhipov in Чат подкаста «Разбор Полётов»
Andrey Listochkin
Я вам одно скажу - Котлин всяко лучше Скалы 😉
Набросил - аргументируй
источник

AA

Anton Arhipov in Чат подкаста «Разбор Полётов»
В скала3, например, юнион-типы. Я завидую
источник

AA

Anton Arhipov in Чат подкаста «Разбор Полётов»
Как и в случае с TS
источник

AA

Anton Arhipov in Чат подкаста «Разбор Полётов»
А в котлине они скорее всего не появятся
источник

AL

Andrey Listochkin in Чат подкаста «Разбор Полётов»
Мб вопрос к тому, как в Виксе на Скале пишут. засилие методов с дефолт-параметрами, куда через имплиситы подставляются значения. Получается, что если интегрироваться с их библиотеками из другого языка, то нужно передавать кучу параметров, о существовании которых никто из “несистемщиков” в Виксе не имеет представления. Плохой осадок
источник

AL

Andrey Listochkin in Чат подкаста «Разбор Полётов»
Anton Arhipov
А в котлине они скорее всего не появятся
с одной стороны, интересно почему (подозреваю, что тут не обошлось без overloading в Java), а с другой - я не могу сказать что они прям так нужны на практике.
источник

AA

Anton Arhipov in Чат подкаста «Разбор Полётов»
Andrey Listochkin
с одной стороны, интересно почему (подозреваю, что тут не обошлось без overloading в Java), а с другой - я не могу сказать что они прям так нужны на практике.
Совместимость с жавой очень важна

И да, есть сценарии, где интуитивно хочется использовать юнионы, но наверняка можно будет закрыть эти сценарии просто немного подкрутив существующие фичи и это будет работать не хуже. Например, сделать возможность добавлять экстеншены на несколько типов - сразу важный сценарий закрыт
источник