
Alex
28.09.2017
07:16:22
в реально худшем случае юзай refinements
.nil? вообще опасно трогать.
в общем атата

Google

Anton
28.09.2017
07:17:48

Sergey
28.09.2017
07:19:15

Alex
28.09.2017
07:19:32
если метод собственный то не так страшно
а вот nil.nil? патчить вообще зашквар.
т.е на своем объекте проверку запилить - ну наверное можно.

Sergey
28.09.2017
07:20:53
Окей, спасибо!

Alex
28.09.2017
07:22:30
рано или поздно лучше отрефакторить имхо

Nikolay
28.09.2017
07:30:00
да чет хз, nullObject как раз таки вводят что бы nil? не было в коде
т.е. def nil? в nullObject всю суть nullObject’a убьет

Anton
28.09.2017
07:31:17
Который для нил объектов

Sergey
28.09.2017
07:34:28

Alex
28.09.2017
07:35:35
аджайл фигайл

Google

Alex
28.09.2017
07:35:41
потом помрете под гавнокодом.

Sergey
28.09.2017
07:35:44

Nikolay
28.09.2017
07:42:08
если тесты есть офк

Vasiliy
28.09.2017
07:42:51
о чём трёп? чёт дохуя чиать вас

Nikolay
28.09.2017
07:42:51
а если нет тестов, то держи вазелин —> *вазелин*

Alex
28.09.2017
07:42:55

Nikolay
28.09.2017
07:45:28

Alex
28.09.2017
07:45:52
а зачем nullObject вообще нужен?

Денис
28.09.2017
07:50:42

Anna
28.09.2017
07:51:14
Чтобы не писать везде кучу кода типа
if some_object.present?
some_object.blah
else
'blah'
end

Денис
28.09.2017
07:51:19
Чтобы не писать user&.company&.name

Fedor
28.09.2017
07:51:41
эм
а не проще ли один раз воткнуть return unless object

Anna
28.09.2017
07:51:57

Alex
28.09.2017
07:52:14

Nikolay
28.09.2017
07:52:18
ну например у тебя есть класс Животные. Есть Коши, Собаки - наследники Животные.
class Cat < Animal
def say
“Мяу”
end
def count_of_lives
9
end
end
class Dog < Animal
def say
“Мяу”
end
def count_of_lives
1
end
end
И есть у тебя кусок кода, который пытается типа
def foo(animal)
if animal.count_of_lives > 5 do
puts “IA ZIVY DOLGO”
else
puts animal.say
end
end
И что бы не писать везде if.present? unless.nil? ты можешь заимплементить класс NullAnimal который имеет такой же интерфейс, как и настоящие животные

Anna
28.09.2017
07:52:46

Nikolay
28.09.2017
07:52:53
и твой foo будет рабочим всегда

Alex
28.09.2017
07:52:58
ну такое. Все равно надо везде учитывать что может быть нулльОбъект

Google

Fedor
28.09.2017
07:53:46
ну ты по сути просто все вот эти ифы вытаскиваешь в отдельный класс и все

Alex
28.09.2017
07:54:05

Anna
28.09.2017
07:54:07

Alex
28.09.2017
07:54:27
вот использующий код не знает, и добавит nullObject в отчет, как существующий

Fedor
28.09.2017
07:55:09
в яве какой-нибудь это имеет смысл, а в руби мы можем просто все заменить на нилы и поставить проверку нилов

Alex
28.09.2017
07:55:43
Яваподходы.

Nikolay
28.09.2017
07:55:47
просто тут руби еще( Вот в мире, где есть паттерн метчинг там еще красивее всё, т.к. можно матчится на этот NullObject…а в мире, где есть свёртки, можно `flatMap`’ом выкосить все NullObject’ы

Anna
28.09.2017
07:55:54
Ну получит там пустую строку (например) вместо NoMethodError.
Это если некритично.
Если критично, то это другое дело, мб эксепшен, мб ещё что-то.

Nikolay
28.09.2017
07:56:23
Яваподходы.
зря ты так, в Джавы много хороших архитектурных решений

Fedor
28.09.2017
07:56:26
ruby way - переопределить method missing )

Nikolay
28.09.2017
07:56:31
вместо тысячи if\else\switch

Alex
28.09.2017
07:56:37

Fedor
28.09.2017
07:56:44

Alex
28.09.2017
07:56:51

Fedor
28.09.2017
07:57:00
дорогой, и кривой достаточно )

Nikolay
28.09.2017
07:57:06

Fedor
28.09.2017
07:57:07
и вообще я бы это антипатеррном назвал )

Anton
28.09.2017
07:57:09

Google

Fedor
28.09.2017
07:57:09
но руби вэй

Anna
28.09.2017
07:57:16

Alex
28.09.2017
07:57:24

Anna
28.09.2017
07:57:34

Nikolay
28.09.2017
07:58:04

Alex
28.09.2017
07:58:17
Я проверяю залогинен ли юзер, а он всегда залогинен

Anton
28.09.2017
07:58:40

Alex
28.09.2017
07:58:49

Admin
ERROR: S client not available

Nikolay
28.09.2017
07:58:50
я ж не говорю что гоу везде пихать их) где-то удобно, т.к. под задачу ложится…в руби есть nullObject = nil

Anna
28.09.2017
07:58:52
У тебя должно быть прописано, что GuestUser не залогинен.

Alex
28.09.2017
07:58:52
и чем дальше тем сложнее.

Maksim
28.09.2017
07:59:02
чего люди не придумывают, лишь бы констрейнты в базе не делать =)

Alex
28.09.2017
07:59:18

Maksim
28.09.2017
07:59:43
а в чём сложность? Эйрбрейк тебе напомнит если ты упустил что-то

Nikolay
28.09.2017
07:59:46

Anton
28.09.2017
08:00:04
вообще, единственный юзкейс для "nullobject" который мне нравится - это вот всякие анонимные юзеры и прочая лабуда

Fedor
28.09.2017
08:00:05
нафига мне городить null object для этого?

Google

Maksim
28.09.2017
08:00:23

Anton
28.09.2017
08:00:47

Maksim
28.09.2017
08:00:49
но наверное если интерфейс сильно похожий для анонимуса и нет, то будет хитрее

Anton
28.09.2017
08:01:02
блин, как вы с колбэками живете то?

Nikolay
28.09.2017
08:01:06
а если нужно в интерфейсе вывести типа “Гость”, показать “0” как колво сообщений и еще какие-то спец. выводы?

Anton
28.09.2017
08:01:06
в 2k17 году

Nikolay
28.09.2017
08:01:10
больно

Anna
28.09.2017
08:01:28

Alex
28.09.2017
08:01:45

Anton
28.09.2017
08:02:04

Anna
28.09.2017
08:02:46
Да, логики в самом nullobject немного.

Nikolay
28.09.2017
08:03:08
собственно она “стабовая” = хардкод

Fedor
28.09.2017
08:03:08

Anna
28.09.2017
08:03:23

Fedor
28.09.2017
08:03:23
вот есть у тебя null user который возвращает на name слово гость
а что он делает, когда на его мыло надо почту отправить?
когда надо ему в личку сообщение написать
все равно это все будет затыкаться ифами
просто в другом месте
а еще ему надо локаль проверять, что вернуть "гость" в правильной локали

Anna
28.09.2017
08:04:16
В некоторых случаях возвращать nil, например )