@kotlin_lang

Страница 445 из 982
Quantum Harmonizer
06.12.2017
12:36:28
ну тебе язык явно сказал что объекты могут проверятся на идентичность, и могут иметь свой уникальный ключ - хеш
ну так мы же и рассуждаем о том, должен ли язык поступать тем или иным образом

тут не стоит отталкиваться от спеки конкретного языка

Gor
06.12.2017
12:37:07
ну так мы же и рассуждаем о том, должен ли язык поступать тем или иным образом
та мне кажется эти штуки добавили как раз для удобства

Quantum Harmonizer
06.12.2017
12:37:34
та мне кажется эти штуки добавили как раз для удобства
Мне кажется, очень многие штуки, существующие с Java 1.0, делались по-быстрому

Google
Gor
06.12.2017
12:39:30
Мне кажется, очень многие штуки, существующие с Java 1.0, делались по-быстрому
я про то что equeals с hashcode - если и добавили для удобства то добавили все же в рамках концепта

т.е. использования всех полей класса

Quantum Harmonizer
06.12.2017
12:40:01
да, но это негибко в реальной жизни

Gor
06.12.2017
12:40:06
ломать такой концепт - хз хорошо ли

просто это совсем неок переопределить хешкод для класса чтоб он работал с одним полем из 10

Quantum Harmonizer
06.12.2017
12:41:15
нужен ли сам концепт? Может, можно отказаться от него?

Gor
06.12.2017
12:41:29
если нужен особенный кейс, можно сделать отдельно

Quantum Harmonizer
06.12.2017
12:41:33
(так, пора выдать себе предупреждение за флуд)

Quantum Harmonizer
06.12.2017
12:41:56
если нужен особенный кейс, можно сделать отдельно
например, чтобы коллекции принимали сравнивающий делегат, как это делают Tree*

Gor
06.12.2017
12:42:19
в общем флуд жестокий, имхо compareTo не такой коммон случай, и фактически не может быть применим ко всем объектам в отличии от equals

Google
BaLoo
06.12.2017
12:46:12
То есть не имеет.

Quantum Harmonizer
06.12.2017
12:46:29
только по ссылке
Зачем это разрешать вообще?

BaLoo
06.12.2017
12:46:31
То, что что-то можно сравнить каким-то образом, не значит, что это нужно делать.

Но тем не менее от там есть.

Тогда почему compare не должно быть?

Igor
06.12.2017
12:47:28
Как это могло бы выглядеть?
Примерно так https://pastebin.com/JT3d5xFM Синтаксис пока только теоретический, тк KEEP еще в обсуждение

Quantum Harmonizer
06.12.2017
12:48:14
Тогда почему compare не должно быть?
Речь о несферическом котлине вне вакуума?

BaLoo
06.12.2017
12:50:25
Да, этот вопрос родился из решения конкретной задачи.

Quantum Harmonizer
06.12.2017
12:51:36
Да, этот вопрос родился из решения конкретной задачи.
тогда — выше ответили, потому что котлин генерирует код, используя только методы, которые есть у всех объектов

BaLoo
06.12.2017
12:53:04
То есть он не смог уйти от сумрачного наследия джавы.

Quantum Harmonizer
06.12.2017
12:54:11
То есть он не смог уйти от сумрачного наследия джавы.
Во-первых, да, очень многое сделано для совместимости. Во-вторых, у разработчиков Котлина может быть не такое мнение, как у меня.

Gor
06.12.2017
12:57:13
Зачем это разрешать вообще?
а как отличать эти объекты друг от дружки?

Quantum Harmonizer
06.12.2017
12:57:25
сравнивать ссылки в managed-языке — не кажется ли странным?

Gor
06.12.2017
12:59:17
сравнивать ссылки в managed-языке — не кажется ли странным?
различать объекты в ооп языке - не кажется ли нормальным?

Quantum Harmonizer
06.12.2017
12:59:31
Gor
06.12.2017
13:00:01
нет, далеко не всегда
ну хз, может мне джавовское ооп мозги проело

но учитывая изначально идею построить всю програму на отдельных блоках которые взаимосвязанны, и не меть возможности различать однотипные - странно

Google
BaLoo
06.12.2017
13:05:55
Просто подумайте, как часто вам нужно определять равенство хранимых данных, и как часто то, что два имени связаны с одним и тем же инстансом. Я понимаю, что это в общем случае может сильно зависеть от задачи, но всё-таки я уверен, что перевес будет в сторону первого.

Phil
06.12.2017
13:16:16
Ну, вот в моих кейсах сравнение по умолчанию не нужно никогда )

Igor
06.12.2017
13:52:21
Народ, как красиво запустить N паралельнных URL(…).readText() (видимо через deferred) а потом собрать коллекцию длин этих строк, подставляя вместо упавших закачек -1? (Подвох в том, как сделать это без try/catch)

Igor
06.12.2017
14:05:04
В Java есть URL.readText и Defrred<T>? Конечно в Котлин. Хочу понять как идиоматично чейнить suspend функции. Пока придумал через такой экстеншен: suspend fun <T> Deferred<T>.awaitResult(): Result<out T, out Exception> = try { Ok(await()) } catch (e: Exception) { Error(e) }

Вообще хочется понять имеет ли смысл писать такие фукнции: suspend fun downloadBytes(url: String): Result<ByteArray, Errors> С одной стороны ошибки видны в типе-функции, но как и с использование в Java/Scala Option<T> вместо T? есть подвох (компилятор не помешает функции все равно сделать сайд-эффект)

Руслан
06.12.2017
14:08:54
ну вот мне кажется что большого смысла нет

бери CompletableFuture просто

кому нужно сможет сделать cf.await(), а ты будешь цепочки писать

Igor
06.12.2017
14:11:58
Можно конечно сослаться, что я под отсталый android пишу, но суть то не в этом, а в том что бы “эффекты” явно выражать, что бы отличать pure код/от кода с сайд-эффектами. Или смириться с тем что все suspend функции могут быть с некотролиролируемыми эфектами (исключения).

Руслан
06.12.2017
14:15:29
ну cf/rx как раз же чтобы эффекты контролировать

и асинхронно писать

Boris
06.12.2017
14:17:06
Я имел ввиду джава или андроид ?

Хотя там конечно тоже джава ?

Yura
06.12.2017
14:43:04
Добрый день. Подскажите, пожалуйста, можно ли на Kotlin написать мобильное приложение, которое будет работать под android и ios?(Прим: Xamarin для .NET)

Sergey
06.12.2017
14:47:05
см kotlin/native

Yura
06.12.2017
14:48:29
см kotlin/native
Спасибо

Igor
06.12.2017
14:52:27
ну cf/rx как раз же чтобы эффекты контролировать
Не вижу как CF позволяет лучше контролировать эффект, да и код получается сложнее https://pastebin.com/ztV0pJmN А у suspend тут есть явные преимущества: - компилятор явно запрещает вызвать код “делающий эффекты” (suspend) из обычного кода (с CF тебе никто не мешает вызвать метод возвращающий CF и забыть повесить обработчик) - с RX/CF твой код перестает быть простым и становится “монадическим”, состоящим из map/flatMap - кучу операторов надо запоминать (в rx с этим вообще беда)

Google
Artem
06.12.2017
14:53:13
Привет всем) Есть здесь люди, которые работали с KotlinJs?

Roman
06.12.2017
15:00:51
Можно конечно сослаться, что я под отсталый android пишу, но суть то не в этом, а в том что бы “эффекты” явно выражать, что бы отличать pure код/от кода с сайд-эффектами. Или смириться с тем что все suspend функции могут быть с некотролиролируемыми эфектами (исключения).
А скажу крамольную мысль. "Некотонролируемые" исключение это не эффекты и не нарушают purity функций. Не pure функции это те, которые мутирует или зависит от какого-то левого стейта. Выкинутое исключение это всего-лишь результат функции. Просто любой fun foo(): T в Котлине, если его представить в хаскеле, на самом деле имеет тип результата Either<Throwable,T>, а "императивное" тело функции просто неявно заворачивается в do нотацию соответствующей монады. Т.е. самому делать это не надо. Эта монада уже встроена в язык.

Quantum Harmonizer
06.12.2017
15:02:43
Увы, эта монада иногда выстреливает.

Admin
ERROR: S client not available

Nikolay
06.12.2017
15:02:59
Artem
06.12.2017
15:03:20
Nikolay
06.12.2017
15:04:16
да не, все круто же

Artem
06.12.2017
15:04:37
Да причем тут это? Я вроде бы не спрашивал, что лучше)

Quantum Harmonizer
06.12.2017
15:05:21
да не, все круто же
мы тут о котлине всё-таки

Roman
06.12.2017
15:06:38
Увы, эта монада иногда выстреливает.
Так уж эта монада устроена. Если ничего специально не предпринимать, то исключение по умолчанию прокидывается выше. Собственно в Хаскеле вот Either монада вот ровно так работает, как ведет себя Котлин

Roman
06.12.2017
15:07:56
Нет. Если функция возвращает Either<E,T> и написана через do нотацию по этой монаде, то первая ошибка станет left результатом выполнения.

Хаскель заставит объявить тип результата как Either (или выведет) это да. В Хаскеле можно объвить функцицию которая никогда не кидает исключение (результат просто T) это да. Но только к purity это не имеет никакого отношения. В хаскеле есть panic который нельзя ни поймать ни представить типом.

Sergey
06.12.2017
15:16:34


Roman
06.12.2017
15:16:47
Так что всё это одна фигня. Просто в одних языках (haskell, swift) ошибки делятся на исключения и паники (первые преставлены в типе и их можно поймать, а вторые не представлены в типе и их нельзя поймать). А в Котлине другой подход. Все ислючения можно поймать, но они не представлены в типе так как могут лететь отовсюду (среднее между паниками и исключениями), но зато есть удобный и легкий механизм работы с nullable значениями для преставления в типе ошибок вида "я не смог найти эту штуку" (когда не нужны подробности кроме сообщения о индикации того, что операция не получилась)

Igor
06.12.2017
15:33:51
Почему бы (если хочется омазаться фп) весь код не разделить на 2 части? = Suspend функции, в которых делать: = - асинхронные запросы (в виде обычного имеративного кода, без всяких thenApply/flatMap) - IO (логично что IO должно быть асинхронным что бы потоки не лочить) - кидать исключения и прочие эффекты = Остальной код на “чистых” функциях = Тут запретить юзать IO/throw Котлин как бы к этом и поддталкивает, тем что можно вызывать из suspend обычный код, но НЕ наоборот. P.S. понятно что это программирование “по конвенции” и работать не будет.

? animufag ?
06.12.2017
15:40:48
собственно для этого и нужны были эти монадки, что они могут выражать собой эффекты, в частности побочные эффекты (внешний мир) и такое мы можем представить в виде вполне себе немагического типа и недавать программисту других путей вызывать побочные эффекты (но на самом деле давать unsafe тк язык прагматичный и всё всё равно скатывается в конвенции, но уверенности на порядок больше)

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

Google
? animufag ?
06.12.2017
15:45:47
Пример GO показывает, что для удобной и предсказуемой многопоточности лучше НЕ юзать исключения
сложно исходить из того что в го есть правильные решения при дизайне языка. но в целом да особой необходимости в исключениях наверное никогда не было

Yevhen
06.12.2017
16:31:03
https://habrahabr.ru/company/JetBrains/blog/339400/

Artem
06.12.2017
16:35:28
Быть может кто-нибудь всё таки знает. Как данные строки будут выглядеть в kotlinjs? const { Botact } = require('botact') const bot = new Botact({ confirmation: CONFIRMATION, token: TOKEN }) Буду крайне благодарен за помощь)

Sergey
06.12.2017
16:56:20
external fun require(module:String):dynamic val Botact = require("botact") val bot = Botact(mapOf("confirmation" to CONFIRMATION, "token" to TOKEN)) как-то так

ну это если интероп с жсом, в чистом котлинжс будет попроще все)

Artem
06.12.2017
16:57:24
да в чистом тоже думаю да) Но в том-то и дело, что либа написана на js

Сейчас буду пробовать. Спасибо!

Roman
06.12.2017
17:27:28
Пытаюсь сделать debounce по аналогии с rx, но что-то получается больно много кода, мб можно как-то иначе, покрасивее? https://gist.github.com/romansl/d871727a247a3ea2209bf74e5170c95e

И вопрос в догонку: почему-то когда я вызываю job.cancel(), то ожидающий завершения job.join() не бросает CancellationException(). Вопрос: почему?

В примере это строка 26, она никогда не вызывается.

Roman
06.12.2017
17:33:03
А почему он его должен бросать?

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