@kotlin_lang

Страница 596 из 982
Mikhail
20.03.2018
13:06:30
верно, умолкаю

Albert
20.03.2018
13:07:29
if (a) "hello" не выражение
Так то тут тоже есть ветвление

Quantum Harmonizer
20.03.2018
13:07:46
Так то тут тоже есть ветвление
ветвление есть, выражения нет

Albert
20.03.2018
13:08:00
Если даже else есть это не выражение. Выражение возвращает булевый результат

Google
Quantum Harmonizer
20.03.2018
13:08:42
Если даже else есть это не выражение. Выражение возвращает булевый результат
выражение просто имеет значение, былевый результат возвращают булевы выражения)

1+1 — выражение, но не Булево

Albert
20.03.2018
13:10:06
Тогда все равно не понимаю твоей логики. if-else такое же выражение / невыражение как и просто if

if else ничего возвращать не обязан.

Даниил
20.03.2018
13:10:48
if else ничего возвращать не обязан.
просто удобно когда if/else — выражение не нужны ублюдские тернарные операторы

Quantum Harmonizer
20.03.2018
13:10:49
Vitalii
20.03.2018
13:11:52
Будет бред
В случае, если var a = if (true) "text" else "not text" Будет работать.

Albert
20.03.2018
13:11:53
Ок, что будет, если ты сделаешь var a = if (true) "text"?
По твоей логике, если там любой else добавить все равно будет выражение

Sergey
20.03.2018
13:12:16
Ок, что будет, если ты сделаешь var a = if (true) "text"?
жаль null по-дефолту не возвращает)

Vitalii
20.03.2018
13:12:18
Google
Даниил
20.03.2018
13:12:28
Quantum Harmonizer
20.03.2018
13:12:29
По твоей логике, если там любой else добавить все равно будет выражение
По моей. Да, уточняю: если в else-ветке есть выражение

Даниил
20.03.2018
13:12:39
жаль null по-дефолту не возвращает)
null не должно быть в языке в принципе

Sergey
20.03.2018
13:12:53
тоже верно

Даниил
20.03.2018
13:13:09
вообще я хз чё вы спорите, вот в Rust нормально сделали if/else выражением, язык от народа

Quantum Harmonizer
20.03.2018
13:13:12
null не должно быть в языке в принципе
Если язык его умеет обрабатывать, как Котлин, почему нет?

Albert
20.03.2018
13:13:27
По моей. Да, уточняю: если в else-ветке есть выражение
Я понял твою мысль. Но это частный случай. if-else может ничего не вернуть.

Даниил
20.03.2018
13:13:42
потому что не нужен
есть Option/Maybe, всё остальное от лукавого

Quantum Harmonizer
20.03.2018
13:13:55
Даниил
20.03.2018
13:14:10
В чём решающая разница?
в том что null — какое-то специальное значение вшитое в язык

а Option — обычная структура данных, такая же как любая другая

Quantum Harmonizer
20.03.2018
13:14:36
в том что null — какое-то специальное значение вшитое в язык
это компромисс. Вроде и опшнал, но бесплатный.

можно, кстати, написано опшнал на инлайновых классах)

Даниил
20.03.2018
13:16:01
Quantum Harmonizer
20.03.2018
13:16:18
щас бы на опшнлах экономить
всегда на чём-то приходится экономить

Vitalii
20.03.2018
13:16:20
щас бы на опшнлах экономить
А если в опшионалах нуллы? ?

Mikhail
20.03.2018
13:16:28
а Option — обычная структура данных, такая же как любая другая
у этого есть и оборотная сторона, у каждого свой опшнал, но немного другой

Andrew
20.03.2018
13:16:38
Я понял твою мысль. Но это частный случай. if-else может ничего не вернуть.
if-else может не вернуть ничего, только если в одной из веток полетит исключение (выражение будет иметь тип Nothing). Тогда на результат по ходу пьесы всем уже плевать, до потребителей дело не дойдёт. во всех остальных случаях какое-то значение да результатом будет, даже если это Unit.

Google
Даниил
20.03.2018
13:16:42
что значит «у каждого свой опшнал»

всегда на чём-то приходится экономить
тогда имеет смысл экономить не на спичках

Vitalii
20.03.2018
13:17:30
Если правильно понял мысль, то у языка А и языка Б разные опшионалы будут, а null — он везде null (хотя, на самом деле нет).

Albert
20.03.2018
13:17:45
СТОЙТЕ!!!

Mikhail
20.03.2018
13:17:47
не понял
ну типа я недавно когда игрался написал свой, в arrow еще один

Albert
20.03.2018
13:17:54
))

Quantum Harmonizer
20.03.2018
13:17:54
тогда имеет смысл экономить не на спичках
Далеко не всегда это спички. Это сравнимо с итераторами, например.

Даниил
20.03.2018
13:17:58
Alexey
20.03.2018
13:18:35
А тот что в java, эх не будем об инвалидах

Mikhail
20.03.2018
13:19:27
вот и я о том же

Andrew
20.03.2018
13:19:38
а если в какой-то ветке цикл или if-не-выражение?
>>> val a = if (true) 5 else for(x in 1..5) println(x) >>> val b = if (false) 5 else for(x in 1..5) println(x) 1 2 3 4 5 >>> b kotlin.Unit >>> a 5

Mikhail
20.03.2018
13:20:50
если бы даже добавили его в stdlib, то все равно нашлись бы люди, которым еще надо чтобы он был Аппликативом или еще че угодно

Quantum Harmonizer
20.03.2018
13:20:59
>>> val a = if (true) 5 else for(x in 1..5) println(x) >>> val b = if (false) 5 else for(x in 1..5) println(x) 1 2 3 4 5 >>> b kotlin.Unit >>> a 5
Мне кажется, REPL работает как-то иначе, минуя некоторые проверки)

Andrew
20.03.2018
13:21:34
Мне кажется, REPL работает как-то иначе, минуя некоторые проверки)
Возможно, ты прав, ибо val a = if (true) 5 тоже выполнилось.

Даниил
20.03.2018
13:21:43
если бы даже добавили его в stdlib, то все равно нашлись бы люди, которым еще надо чтобы он был Аппликативом или еще че угодно
ну вообще чтобы можно было сделать его аппликативом не трогая определение, нужны трейты как в скале, лол

Alexey
20.03.2018
13:22:09
Что вообще значит не выражение? Всё - выражение, и все приводится к типу Any в конце концов

Mikhail
20.03.2018
13:22:10
Google
Даниил
20.03.2018
13:22:10
так что лайкайте пропозал с тайпклассами для котлина, и будут аппликативы

Quantum Harmonizer
20.03.2018
13:22:33
хочу маленькую, модульную stdlib :/

Даниил
20.03.2018
13:22:47
я к тому и вел, что без тайпклассов опшионал не такой уж и радужный
ну в целом сделать аппликативом чужой опшнл не проблема по сути

просто не будет единого интерфейса "аппликатив"

будут просто экстеншн-функции конкретно для опшнла

Alexey
20.03.2018
13:23:12
так что лайкайте пропозал с тайпклассами для котлина, и будут аппликативы
Тот пропосал - какаха, без HKT какие вообще тайп классы

Даниил
20.03.2018
13:23:23
пропосал не какаха, заебись пропосал

Andrew
20.03.2018
13:23:26
Мне кажется, REPL работает как-то иначе, минуя некоторые проверки)
но справедливости ради, val ... = if ... else for ... работает и в try.kotl.in

Admin
ERROR: S client not available

Mikhail
20.03.2018
13:23:34
Тот пропосал - какаха, без HKT какие вообще тайп классы
они ж там в рамках своей либы эмулируют HKT

Даниил
20.03.2018
13:23:47
Тот пропосал - какаха, без HKT какие вообще тайп классы
HKT в котлине (на уровне языка), я уверен, ждать нет смысла

Vladislav
20.03.2018
13:28:59
Подскажите как такую штуку правильно написать?



Mikhail
20.03.2018
13:29:14
Тот пропосал - какаха, без HKT какие вообще тайп классы
Перечитал пропозал - там и HKT тоже есть

Quantum Harmonizer
20.03.2018
13:29:46
как-то вообще иначе, должен быть отдельный способ для дженерик-типов

https://stackoverflow.com/a/11668644/3050249

Mikhail
20.03.2018
13:30:18
Кажется, надо убрать второй аргумент совсем, если у тебя дженериковый апи

сложна

Quantum Harmonizer
20.03.2018
13:30:47
Mikhail
20.03.2018
13:31:16
Думал что реифайд)

Google
Mikhail
20.03.2018
13:31:27
это Jackson?

Quantum Harmonizer
20.03.2018
13:31:32
именно

Bogdan
20.03.2018
13:31:33
HKT - что это такое

Mikhail
20.03.2018
13:31:45
Higher Kinded Types

Sergey
20.03.2018
13:32:14
опять вы со своими HKT

нахера они?)

вы хотите монады?

Vladislav
20.03.2018
13:35:25
Получилось так: fun String.jsonToMap(): Map<String, *> { return ObjectMapper().readValue<Map<String, *>>(this, object : TypeReference<Map<String, *>>() {}) }

Va
20.03.2018
13:37:01
fun <reified T> String.jsonToMap(): Map<String, T> { return ObjectMapper().readValue<Map<String, T>>(this, T::class.java) } не катит ?

Va
20.03.2018
13:38:29
ну логично это же для внешнего апи, я так полагаю юзер руками будет это дергать в виде "somejson".jsonToMap<Data>()

или нет ?

Va
20.03.2018
13:40:50
с чего вдруг? ты же явно укажешь и A и B

Quantum Harmonizer
20.03.2018
13:41:25
с чего вдруг? ты же явно укажешь и A и B
а внутри функции возьмёшь class literal

Va
20.03.2018
13:41:32
и они вообще не важны на том уровне, важно знать информацию о T. он все равно будет виден как Data<*, *>

Quantum Harmonizer
20.03.2018
13:42:19
если нужно просто разобрать как дерево, это можно проще сделать, я думаю)

Va
20.03.2018
13:45:10


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