@kotlin_lang

Страница 593 из 982
Alexey
19.03.2018
14:35:07
И что ты будешь делать с дублирующимися ключами?
Ты же про то, что в объекте можно передать одно и тоже поле 2 раза?

Quantum Harmonizer
19.03.2018
14:35:49
Ты же про то, что в объекте можно передать одно и тоже поле 2 раза?
Я про то что в массиве из сотни объектов с одинаковой структурой имя каждого поля встретишь сотню раз.

Mikhail
19.03.2018
14:37:34
свежие графики подъехали https://github.com/wizzardo/json-benchmarks
Мб pojo и map на разные графики разнести?

Mikhail
19.03.2018
14:39:11
можно наверно, но сравнивать тогда их неудобно будет, хотя и сейчас оно плохо читаемо

Google
Mikhail
19.03.2018
14:39:42
нужно график жаваскриптом рисовать, с выбором, что рисовать

никто не хочет заняться?)

Ivan
19.03.2018
14:54:39
Люююююди, в jvm есть кешь строк, и она всё закеширует за вас, по статистикам
а вот тут разочарование: кэш стрингов только для строк которые известны в компайлстатике

если приходит строка из сети, то тут упс, всегда будет выделение

Жабра
19.03.2018
15:07:39
https://m.habrahabr.ru/company/redmadrobot/blog/351516/

Руслан
19.03.2018
15:08:11
Выжимка из доклада Станислава Ерохина с митапа @kug_spb опубликована на хабре https://habrahabr.ru/company/redmadrobot/blog/351516/

Тимур
19.03.2018
17:43:17
свежие графики подъехали https://github.com/wizzardo/json-benchmarks
jackson то жжет там использовалась сериализация через object mapper?

Oleg
19.03.2018
17:47:43
Нашел)

Mikhail
19.03.2018
17:48:29
jackson то жжет там использовалась сериализация через object mapper?
да, он хорош, да ObjectMapper, есть еще варианты?

Тимур
19.03.2018
17:49:16
стриминг, но в объект уже руками запихивать хотя конечно тогда это не совсем уже полноценная сериализация

теперь надо протобуф vs json )

Жабра
19.03.2018
20:40:19
Не совсем понятна концепция инлайн классов в 1.3. Может кто-нибудь объяснить?

Sergey
19.03.2018
20:42:27
ну, они инлайнятся))

Google
Жабра
19.03.2018
20:45:06
Спс.)))

Bogdan
19.03.2018
21:23:22
Может я слишком пного хочу. Есть функция принимающая лямду с ресивером, в этой лямбде кроме прочих операций я могу вызвать либо ф1 либо ф2, либо ниукакую. Есть ли такая странная возможность

Bogdan
19.03.2018
21:25:58
не очень понятно о каких "прочих операциях" речь? что ты хочешь фактически сделать?
забуть при прочих (рутиных), мне нужно вызвать либо ф1 либо ф2

очень странный кейс, скорей я просто играюсь

Kirill
19.03.2018
21:26:59
Костя
19.03.2018
21:28:04
Метод, который из условия какого-то вызывает ф1 или ф2 функции, которые передаешь в метод ?

Примерно такое ?

Bogdan
19.03.2018
21:30:13
Примерно такое ?
да не, забейте

Тимур
19.03.2018
21:54:27
Не совсем понятна концепция инлайн классов в 1.3. Может кто-нибудь объяснить?
Это что-то типа value type для бедных Когда хочется хранить данные не по ссылке, а по значению. Но поскольку value types в JVM не завезли, то видимо приходится извращаться в отведенных JVM рамках, например у inline классов может быть только одно поле.

Тимур
19.03.2018
22:03:52
:) интересно, что они пишут что ограничение на одно поле "пока" я вот гадаю, как же его можно потом обойти, ну кроме того, что написать свою JVM

Ivan
19.03.2018
22:07:37
Не совсем понятна концепция инлайн классов в 1.3. Может кто-нибудь объяснить?
Я думаю сейчас самое простое понимание про инлайн классы будет сделать какой-нибудь класс Point, заюзать его в паре мест, а потом нажать на классе ctrl+alt+N в идее и посмотреть что будет

Тимур
19.03.2018
22:13:51
:) интересно, что они пишут что ограничение на одно поле "пока" я вот гадаю, как же его можно потом обойти, ну кроме того, что написать свою JVM
хотя я кажется догадываюсь, как если просто запретить на них ссылки, всегда передавать по значению

Никита
19.03.2018
22:54:57
А кто то пилил бэк для почтовых клиентов? Если взять JavaMailApi + ktor, норм будет если в бэкенд ниразу ногой не ходил, а говнокодил под ведро? Или есть что то готовое норм, что можно будет легко переделать?

Тимур
19.03.2018
23:45:19
не, джит об этом даже не догадается, потому что этот класс не переживет фазу компиляции и до jvm не доберется везде где этот класс используется, компилятор засунет его содержимое по принципу "мы с Тамарой ходим парой" Например, было class Vec2(val x: Float, val y: Float) class Foo(val position: Vec2) А станет Foo(val position_x: Float, val position_y: Float)

но это всего лишь мои догадки, как оно на самом деле, посмотрим когда выйдет

Ivan
19.03.2018
23:51:18
А, ну я думал оно так и сейчас есть

С коллекциями самая засада, хз как заинлайнить ключ в мапке, например

Google
Тимур
19.03.2018
23:55:29
никак, только свои коллекции делать специально для этого

вообще если идти в native, то конечно хочется и value types, и generics полноценные как у людей а тут эта java архаичная со своими ограничениями, с которой надо совместимость поддерживать вот не осилил Sun в восемьсот двенадцатом году, а до сих пор аукается

Boris
20.03.2018
02:10:41
Очень хороший пример инлайн-класса это Color огромное количество методов которые с ним можно делать, получать ргб компоненты, инвертировать, складывать, вычитать и ещё куча всего. По факту же это обёртка для инта (обычно). Т.е. можно просто было бы заменить использование цвета на инт+экстеншены для экономии объекта на каждый инсианс, но некошерно засорять скоуп инта. И тут выходит инлайн класс такой красивый, который это может сделать в отдельном скоупе

Alexey
20.03.2018
03:34:07
Котланы, есть вот такой пример fun foo(a: Int, b: Int) = ??? val a: Int? val b: Int? val c = a?.let { a -> b?.let { foo(a, it)) } } Есть ли более простой, красивый или идеоматичный способ сделать это?

Vladimir
20.03.2018
03:36:45
Alexey
20.03.2018
03:37:39
ох как больно

кароч null safety подвезли, а удобные комбинаторы забыли

Vladimir
20.03.2018
03:40:22
кароч null safety подвезли, а удобные комбинаторы забыли
Это да. Но для такой ситуации можно и свой написать.

Alexey
20.03.2018
03:40:51
Это да. Но для такой ситуации можно и свой написать.
Всё можно самому написать, но это не в плюс языку и комьюнити

Вложенные let хоть сколько то декларативно выглядят, с if совсем чот печать

Еще и туплы задепрекейтили, так бы можно было екстеншинов написать на подобии (a, b, c, d).mapN(foo)

Alexey
20.03.2018
06:22:15
Arrow.core.option и монада
Если тащить Arrow то проще на скале

Victor
20.03.2018
06:22:40
Ну ты же чото не на скале :)

Да не ссы, тащи

Alexey
20.03.2018
06:22:56
Ну ты же чото не на скале :)
С чего ты это взял?

Victor
20.03.2018
06:23:05
А, ну тогда на скале

¯\_(ツ)_/¯

Alexey
20.03.2018
06:23:48
Я пытаюсь плюсы коклина почувствовать, не зря же люди его писали

Google
Grigory
20.03.2018
06:24:49
@eld0727 наш шпион из скала чатика

Alexey
20.03.2018
06:25:15
Я же уже обозначил свою роль тут - диванный эксперт

Igor
20.03.2018
06:31:38
Я пытаюсь плюсы коклина почувствовать, не зря же люди его писали
Плюс котлина точно не в тюплах и комбинаторах P.S. и if сверху куда нагляднее выглядел

Alexey
20.03.2018
06:35:55
Плюс котлина точно не в тюплах и комбинаторах P.S. и if сверху куда нагляднее выглядел
Про плюсы - это я не про конкретную задачу говорю, а вообще. В конкретной задаче у меня бугурт, что для такой повседневной задачи не подвезли удобный синтаксис, а приходится бойлерпоейтить

Тимур
20.03.2018
07:44:17
через if норм, куда уж идиоматичней?

Admin
ERROR: S client not available

Alexey
20.03.2018
08:42:16
через if норм, куда уж идиоматичней?
Если бы я считал, что if с проверкой на null - это норм, я бы не спрашивал

Sergey
20.03.2018
08:52:54
Куда глядеть?
так сходу не сброшу ссылок https://habrahabr.ru/company/redmadrobot/blog/351516/ вот тут к примеру Метаинформация для DFA и смарткастов

это и сейчас используется в stdlib, но самому вроде нельзя юзать контракты

public inline fun <T:Any> requireNotNull(value: T?): T { contract { returns() implies (value != null) } return requireNotNull(value) { "Required value was null." } } вот например ты делаешь val a: String? = "trololo" requireNotNull(a) a.length // без контракта тебе нужно было б делать a!!.length или проверять на null еще раз

Alexey
20.03.2018
08:55:57
Да уже прочитал, спасибо

Ну вобщем то не легче от этого :)

Sergey
20.03.2018
08:57:17
ну ты и щас можешь сделать свою notNull функцию, но внутри тела нужно будет делать !! для каждой переменной. а так с контрактом компилятор сам догадается что там не нулы

Alexey
20.03.2018
09:02:47
Ну я скорее написал бы всё таки ряд утильных функций fun <A, B, C> apply(a: A?, b: B?, f: (A, B) -> C): C? = ???

Sergey
20.03.2018
09:09:42
ну хз, let юзать всегда как замену для if тоже не очень хорошо

Alexey
20.03.2018
09:10:36
Прост let убирает ненужную ветку с return, и я могу A? воспринимать как эндофунктор впринципе, а ?.let как map

Sergey
20.03.2018
09:11:37
не уверен что это даст плюс к читаемости кода

Google
Mikhail
20.03.2018
09:21:20
ну и можно вместо тупла сделать просто функцию от двух аргументов

Mikhail
20.03.2018
09:26:01
Это что-то типа value type для бедных Когда хочется хранить данные не по ссылке, а по значению. Но поскольку value types в JVM не завезли, то видимо приходится извращаться в отведенных JVM рамках, например у inline классов может быть только одно поле.
по ссылке и по значению - какие то сишные термины. Мне казалось, что суть inline классы == newtype в Haskell. Просто возможно сократить множество типа и построить абстракцию без удара по перформансу

Тимур
20.03.2018
09:34:34
не только сишные на каком языке ни писать, все равно все в итоге сведется к перекладыванию байтиков с места на место и оно будет либо по ссылке, либо значению

Alexey
20.03.2018
09:36:03
Само разделение передача по ссылке и по значению, уже не правильно

Потому что всегда передаётся значение примитивов

Тимур
20.03.2018
09:41:21
ну по факту такое разделение уже есть в куче языков надо срочно написать их создателям, что это неправильно, пусть переделывают

Alexey
20.03.2018
09:59:33
Какое разделение? Есть прувы где то, что создатели языка вот так это всё называют?

Bogdan
20.03.2018
10:02:02
Потому что всегда передаётся значение примитивов
ну не сказалы бы, примитив это что-то конкретное, оно имеет смысл. Правильней сказать это все некий набор битов (или что в таком духе)

Тимур
20.03.2018
10:03:51
Какое разделение? Есть прувы где то, что создатели языка вот так это всё называют?
ну называют по разному иногда ссылку называют "указатель", но суть дела от этого не меняется на уровне байтиков выбора ровно два: либо пихать в стек адрес объекта, либо целиком тушкой либо в поле хранить адрес участка памяти, где хранится объект, либо сам объект тушкой а в какие языковые абстракции это сверху обернуто и как их назвать - это уже дело вкуса

Alexey
20.03.2018
10:05:36
Кароч ладно, у меня более жизненный вопрос есть разница межу and и &&

Andrew
20.03.2018
10:06:07
https://kotlinlang.org/docs/reference/basic-types.html#operations

Bogdan
20.03.2018
10:06:19
а не есть

and это &

но жто не точно

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