@kotlin_lang

Страница 629 из 982
Quantum Harmonizer
11.04.2018
10:12:48
Юсуф
11.04.2018
10:13:13
PHP?
блэт, аксиома эскобара

шо то говно, шо это

Alexey
11.04.2018
10:15:21
лол, чем по твоему js хуже котлина?

Google
Quantum Harmonizer
11.04.2018
10:16:05
Sergey
11.04.2018
10:16:11
?

Alexey
11.04.2018
10:16:28
а я и не говорил, что js хуже, я на нём много чего написал

Igor
11.04.2018
10:17:10
лол, чем по твоему js хуже котлина?
отсутствием типов?) Отсутствием поддеpжки в ноpмальное IDEA?) Тихими падениями ?) Невозможность выстpоить даже два с половиной паттеpна ?)

Руслан
11.04.2018
10:18:33
Стикеры запретили, там видосы скидывать стали

Не надо так

И для обсуждения чем Js лучше Scala есть @jvmchat

Юсуф
11.04.2018
10:18:54
sore

Alexey
11.04.2018
10:19:10
Вы просто не понимаете, что я указываю на ваши фаталистские высказываения о том, что что-то хуже или лучше - это гомно

Можно было бы сказать, для меня js говно и всё было бы ок

Mikhail
11.04.2018
10:20:42
Какие-то одмины тут не ламповые(

Юсуф
11.04.2018
10:20:49
Можно было бы сказать, для меня js говно и всё было бы ок
понятно же что тут все свое мнение пишут

Alexey
11.04.2018
10:21:04
С колокольни js или php разработчика, компилятор и типы - это связывание по рукам и ногам

Google
Alexei
11.04.2018
10:21:21
ребята джес заточен под класное решение одной задачи клепание прототипов абы было

Alexey
11.04.2018
10:22:25
те кто хотели типы ушли тайп скрипт да и всё

Руслан
11.04.2018
10:22:51
Какие-то одмины тут не ламповые(
Не поощряют безцельные, бесполезные обсуждения других языков в Котлин чате?

Причем которые уже по 10 кругу проходят.

Mikhail
11.04.2018
10:24:05
Не поощряют безцельные, бесполезные обсуждения других языков в Котлин чате?
Кажется, основная тема разговора - сравнения Kotlin с языком Х

Руслан
11.04.2018
10:24:10
К обеду нужно будет всполнить как в хаскеле и скале есть HKT, и обсудить в очередной раз FP на котлине.

Vitalii
11.04.2018
10:24:48
Все почему-то забывают, что котлин медленнее джава.

Mikhail
11.04.2018
10:25:01
А что в этом плохого? Приходят же сюда раз в неделю с вопросом "а как написать let2?"

Aleksandr
11.04.2018
10:25:14
, которая медленее си

Руслан
11.04.2018
10:25:29
И быстрее всего остального на JVM.

Alexei
11.04.2018
10:25:48
а инлайны не помогают?

вроде лямбды полутче котлиновские

а учитывая как народ упрлс по фп то можно предположить что это норм буст

Quantum Harmonizer
11.04.2018
10:27:00
Alexei
11.04.2018
10:27:00
Quantum Harmonizer
11.04.2018
10:27:34
, которая медленее си
чёт недавно сравнивали слишный malloc с TLAB'ами)

Mikhail
11.04.2018
10:28:14
ага

Google
Mikhail
11.04.2018
10:28:35
fun <P1, P2, R> let2(p1: P1?, p2: P2?, block: (Pair<P1, P2>) -> R): R? { return p1?.let { v1 -> p2?.let { v2 -> block(v1 to v2) } } }

Igor
11.04.2018
10:28:39
А зачем, собственно, если можно написать tuple2 и использовать let с destructive declaration с ним?

Mikhail
11.04.2018
10:28:55
хмм

Igor
11.04.2018
10:29:04
Щас скину пpимеp.

Mikhail
11.04.2018
10:29:47
ну тогда tuple2 жеш не нулл и лет его в любом случае пропустит

let2: (A?, B?) -> ((A, B) -> C) -> C?

Igor
11.04.2018
10:30:40
https://gist.github.com/komigor/230cf2fdafea8d343e2b49c06c954dbb

А, в этом смысле. Так тогда лучше уж в Option какой-то обеpнуть, нет?

Mikhail
11.04.2018
10:31:36
ну так ? == Option

только без накладных расходов

Igor
11.04.2018
10:31:51
у ? нет zip.

и для ? zip не написать

А вот выше and для nullable типов можно пеpеопpеделить (для пpавой nullable части)

Mikhail
11.04.2018
10:37:46
напомни хотяб сигнатуру zip для Option

если ты про Option<A> -> Option<B> -> Option<Tuple<A,B>>, то в написаный мною выше let2 в качестве зиппера передаешь Pair::new и готово

а не, даже ничего передавать не надо

просто { it }

Igor
11.04.2018
10:43:32
https://gist.github.com/komigor/230cf2fdafea8d343e2b49c06c954dbb
А напомните, зачем все это в котлине?

Igor
11.04.2018
10:44:42
Удобно. Иногда писать data-классы для сущностей лениво, или нет особого смысла, а вот в TupleN закинуть все, чтобы потом можно было за одну опеpацию null-чек делать очень даже ничего.

Mikhail
11.04.2018
10:47:27
Иногда нужен nullsafe-конструктор, который бы вернул null, если один из требуемых аргументов null

Google
Mikhail
11.04.2018
10:48:44
то, что написал @ikomarov, если допилить напильником и добавить перегрузок для nullable аргументов, можно получить ad hoc мини-dsl'ю для такого кейса

Igor
11.04.2018
10:50:04
inline infix fun <T1: Any, T2: Any> T1?.andOpt(_2: T2?) = when { this == null -> null _2 == null -> null else -> this and _2 }

Вуаля.

Mikhail
11.04.2018
10:50:45
но если обобщить задачу, то можно с помощью FP решить ее штукой под названием Applicative, сделав <ConstrucorName>::new fmap A apply B apply C

и тогда можно вводить другую абстракцию, например не Option, а Verified

и в случае неудачи выводить не null, а список проваленных проверок

Igor
11.04.2018
10:52:13
но если обобщить задачу, то можно с помощью FP решить ее штукой под названием Applicative, сделав <ConstrucorName>::new fmap A apply B apply C
Ну вот на следующем пpоекте скоpее всего я возьму пеpедых, напишу себе библиотечку функций и компонент такого вида, и дальше уже буду пилить в максимально пpиближенном к функциональному стиле. А пока что пpиходится обходиться локальными ништяками.

Michael
11.04.2018
10:57:20
есть классный вариант названия для такой библиотечки - Haskell

Igor
11.04.2018
11:00:51
Да нет, на котлине судя по всему большую часть необходимого можно без видимых со стоpоны api костылей pеализовать. Так что на пеpвое вpемя пойдет.

Vitalii
11.04.2018
11:03:06
Igor
11.04.2018
11:08:21
Смотpел, но отчасти я не совсем доволен им, отчасти нужно самому написать, чтобы осознать, как пользоваться :)

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

Michael
11.04.2018
11:10:13
не доволен - поправь

Igor
11.04.2018
11:11:10
Ну, как выше написал, для начала напишу свое, потом pешу, что лучше :) Так же было когда-то давно и с мокси или чем-то таким. Написал свое, оказалось пpоще и компактнее (UPD: IMO)

Vitalii
11.04.2018
12:01:26
Зашарь потом своё посмотреть :)

Igor
11.04.2018
12:10:43
оки-доки ;)

Igor
11.04.2018
12:10:48
Под андpоид бы еще... :)
ReactNative + F#/Clojure/Elm/PureScript/... А все эти "операторы" в kotlin выглядят, как попытка натянуть сову на глобус. Я сам таким упарывался где-то год назад, но сейчас понимаю что это: - не нативно и сложно будет обяснить др и даже самому вспомнить через год что для чего - сложно переносить код, тк со стороны напилина эта груда let2/tuple (этого нет "из коробки") - лишние абстракции (типа Option<T> и тд), которые только захламляют код

Vitalii
11.04.2018
12:11:40
Ну если до такой степени упарываться, то ту же Clojure можно нативно прикрутить, вместо cljs+react native.

Google
Vladislav
11.04.2018
12:19:04
В котлине в стандартной либе такой функции случайно нет? StringBuilder().ifNotNull(value1) { append(it) }.ifNotNull(value2) { append(it) }

можно конечно так: StringBuilder().apply { v1?.let { append(it) } } но чуть больше скобочек получается

Иван
11.04.2018
12:22:03
Наверное только listOf(a, b, c, d) .filterNotNull() .forEach {}

Руслан
11.04.2018
12:23:06
buildString { v1?.let(::append) v2?.let(::append) v3?.let(::append) }

Vladislav
11.04.2018
12:27:18
buildString { v1?.let(::append) v2?.let(::append) v3?.let(::append) }
ну у меня StringBuilder для примера, решение нужно для любого аналогичного по смыслу класса

Руслан
11.04.2018
12:27:49
with(obj) {}

Vladislav
11.04.2018
12:29:39
У меня в проекте много различных билдеров и некоторые их методы надо звать опционально. С обычным if'ом вообще стрёмно, appy{let{}} уже получше, вот если бы была прямо такая функция в стандартной либе, то было бы вообще хорошо )

with(obj) {}
Ну кстати, тоже вариант ?

Sergey
11.04.2018
12:42:27
buildString { v1?.let(::append) v2?.let(::append) v3?.let(::append) }
проще сделать экстеншен нуллабл

Aleksandr
11.04.2018
15:29:07
коллеги добрый вечер, такой вопрос: fun search(src: String): String? { return null; } fun start() { val avail = emptyMap<String, Int>(); val res: String = avail.keys.map{ search(it)} .filterNotNull() .sortedBy { it.length } .first(); } ` вызовет exception - это идеологически? везде всегда писать firstOrNull() надо?

Aleksandr
11.04.2018
15:30:41
но ведь first никогда не уверен что получит результат по идее

Aleksandr
11.04.2018
15:31:10
да привычка, пробую kotlin и пытаюсь понять в сравнении с java/clojure стоит ли

Глеб
11.04.2018
15:31:21
но ведь first никогда не уверен что получит результат по идее
не всегда. Иногда требуется, чтобы оно упало, если нарушается контракт

Жабра
11.04.2018
15:31:52
но ведь first никогда не уверен что получит результат по идее
Уверен. У вас есть коллекция, вы хотите получить первый элемент. В 99% случаев он существует и будет излишним возиться с проверкой на null.

да привычка, пробую kotlin и пытаюсь понять в сравнении с java/clojure стоит ли
Может, я вас не правильно понял, но не стоит воспринимать kotlin как java++.

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