@kotlin_lang

Страница 203 из 982
Даниил
22.06.2017
14:48:25
знаешь почему null - плохо, и почему это не касается unit?

Adam
22.06.2017
14:48:33
его семантика - ПУСТОТА.

потому что Null предком объектов является

Даниил
22.06.2017
14:50:23
null можно вернуть (не в котлине, так в джаве) из функции, в сигнатуре которой в качестве возвращаемого значения стоит какой-то класс и потом этот null можно попытаться разыменовать unit же - это не "пустая ссылка", просто единичное значение, его нельзя попытаться разыменовать, его нельзя вернуть вместо значения другого класса, это абсолютно безопасная штуковина с прозрачной семантикой

Google
Adam
22.06.2017
14:51:01
его можно вернуть в Kotlin и присвоить в переменную, вот я о чём

Даниил
22.06.2017
14:51:28
я тебе говорю почему от null в джаве бегут

небезопасно

unit - безопасно

а вот подтипы - как раз то что ненужно)

Adam
22.06.2017
14:52:21
да где безопасно, если полагаешься на вывод типа, не проверил сигнатуру в IDE - и получил вывод Unit в переменной

Adam
22.06.2017
14:53:15
Я говорю про то, что если функция возвращает Unit, присваивание должно быть недопустимо

Руслан
22.06.2017
14:53:18
какие серьезные вопросы обсуждаются

https://en.wikipedia.org/wiki/Unit_type

Adam
22.06.2017
14:55:50
я читал всё это

Руслан
22.06.2017
14:57:22
Как бы написано что как минимум один костыль из-за того что void в джаве. И для чего полезно присваивать Unit.

Igor
22.06.2017
14:57:55
ну всё относительно же я имею ввиду, котлин один из тех модных языков, которые предоставляют хотя бы минимальные средства для того чтобы кодить в функциональном стиле было приятнее но это не хаскель, да
Ты кстати как пишешь на котлин? Используешь sealed классы, функции на топлевеле или внутри object, persistent коллекции? Может либу funkionale (я нет тк получения уродский код)?

Google
Даниил
22.06.2017
14:59:13
сейчас на котлине не пишу, но я понял о чём ты на Rust например использую enum'ы (те же ADT), функции "внутри object" (потому что ad-hoc полиморфизм же, на одних топ-левел функциях в Rust далеко не уедешь), коллекции не персистентные, но это из-за специфики Rust (всё-таки прикол в том чтобы писать достаточно шустрый код с zero-cost абстракциями)

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

Adam
22.06.2017
15:02:34
тогда параметрически полиморфные функции ломаются если попытаться использовать в них Unit в качестве типа-параметра
приведи пример, Unit в дженерик-функцию передать, это я понял. Ты имеешь в виду должны доматься или наоборот?

Adam
22.06.2017
15:04:57
Кстати, вопрос такой: если в java, kotlin, ожидаете на входе метода Double/Float, проверяете на +- Infinity (NaN) ?

Quantum Harmonizer
22.06.2017
15:07:14
Хм, часто ли люди вообще используют плавающие числа?

Adam
22.06.2017
15:07:54
ну если разрабатываешь небольшую игру на векторах, то нужны

Даниил
22.06.2017
15:14:42
приведи пример, Unit в дженерик-функцию передать, это я понял. Ты имеешь в виду должны доматься или наоборот?
ну что-то вроде этого, пример немного корявый, но суть такая: fun <T, R> log(f: (T) -> R): (T) -> R { return { x -> val ret = f(x) println("function retured value: ${ret}") ret } } log({x: String -> println(x)})("hello") log({x: Int -> x * x})(42)

я сейчас часа на полтора пропаду, если что тогда в пол восьмого или восемь где-то вернусь и отвечу

Adam
22.06.2017
15:15:34
ок

Quantum Harmonizer
22.06.2017
15:17:23
println(answer(Question("Являются ли вложенные классы костылями?")))

42

Adam
22.06.2017
15:18:09
функция возвращает функцию, что-то не вижу необходимости присваивать Unit в переменную, или я неправильно понял?

обычный карринг, возвращает функцию, где тут подвох-то?

Adam
22.06.2017
15:20:18
R вполне может быть Unit
пусть компилятор скажет, что нельзя присвоить в этом случае в переменную, вот и всё

Adam
22.06.2017
15:21:49
вообще отговорки вроде: копилятор умеет выводить только в случае single-expression не принимаются. Зная гениальный компилятор typescript, который выводит практически всё и вся

Google
Adam
22.06.2017
15:22:41
??

Руслан
22.06.2017
15:22:44
и выводит он местами меньше чем флоу

и хуже

есть целые доклады

Adam
22.06.2017
15:23:37
я отлично знаю typescript, выводит он не всё, но я просто знаю, как ему помогать

но практически всё

Руслан
22.06.2017
15:24:32
да. он отлично выводит any

Adam
22.06.2017
15:25:04
определяешь параметры функции - вывод обеспечен

Руслан
22.06.2017
15:25:16
не такой он божественный, как ты описываешь

Adam
22.06.2017
15:25:17
любой, а не только single-expression

вы давно не пользовались

Руслан
22.06.2017
15:26:52
я пользовался много, и последняя версия была 2.3

Adam
22.06.2017
15:27:16
у меня есть, наверное, почти все кейсы, спрашивай, если что

Руслан
22.06.2017
15:27:37
я к счатью пока на пишу, но приму к сведению, спасибо

вообще стараюсь не писать single expression, а в стандартном стиле чтобы явно указать выходной тип

вот пример

? animufag ?
22.06.2017
15:29:11
https://www.typescriptlang.org/play/#src=function%20foo%3CT%3E()%3A%20T%20%7B%0D%0A%20%20const%20serverObj%3A%20any%20%3D%20%7B%20%5BMath.random()%5D%3A%201%20%7D%0D%0A%20%20return%20serverObj%0D%0A%7D%0D%0A%0D%0Atype%20A%20%3D%20%7B%0D%0A%20%20num%3A%201%0D%0A%7D%0D%0A%0D%0Aconsole.log(foo%3CA%3E())

Adam
22.06.2017
15:29:21
вот пример
ну да, это хороший стиль

? animufag ?
22.06.2017
15:29:24
просто в другом чатике мне кидали

Google
? animufag ?
22.06.2017
15:29:32
думаю ок к месту

такой тайпсейф

Руслан
22.06.2017
15:29:41
с дженериками все плохо

Adam
22.06.2017
15:30:01
где?

Руслан
22.06.2017
15:30:43
в тайпскрипте, увидел пример, вспомнил что были проблемы

Adam
22.06.2017
15:31:34
не было проблем, сравнивал с C# - примерно также себя ведут, за исключением In-out

Руслан
22.06.2017
15:32:02
function foo(num: number) { if (num > 10) { return "cool"; } } console.log(foo(1).toString());

вот это flow ловит)

Admin
ERROR: S client not available

Adam
22.06.2017
15:32:52
Что значит 'ловит?' По-вашему, должно возвращаться Number?

Руслан
22.06.2017
15:32:57


а typescript string вывел

тайпскрипт неправильно тип вывел

тут string?

Adam
22.06.2017
15:33:27
так string и возвращается

Руслан
22.06.2017
15:33:31
не всегда

string|undefined

Adam
22.06.2017
15:33:50
string | undefined

так вы включили null-safe?

Руслан
22.06.2017
15:34:25
а он по дефолту выключен

Google
Adam
22.06.2017
15:34:27
striictNull - что-то

Руслан
22.06.2017
15:34:31
и мало кто включает

Adam
22.06.2017
15:34:31
lf

да

Руслан
22.06.2017
15:34:42
это тоже проблема языка

Adam
22.06.2017
15:34:49
нет, многие знаю современную тенденцию и включают

Руслан
22.06.2017
15:34:55
надо загонять людей в счастье



Igor
22.06.2017
15:39:03
println(answer(Question("Являются ли вложенные классы костылями?")))
”Являются ли вложенные классы костылями?” .let(::Question) .let(::answer) .let(::println) ?

Руслан
22.06.2017
15:39:20
вот отсюда: http://djcordhose.github.io/flow-vs-typescript/flow-typescript-2.html#/

Adam
22.06.2017
15:41:30
а что не так?

Руслан
22.06.2017
15:41:46
ну то что у тебя теперь в котах лежат собаки

массивы то мутабельные

Adam
22.06.2017
15:43:30
Собак ты сможешь использовать только как животных

ты же не использовал ограничение дженерик-типа

Руслан
22.06.2017
15:43:58
да, но в cats теперь собаки

Adam
22.06.2017
15:44:15
так везде

? animufag ?
22.06.2017
15:44:38
см презентацию

Adam
22.06.2017
15:45:03
и собак ты будешь использовать как животных, если типизировал Animal

Quantum Harmonizer
22.06.2017
15:45:11

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