@kotlin_lang

Страница 908 из 982
Andrew
04.10.2018
09:45:29
Сообщение об ошибке бы.

Alexander
04.10.2018
09:45:39
ext.kotlin_version = '1.3.0-rc-116'

Жабра
04.10.2018
09:46:33
ext.kotlin_version = '1.3.0-rc-116'
Странно... Вроде прописал maven { url 'https://dl.bintray.com/kotlin/kotlin-eap' } Может, что-то другое надо?

Google
Alexander
04.10.2018
09:46:34
не вижу в этом проблемы
Я вижу большую проблему в обратном. Котлин не обязывает указывать типы там, где это "очевидно"

eshch
04.10.2018
09:46:55
не вижу в этом проблемы
проблема в том, что котлин борется за краткость в том числе. если вам нравится указывать типы, то большинству нет. избыточность не означает ясность.

Quantum Harmonizer
04.10.2018
09:47:05
Я вижу большую проблему в обратном. Котлин не обязывает указывать типы там, где это "очевидно"
я даже себе инспекцию включил чтобы орало на публичные объявления без типа

Alexander
04.10.2018
09:47:14
Да не правда это. Не за краткость, а за лаконичность.

Andrew
04.10.2018
09:47:26
eshch
04.10.2018
09:47:37
Да не правда это. Не за краткость, а за лаконичность.
ну ок, а разница в чем? я думал это одно и то же

Alexander
04.10.2018
09:47:49
pluginManagement { repositories { maven { url = 'http://dl.bintray.com/kotlin/kotlin-eap' } mavenCentral() maven { url = 'https://plugins.gradle.org/m2/' } } } buildscript { ext.kotlin_version = '1.3.0-rc-116' repositories { jcenter() maven { url = "http://dl.bintray.com/kotlin/kotlin-eap" } } dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "org.jfrog.buildinfo:build-info-extractor-gradle:4+" } }

Egor
04.10.2018
09:47:56
Ну, в котлине вообще говоря сейчас идеальный вывод типов

Alexander
04.10.2018
09:48:24
plugins { id 'org.jetbrains.kotlin.jvm'// version '1.3.0-rc-116' }

Alexander
04.10.2018
09:49:00
ну ок, а разница в чем? я думал это одно и то же
Разница в том, что надо не писать код там, где он очевиден, но не экономить там, где есть возможность разной трактовки

Andrew
04.10.2018
09:49:38
Ну и в корневом build.gradle plugins { id 'org.jetbrains.kotlin.jvm' version '1.3.0-rc-116' apply false }

Google
Alexander
04.10.2018
09:49:52
Я бы сказал, что везде, где есть малейшая возможность двусмысленности, надо писать явно

Там есть путанница в том, где версия определяется, в сеттингах, в корневом модуле или в дочерних модулях. Я когда собирал методом перебора нашел работающий вариант

OlegKrikun
04.10.2018
09:50:56
а не всё ок, у него всё покраснело ??

Жабра
04.10.2018
09:50:57
pluginManagement { repositories { maven { url = 'http://dl.bintray.com/kotlin/kotlin-eap' } mavenCentral() maven { url = 'https://plugins.gradle.org/m2/' } } } buildscript { ext.kotlin_version = '1.3.0-rc-116' repositories { jcenter() maven { url = "http://dl.bintray.com/kotlin/kotlin-eap" } } dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "org.jfrog.buildinfo:build-info-extractor-gradle:4+" } }
Странно, всё равно пишет Could not find org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.0-rc-116. Searched in the following locations: - https://dl.google.com/dl/android/maven2/org/jetbrains/kotlin/kotlin-gradle-plugin/1.3.0-rc-116/kotlin-gradle-plugin-1.3.0-rc-116.pom - https://dl.google.com/dl/android/maven2/org/jetbrains/kotlin/kotlin-gradle-plugin/1.3.0-rc-116/kotlin-gradle-plugin-1.3.0-rc-116.jar - https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-gradle-plugin/1.3.0-rc-116/kotlin-gradle-plugin-1.3.0-rc-116.pom - https://jcenter.bintray.com/org/jetbrains/kotlin/kotlin-gradle-plugin/1.3.0-rc-116/kotlin-gradle-plugin-1.3.0-rc-116.jar - https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-gradle-plugin/1.3.0-rc-116/kotlin-gradle-plugin-1.3.0-rc-116.pom - https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-gradle-plugin/1.3.0-rc-116/kotlin-gradle-plugin-1.3.0-rc-116.jar Required by: project :

Andrew
04.10.2018
09:51:18
а не всё ок, у него всё покраснело ??
Дык у него всё время краснеет и чинится, всё норм)

Alexander
04.10.2018
09:51:24
Так надо в билдскрипте репозиторий прописать. Иначе плагин не находит

Жабра
04.10.2018
09:51:50
подключил EAP-репу?
maven { url 'https://dl.bintray.com/kotlin/kotlin-eap' } Да

eshch
04.10.2018
09:51:58
Разница в том, что надо не писать код там, где он очевиден, но не экономить там, где есть возможность разной трактовки
если ты конкретно о моем вопросе, то я не настаиваю на форме ::toString для ссылки на метод инстанса элемерта списка.

Quantum Harmonizer
04.10.2018
09:52:01
Andrew
04.10.2018
09:52:36
maven { url 'https://dl.bintray.com/kotlin/kotlin-eap' } Да
В pluginManagement? Я не вижу, чтобы гредл искал плагин в kotlin-eap

Жабра
04.10.2018
09:52:53
в обоих местах?
А, лол, надо было в обоих. .—-. Спасибо, вопрос снят.)

Quantum Harmonizer
04.10.2018
09:53:08
eshch
04.10.2018
09:55:13
Я бы сказал, что везде, где есть малейшая возможность двусмысленности, надо писать явно
наверно согласен, вот мне из-за этого не нравится, что нет ключевого слова await, мне каж явное указание на вызов асинхнронной функции нужно. подсветки в идее недостаточно, потому если смотреть код в браузере, то там ее нетути. а еще есть случаи когда смотришь код не в иде.

Egor
04.10.2018
09:55:52
кстати насчет Multiple Dispatch - кто-нибудь поминал, нет, в Котлин завезут? Или не нужен?

Alexander
04.10.2018
09:56:05
А он как бы уже есть

Quantum Harmonizer
04.10.2018
09:56:06
буквально вчера думал о том, что можно сделать await и обязать писать его

Alexander
04.10.2018
09:56:33
Глобавльные функции - это и есть multiple dispatch

eshch
04.10.2018
09:56:47
но я еще не понел (может потом пойму) почему саспенд метод не возвращает просто какой-нибудь тип, значение которого можно сохранить, а можно на него сделатб await и ждать.

Google
eshch
04.10.2018
09:57:31
буквально вчера думал о том, что можно сделать await и обязать писать его
зачем обязать. обязать если хочешь заснуть тут. а если хочешь поспать потом или вообще в другой корутине.

Он так и делает
хм, а как тогда заснуть опциально? если нет эвэйта?

Quantum Harmonizer
04.10.2018
09:58:14
зачем обязать. обязать если хочешь заснуть тут. а если хочешь поспать потом или вообще в другой корутине.
собственно, разработчики корутин рассказали, почему sequential by default, а parallel только если нужно

Andrew
04.10.2018
09:58:30
Мне прям нравится подход чувака, докладывающегося про Gradle — он подправил build.gradle, потом он его переименовал в .kts, а дальше он пытается собрать из терминала и общеизвестные ошибки объясняет и исправляет. Как это делать новичкам — фиг знает.

Alexander
04.10.2018
09:58:36
Все асинхронные функции возвращают Deferred. Можно его как есть брать, можно await-нуть

Alexander
04.10.2018
09:59:09
Ну хорошо, не все.

Quantum Harmonizer
04.10.2018
09:59:32
они не асинхронные, если они возвращают deferred

eshch
04.10.2018
09:59:34
оке почитаю дальше, а то я тока понаслышке тока слышал.

Руслан
04.10.2018
09:59:55
Все асинхронные функции возвращают Deferred. Можно его как есть брать, можно await-нуть
Большинство асинхнных функции так или иначе ожидают колбек

Кроме тех что fire and forget

Alexander
04.10.2018
10:02:12
они не асинхронные, если они возвращают deferred
А это что https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.experimental/async.html?

Andrey
04.10.2018
10:02:50
Под капотом да. Но идейно, это же просто добавление существующему классу поведений, которые делают его квази-наследником интерфейса
Ну начать с того, что реализация контракта (тайп класса или интерфейса - не важно) - это не совсем наследование в смысле ООП. Наследование в смысле ООП подразумевает переопределение части поведения родителя наследником, а реализация контракта ничего не переопределяет, так как контракт абстрактен и своего поведения у него нет, только ограничения.

Alexander
04.10.2018
10:03:00
Хорошо, понял, немного про разные вещи говорим. Но на суспенд функцию саму по себе await-то никто не навешивает

Quantum Harmonizer
04.10.2018
10:05:34
Andrey
04.10.2018
10:06:18
Я в принципе согласен, и в котлине это даже частично используется (в итераторах). Более того, мне идея тайп-классов самих по себе скорее нравится, чем нет. Проблема в том, что за ними тащут имплиситы, а вот это уже зло.
Если посмотреть на первоисточники тайп классов (вроде как Haskell, но ножет и ML), то там тайп классы и иммплиситы - совершенно разные фичи языка. При это имплиситы включаются только как расширения языка, так как они делают систему типов не разрешимой в общем случае.

Google
Egor
04.10.2018
10:08:16
хорошо, пока <= 0
Даже в джаву пихают var, потому что постоянно все явно писать невозможно. Чем плохи 2, 3 имплисита на класс, которые позволят уменьшить количество кода?

Quantum Harmonizer
04.10.2018
10:09:20
Даже в джаву пихают var, потому что постоянно все явно писать невозможно. Чем плохи 2, 3 имплисита на класс, которые позволят уменьшить количество кода?
Не так уж и нужен этот var. Плохи они тем, что уменьшают качество. Я вот смотрел на Frege вчера и пытался понять, как оно работает. Ужас.

Bogdan
04.10.2018
10:11:46
Egor
04.10.2018
10:12:32
тем что ревьювить сложнее? =)
Тайп-классы обычно чистые, один раз написал функционал, протестировал и забыл, плюс они семантически полноценны, то есть посмотрел на одно название и понял, зачем. Соответственно, если у вас в классе что-то использует имплисит, то вам достаточно посмотреть на тип чего-то, что использует тайпкласс, чтобы понять, какой имплисит используется

Не так уж и нужен этот var. Плохи они тем, что уменьшают качество. Я вот смотрел на Frege вчера и пытался понять, как оно работает. Ужас.
Нуу, фулл-ФП вообще штука сложная, поэтому Котлин так хорош, что в нем есть и элементы привычных парадигм, и хардовой функциональщины

Admin
ERROR: S client not available

Igor
04.10.2018
10:17:56
Ну hello-word там не сложнее котлина ?

Andrey
04.10.2018
10:18:33
Даже в джаву пихают var, потому что постоянно все явно писать невозможно. Чем плохи 2, 3 имплисита на класс, которые позволят уменьшить количество кода?
Имплиситы - потенциально опасная фича. Они меняют статическое контекстно зависимое связывание на динамическое, что приводит к невозможности проверить корректность типов на этапе компиляции для некоторых случаев. С точки зрения чтения кода с динамическим связыванием - он гораздо менее прозрачен для читателя, особенно если этим злоупотреблять. Очень тяжело становится понять, на что ссылается тот или иной имплисит.

Egor
04.10.2018
10:18:40
Ну hello-word там не сложнее котлина ?
речь скорее идет про какие-то существующие проекты. Я как-то раз чекнул опенсорсный HTTP-сервер на Хаскеле и в ужасе закрыл

Alexandr
04.10.2018
10:20:16
стоит посмотреть на гредл с груви, после переписывания скрипта никогда не знаешь запустится ли

Alexandr
04.10.2018
10:24:39
А как имлиситы вообще связаны с груви?
я сейчас не про имплиситы, а про динамику в груви

Alexander
04.10.2018
10:25:48
Груви- это на самом деле очень хороший пример. Там наступили на насколько граблей, на которые второй раз наступать не надо.

В то числе трейты

Google
Egor
04.10.2018
10:26:53
Типы всё еще можно проверять на этапе компиляции

Скала разве так не делает? Я просто со Скалой мало знаком

Alexander
04.10.2018
10:28:14
Люди, которые знакомы с имплиситами в скале часто плюются на них со страшной силой.

Alexandr
04.10.2018
10:28:16
Скала разве так не делает? Я просто со Скалой мало знаком
делает, но без IDE ты не разберешься с этим

ну либо без бутылки

Egor
04.10.2018
10:29:03
а, ну без IDE я вообще не знаю, как люди на джаве/котле пишут Как минимум, из-за импортов

Alexander
04.10.2018
10:30:02
Ну так и на питоне без импортов никуда, и как-то пишут

Зависит от того, что писать

Alexey
04.10.2018
10:31:55
Вобщем то в любом более менее большом проекте без ide не разберёшься

Igor
04.10.2018
10:34:34
речь скорее идет про какие-то существующие проекты. Я как-то раз чекнул опенсорсный HTTP-сервер на Хаскеле и в ужасе закрыл
Но использовать его ты же можешь? Фреймворки обычно используют язык по максимуму, что пользователям как раз было легче.

Igor
04.10.2018
10:35:56
Я когда смотрю его код в reactive-property, тоже не комфортно себя чувствую ?

Eugeny
04.10.2018
10:35:58
Корутины умеют в реактивные источники данных? То есть есть реактивный драйвер монги или webfluxовый webClient. Можно событие из реактивной пайпы получить корутиной? Только без блокирующего вызова .block() в suspend функции

Igor
04.10.2018
10:36:49
https://github.com/Kotlin/kotlinx.coroutines/blob/master/docs/channels.md

Alexey
04.10.2018
10:36:53
ответ каналы видимо

да

Eugeny
04.10.2018
10:37:02
Спасибо

Andrew
04.10.2018
10:38:05
Корутины умеют в реактивные источники данных? То есть есть реактивный драйвер монги или webfluxовый webClient. Можно событие из реактивной пайпы получить корутиной? Только без блокирующего вызова .block() в suspend функции
У kotlinx.coroutines есть пачка либ-байндингов к сторонним асинхронным и реактивным фреймворкам, но в случае с webflux webClient придётся по аналогии свой писать.

Можно глянуть на существующие — они довольно простые под капотом, нужно просто подписаться на асинхронные события и выдать на основании этой подписки собственноручно созданную корутину.

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