@scala_ru

Страница 480 из 1499
Alexander
08.02.2017
07:57:45
case class Address(street: String) case class User(address: Address) val u = Option(User(null)) u.map(_.address).map(_.street)

Джавист мне может и нул засунуть в конструктор, а подом упаду в рантайме.

KrivdaTheTriewe
08.02.2017
07:58:24
А где лучше почитать про оборачивание в опшн при матчинге и как внутри стдлиба такое автооборачивание пресекается ?

Юрий
08.02.2017
07:58:25
ну какбэ это стандартная библиотека, Option используется в куче мест. map также используется очень часто.

Google
Daniel
08.02.2017
07:58:27
в твоем примере опшн причем вообще?

Alexander
08.02.2017
07:58:36
Ну и вообще, какой тогда смысл в map?

Daniel
08.02.2017
07:58:45
какой смысл во всем

все тлен, пиши на го, там нет таких проблем

Юрий
08.02.2017
07:59:08
Some(null) - это конечно днище, то какбэ разрешенная вещь

Oleg
08.02.2017
07:59:22
Намного быстрей работает прям, ага.
да, учитывая отсутствие ветвления, гораздо лучше будет оптимизироваться JIT С2

Alexander
08.02.2017
07:59:49
А в Жаве почему по-другому сделано?

Daniel
08.02.2017
08:00:07
Some(null) это ссзб, не более того, семантика вполне адекватная

Oleg
08.02.2017
08:00:29
А в Жаве почему по-другому сделано?
В жаве много чего по-другому сделано, что потом чинится десятилетиями

Sergey
08.02.2017
08:11:11
джавайские опшены вообще днище

чего стоит отсутствие вменяемого orElse

Google
Sergey
08.02.2017
08:12:00
Ну флэтмэп то как нужно работает, а мэп нет.
Это, кстати, не так. Some(1).flatMap(_ => null) возвращает null )

Юрий
08.02.2017
08:12:46
Some(1).flatMap(_ => null) вообще не скомпилируется

Sergey
08.02.2017
08:12:59
чойто

Юрий
08.02.2017
08:13:19
а нет, этож null

Alexander
08.02.2017
08:13:46
Так оно так и должно работать. Сам обернёшь в опшн.

Grigory
08.02.2017
08:13:59
я с нулами если есть использоую Option конструктор :D он None при null и Some иначе

Sergey
08.02.2017
08:13:59
ну работают они в целом одинаково

Юрий
08.02.2017
08:14:39
семантика map по идее не подразумевает никаких дополнительных действий при маппинге. Оборачивание нула в опшон - это дополнительное дествие, что противоречит семантике

Sergey
08.02.2017
08:15:28
С одной стороны да, а с другой стороны опшены вообще появились, чтоб с null бороться, и он имеет особую семантику

Когда я вчера наткнулся на то, что в джаве Optional.map при резолве лямбды в null возвращает empty, я очень удивился) потом долго думал и решил, что какой-то смысл в этом есть

но неявность смущает, конечно

Daniel
08.02.2017
08:17:22
еще раз, нельзя гарантировать, когда работаешь с null-API, что на null не повесили какую-то логику этого шлака в энтерпрайзе полно убирая null, вы испортите поведение

раз уж вы знаете, что вызываете, то и чекайте сами

Oleg
08.02.2017
08:20:30
И главный аргумент def f: Int ⇒ String = _ => null def g: String ⇒ Int = _ => 1 Some(0).map(f).map(g) == Some(0).map(f andThen g) если бы map работал, как предложил @dosofredriver, Option бы банально не был бы функтором

Oleksandr
08.02.2017
08:21:07
он и быстрее будет
afaik в Option инланиться будут всякие isEmpty / get, так что не уверен

Oleg
08.02.2017
08:21:31
afaik в Option инланиться будут всякие isEmpty / get, так что не уверен
при чём здесь инлайнится, если там extends AnyVal

Nick
08.02.2017
08:22:22
ух, когда дело доходит до инлаина, то эт жесть начинается)

Oleksandr
08.02.2017
08:22:53
при чём здесь инлайнится, если там extends AnyVal
это аргумент, не заметил в моб гитхабе) тогда почему бы не юзать именно такой опшн в стдлибе ?

Google
Nick
08.02.2017
08:23:28
а про какой инлаининг идет речь

jvm или scalac

Oleksandr
08.02.2017
08:23:54
ну вообще jvm

не скалас ведь байткоды гоняет

Nick
08.02.2017
08:26:10
но тем не менее скалак умеет делать инлаин в рамках баит кода

избегая виртуальщины

Oleksandr
08.02.2017
08:28:27
но тем не менее скалак умеет делать инлаин в рамках баит кода
@inline / inline намекают да, потому и "оба", там часть методов @inline

Nick
08.02.2017
08:28:59
ну если вы заговорили про jvm инлаин, то как его гарантировать)

Oleg
08.02.2017
08:29:02
@inline это вообще не гарантия

Nick
08.02.2017
08:30:03
Oleg ну почти гарантия

Oleksandr
08.02.2017
08:30:31
ну если вы заговорили про jvm инлаин, то как его гарантировать)
гарантировать -- никак, думаю но если метод небольшой и "нагретый", то должно быть

Oleg
08.02.2017
08:31:11
Oleg ну почти гарантия
даже и близко нет, насколько я понимаю, он при равном размере метода будет скорее оставлять помеченные, но не более

Oleksandr
08.02.2017
08:32:15
см. аргумент выше
я лично готов забить на потерю законов в некоторых корнер-кейсах с наллами (которых, по-хорошему, не должно быть в юзер апи) ради производительности

Nick
08.02.2017
08:32:17
Oleg если у тебя большой метод с кучей байткода внутри, то по сути он уже заинлаинин)

Alexander
08.02.2017
08:32:52
ну работают они в целом одинаково
Нет. Когда я делаю флэтмап, то гарантии по NULL'LESS висят на мне. Когда я делаю map, этим как-бы сам контейнер занимается. В итоге опшн, который, якобы, даёт какой никакой null safety нифига не даёт в случае с map.

Oleg
08.02.2017
08:33:02
я вообще не знаю языка с подобными метками, где можно было бы гарантировать инлайн, даже в С++ нет

Nick
08.02.2017
08:34:20
смотря о каком инлаине идет речь, повторюсь)

100% это конечно не возможно

Google
Alexander
08.02.2017
08:35:30
Oleg
08.02.2017
08:36:49
Это всё здорово, когда у нас хаскелл. На жвм оно не очень работает. А так да, аргумент хороший.
оно везде работает хорошо в смысле "предсказуемо", этими законами пользуется компилятор, когда перехреначивает твои for ы

Oleksandr
08.02.2017
08:37:39
не пользуется он ими

Oleg
08.02.2017
08:37:50
пользуется, сам мне вчера сказал

Oleksandr
08.02.2017
08:37:50
максимум -- ожидает наличия

Oleg
08.02.2017
08:38:27
"А я, Олег, знаешь, частенько пользану закон-другой, когда дело за for заходит"

Admin
ERROR: S client not available

Oleksandr
08.02.2017
08:39:01
я могу сделать бредовый контейнер, которым, тем не менее, можно будет заюзать в форе

Oleg
08.02.2017
08:39:12
ДА

Например, Try

Или Future

И получишь херню, которую получишь

Поэтому не делайте бредовых контейнеров

Oleksandr
08.02.2017
08:40:25
пользуюсь фьючами, все ок меньше фанатизма

Oleg
08.02.2017
08:43:34
Ну все пользуются, всем ок, потому что тут хреновая монада - благоразумие. А портить опшн только ради толики подъёма производительности вопреки здравому смыслу никому не нужно. Просто не используй Option в своём codeforces.

Vasily
08.02.2017
08:44:40
Слушайте, парни, а нельзя разве определить тип, который не будет позволять null? И процессить уже его

Oleg
08.02.2017
08:47:31
Как в котлине?
Kotlin's type system is aimed to eliminate NullPointerException's from our code. The only possible causes of NPE's may be ... - External Java code has caused it - There's some data inconsistency with regard to initialization (an uninitialized this available in a constructor is used somewhere)

И толку

Google
Alexander
08.02.2017
08:49:51
Ну я не писал почти на нём, не могу прокомментировать.

Daniel
08.02.2017
08:49:59
Слушайте, парни, а нельзя разве определить тип, который не будет позволять null? И процессить уже его
в скале это bottom type и тут все хреново из-за выставления границ типа единственный вариант, который знаю =:=

Daniel
08.02.2017
08:51:52
как боттом тип в скале выступают Nothing, Null и брошенные исключения

Daniel
08.02.2017
08:56:17
Null это подтип Nothing строго говоря

Vasily
08.02.2017
08:56:32
В F# можно написать, например type Price=int option

И хрен туда кто уже null прокинет

Daniel
08.02.2017
08:57:44
F# потому что не разрешает использовать null для "своих" типов

Oleg
08.02.2017
08:58:23
Технически это означало бы проверку на null каждый раз, когда ты присваиваешь своему типу что-то из небезопасной иерархии

Вот это реально ударило бы по перфомансу

Vasily
08.02.2017
09:00:12
Фишка в том, что подобное поведение отлавливается на уровне компиляции, по идее

Daniel
08.02.2017
09:00:53
в дотти возможно будет лучше, но я пейпер только начал читать, не могу точно сказать

Oleg
08.02.2017
09:02:08
Фишка в том, что подобное поведение отлавливается на уровне компиляции, по идее
ну тебе в любом случае нужен какой-то гейт между безопасным и небезопасным мирами

если пересечение их широко

а оно настолько же широко, как сама java

проверок будет очень много

Vasily
08.02.2017
09:02:52
Ну гейта тут два вида, по идее - это или данные, которые надо десериализовать, или интероп

С интеропом жопа, согласен

Eugene
08.02.2017
09:43:51
Всем привет, ребята! Приятно видеть, что тут приличное такое количество людей Я в Scala новичок, но хочу от нее пропереться :) Сам под Android пишу, даже после Kotlin'a немного голова кружится. В общем, нужен ваш совет. Разрабатываю сервак (scala + play + anorm) Выстроил схему бд и не знаю как быть с моделями. Простой пример - есть сущность Company со стандартными полями типа id, title, и т.д. И есть Product. Связь между ними 1:M. Как лучше организовать модельку Company что бы удобно было делать выборку из бд, фаршировать объект и через api json'ом его отдавать? На гитхабе как то не густо с этим делом. Приличных разжеванных примеров не видно. Или может я не так ищу :)

Страница 480 из 1499