@kotlin_lang

Страница 630 из 982
Aleksandr
11.04.2018
15:50:21
например

clojure выдаст null на пустой коллекции

а котлин просто упадет

Google
Жабра
11.04.2018
15:53:59
после filter? java 8 streams всегда на такое отдают Optional
Если не ошибаюсь, filter вернёт пустую коллекцию, а first() выдаст экзепшен, если попытаться применить на пустой коллекции

Используйте firstOrNull()

Жабра
11.04.2018
15:55:19
https://github.com/indrih17
А причем тут мой гит?

Aleksandr
11.04.2018
15:55:23
ой

буфер глюкануло сорри)

Жабра
11.04.2018
15:55:51
Ничего.)

Aleksandr
11.04.2018
15:56:05
https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html#findFirst--

там правда тож возможен NPE - но first сработает как и ожидается - вернет что "может есть значение"

Жабра
11.04.2018
15:58:21
В котлине не принято использовать Optional.

Aleksandr
11.04.2018
15:58:26
просто ожидамое поведение совсем наоборот или first! или requiredFirst или что-то подобное

да, я скорее привел сравнение с другими языками

пытаюсь понять почему решили так а не иначе сделать

Google
Жабра
11.04.2018
16:00:28
Потому что в 99% случаев это работает и first() что-то возвращает. Если он применен на пустой коллекции - значит где-то ошибка в логике программы, надо прямо об этом уведомить, а не скрывать за неопределенным поведением. А если у вас всё же по логике возможен пустой список - используйте firstOrNull().

Dmitry
11.04.2018
16:03:01
Я тоже считаю, что это фиговое решение. Мне кажется first()!! better, than firstOrNull() everywhere

Жабра
11.04.2018
16:04:18
Разрабы котлина могли сделать first(), который может возвращать null, но это плохая практика. Везде придётся городить ?., хотя по логике там никак не может быть null.

Aleksandr
11.04.2018
16:04:45
могли сделать first!

и first который вернет T?

Жабра
11.04.2018
16:05:35
и first который вернет T?
firstOrNull() явно уведомляет о своем поведении.

Aleksandr
11.04.2018
16:05:36
а в итоге получили неочевидное поведение о котором надо думать

Жабра
11.04.2018
16:06:39
а в итоге получили неочевидное поведение о котором надо думать
С этим достаточно один раз столкнуться, чтобы понять и больше об этом не думать.

Всё будет на автомате.

Dmitry
11.04.2018
16:12:07
У меня на автомате всегда писать firstOrNull(), тоже конечно решение. Ну апи уже сделано, обсуждать бессмысленно.

Andrew
11.04.2018
16:14:35
Если у тебя мапа, как ты можешь быть уверен, что там точно есть элемент по ключу?
Речь о том, что в одних ситуациях ты в этом не уверен и используешь .firstOrNull(), в других там должен быть этот элемент, а если его нету, то всё плохо и стоит в этом конкретном месте бросить исключение.

Dmitry
11.04.2018
16:16:03
Да, в таком редком случае я бы сделал first()!! или редкую функцию с длинным названием типа firstNotNull()

Andrew
11.04.2018
16:16:27
Я вот не понимаю, откуда у людей столько придирок к мелочам вроде названий методов. Как в одном из интервью говорил Бреслав, "Раз единственное, что смущает людей в языке — это отсутствие тернарного оператора, значит всё остальное мы сделали правильно" :)

> в таком редком случае То, что вы любите null-ы больше, чем исключения, не значит, что так делают все.

Dmitry
11.04.2018
16:17:31
Дык когда эти мелочи каждый день десятки раз мусолишь, они уже не такие мелочи. Отсутсвие тернарного оператора кстати реально печаль.

Dmitry
11.04.2018
16:18:32
А это реально удобно.

Google
Dmitry
11.04.2018
16:18:55
И не такие уже это мелочи, мелочи - это доступ к элементам массива через квадратные скобки.

Andrew
11.04.2018
16:18:56
Ну да, val x = if(a) b else c, несомненно, гораздо хуже, чем final int x = a ? b : c.

Mikhail
11.04.2018
16:19:43
В Java кстати не хватает очень такого, когда if в =

Andrew
11.04.2018
16:20:05
Впрочем, я обещал себе не спорить с людьми, которые придираются к синтаксису языка.

Dmitry
11.04.2018
16:21:12
Мы тут про стандартную либу говорили -)

Ну да, val x = if(a) b else c, несомненно, гораздо хуже, чем final int x = a ? b : c.
= if (currency.isEmpty()) "" else Currency.getInstance(currency).getSymbol(currencyLocale) = currency.isEmpty() ? "" : Currency.getInstance(currency).getSymbol(currencyLocale)

Лучше же читается

В чатике правда это не заметно -)

Dmitriy
11.04.2018
16:28:28
= if (currency.isEmpty()) "" else Currency.getInstance(currency).getSymbol(currencyLocale) = currency.isEmpty() ? "" : Currency.getInstance(currency).getSymbol(currencyLocale)

Aleksandr
11.04.2018
16:28:40
кстати про придирки

const val кажется тож совсем неочевидной наркоманией

сама по себе фраза

Andrew
11.04.2018
16:37:15
https://kotlinlang.org/docs/reference/keyword-reference.html#modifier-keywords Всё ради того, чтобы минимизировать количество hard keywords.

Andrew
11.04.2018
16:54:03
Вкусовщина. Лично мне - нет.
Это был сарказм — на мой взгляд, через некоторое довольно короткое время глаз перестаёт за это цепляться. Не говоря уже о том, что котлиновский if позволяет писать блоки вместо исключительно выражений, доступных в тернарнике.

Даниил
11.04.2018
17:02:02
а, чёрт, не прочитал последнее сообщение)

Pavel
11.04.2018
17:13:04
Очевидность субьективна
Которую можно измерить скоростью понимания

Google
Mikhail
11.04.2018
17:17:54
Для джависта может она и выше, но не настолько, чтобы ради этого вводить специальный синтаксис. Тем более, что ? уже обозначает нуллабельный тип

Mikhail
11.04.2018
17:26:20
Я вот немного на питоне писал, там x if predicate() else y конструкция. С виду безобидная, но если появляется вложенность, становится абсолютно нечитаемо. В Котлине же сделали идеально - "тернарный оператор" абсолютно равен синтаксически и семантически условному.

Andrew
11.04.2018
17:38:47
Пайтоновские list comprehensions вообще не от мира сего -- сейчас на нём пишу, хочу обратно на котлин :( if по их же мотивам вывернут, да.

Quantum Harmonizer
11.04.2018
19:26:00
про макросы)

Я готов перейти на го если в яве появятся макросы.

Pavel
11.04.2018
21:23:30
Потом узнать, что на го нет дженериков и вернуться обратно

Bogdan
11.04.2018
21:37:08
ребят а что лучше юзать jackson или gson, слышал про второй, но я юзал со спрингом первый. Хотелось мнения что предпочтительней для котлин, или есть инные альтернативы ?

Leonid
11.04.2018
21:40:08
Ну спринговый jackson из коробки прекрасно и с котлином работает

А для мультиплатформенных проектов да, надо kotlinx.serialization юзать

Bogdan
11.04.2018
21:43:01
ок, спасибо

Boris
12.04.2018
05:32:25
ребят а что лучше юзать jackson или gson, слышал про второй, но я юзал со спрингом первый. Хотелось мнения что предпочтительней для котлин, или есть инные альтернативы ?
Если из этих двух выбирать, то конечно джексон. Помимо прочего у него есть модуль для котлина, что делает работу с ним на порядок приятнее

Loljeene
12.04.2018
05:39:23
у джексона есть стриминг апи и он довольно неплох. Для огромных json я его использую.

Sergey
12.04.2018
05:47:40
с помощью gson тоже можно читать в потоке

Тимур
12.04.2018
06:56:34
меня вот искренне удивляет, как можно в 21 веке сделать язык без дженериков, и что еще находятся желающие на этом программировать

Google
Egor
12.04.2018
06:57:19
Это не главная проблема голанга, лол

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