@proRuby

Страница 574 из 1594
Alexander
29.05.2017
15:37:15
но зачем
итератор

Nikita
29.05.2017
15:37:47
ну сделай две строки

Alexander
29.05.2017
15:38:29
пришлось, но это повторение переменной, было бы круче в одну

Sergey
29.05.2017
15:39:33
@a = @a.to_i + 1

Google
Dima
29.05.2017
15:41:54
@a = @a.to_i + 1
Вот не знаю почему, но я бы так не сделал. Здесь точно надо. Нюменять название переменной

Вкусовщина конечно, но если переменная меняет тип и вообще сильно меняется и не несёт исходного значения, то лучше изменить ее имя.

Nikita
29.05.2017
15:45:29
cnt = 1.step { |i| break i if i == 5 } так можно вернуть счетчик без изменения переменных вообще

Alexander
29.05.2017
15:46:32
cnt = 1.step { |i| break i if i == 5 } так можно вернуть счетчик без изменения переменных вообще
мне итерировтать нужно в определённом месте с получением этого значения потом извне

Nikita
29.05.2017
15:47:21
так в cnt будет результат, можешь сделать @cnt =

Alexander
29.05.2017
15:54:06
так в cnt будет результат, можешь сделать @cnt =
class A < SuperA attr_reader :i def some_shit @i ||= 0 @i += 1 super end end a = A.new 3.times { a.some_shit } a.i #=> 3

Nikita
29.05.2017
15:55:12
да я ж не настаиваю)

не подходит, ну ладно

я бы только в конструкторе инициализировал бы переменные объекта

desmond
29.05.2017
16:43:51
class A < SuperA attr_reader :i def some_shit @i ||= 0 @i += 1 super end end a = A.new 3.times { a.some_shit } a.i #=> 3
если дело происходит в рельсах то можно сделать self.increment!(:i)

точнее не везде в рельсах, это метод AR, если не путаю ничего

Alexander
29.05.2017
17:09:14
я бы только в конструкторе инициализировал бы переменные объекта
Сократил код для патчинга через наследование. Всё это в тестах просто

Nikita
29.05.2017
17:10:12
более правильный вариант не наследование, а композиция здесь

Google
Alexander
29.05.2017
17:21:00
Что за "композиция"?

Philipp
29.05.2017
17:43:43
жесткая свяь между сущностями, где одна сущность является частью другой. Хотя это так себе объяснение, наверное

какие-то ответственности владеющей сущности могут делегироваться составной сущности

Andrey
29.05.2017
17:46:05
https://github.com/piscolomo/ruby-patterns/blob/master/README.md#composite похоже?

Philipp
29.05.2017
17:46:31
это скорее агрегат

и то, нет, не думаю что это можно отнести к агрегатам

Alexander
29.05.2017
18:02:09
жесткая свяь между сущностями, где одна сущность является частью другой. Хотя это так себе объяснение, наверное
Вот есть у тебя Rack::Request, нужно посчитать количество вызовов его метода params в определённом месте, как ты предлагаешь решить?

Roman
29.05.2017
18:06:25
wrapper-proxy какойнить его завернуть

Alexander
29.05.2017
18:08:27
wrapper-proxy какойнить его завернуть
Чем это лучше наследования?

Philipp
29.05.2017
18:10:41
Чем это лучше наследования?
хз. не могу представить контекст. интересно услышать от Никиты)

Roman
29.05.2017
18:15:43
Чем это лучше наследования?
наследования ни чем. но такого типа задачи я даж хз как по-другому решать

Philipp
29.05.2017
18:16:08
Могу лишь предположить что разница в инкапсуляции. Наследование её по сути нарушает.

Roman
29.05.2017
18:16:38
когда говорят "предпочитайте композицию наследованию" имеют в виду "при построении своих систем", а не "при улучшении чужих"

Svetlana
29.05.2017
18:25:29
Всем привет ищу удаленщика на ruby back end , подробно в личку

Nikita
29.05.2017
19:12:28
Могу лишь предположить что разница в инкапсуляции. Наследование её по сути нарушает.
все так. Если тебе нужно лишь посчитать количество вызовов, с чего бы тебе для это раскурочивать объект? Делаешь проксю, ставишь счетчик и считаешь себе, никакого объединенного стейта между объектами

Roman
29.05.2017
19:13:46
а ну значит я таки подсознательно прав :)

Nikita
29.05.2017
21:27:41
если у объекта правильный интерфейс, то проксировать там мало что нужно. Ну а если неправильный, то есть method_missing

Google
Nikita
29.05.2017
21:28:21
я тут разбрасываюсь немного «правильный»/«неправильный», но все же

Nikita
29.05.2017
21:30:12
я как бы попытался намекнуть на инкапсуляцию, интерфейсы, SOLID и прочее, у меня нет времени детально объяснять чем это лучше, чем расширение через наследование

Alexander
29.05.2017
21:40:21
я как бы попытался намекнуть на инкапсуляцию, интерфейсы, SOLID и прочее, у меня нет времени детально объяснять чем это лучше, чем расширение через наследование
Не смог найти инфы, где говорится "не используйте наследование, используйте проксирование через самобытные классы". Везде упоминается именно наследование. Если скинешь — буду рад и благодарен, любопытно

Nikita
29.05.2017
21:47:45
то есть очевидной выгоды всё-таки нет?
очевидность субъективна, скажем так, композиция должна быть вариантом по умолчанию, потому что в большинстве случае ее 1) достаточно, 2) нужно меньше думать о том что там внутри у объекта, 3) это помогает давать объектам разумные интерфейсы

Aleksey
29.05.2017
21:54:51
может они и есть но они не нужны.
мьютекс ведь используется в прикладном коде, чтобы защитить какую-то часть Ruby кода от прерывания "на середине" вернее, прирывание будет, то другой поток туда зайти не сможет а GIL относится только к C-коду это же разные уровни

Oleg
30.05.2017
01:46:22
GIL, кстати, не гарантирует что не получится 1+1 = 1, хотя в почти 100% будет 2

Alexander
30.05.2017
05:47:12
находится по запросу composition over inheritance https://en.wikipedia.org/wiki/Composition_over_inheritance
Спасибо. 1. В "плохом" примере приводится как аргумент "diamond problem", что вытекает из множественного наследования, чего нет в руби 2. В "хорошем примере" используется наследование 3. Тут как будто речь больше о композиции из интерфейсов, миксинов, а не "проксей" 4. Всё это в контексте плюсов Хммм ? Слабенько

Roman
30.05.2017
05:47:49
надо ещё 4 пункта, да?)

Alexander
30.05.2017
05:48:21
надо ещё 4 пункта, да?)
Используйте функцию ответов, пожалуйста. Вы кому писали, мне?

Roman
30.05.2017
05:49:16
Используйте функцию ответов, пожалуйста. Вы кому писали, мне?
ага, просто думал если прям под репликой, то не надо

наследование идеологически - это родственная связь. типа похожие объекты. а в случае с Rack::Request и кастомной поделкой, никакой родственности нет

Alexander
30.05.2017
05:50:35
4 пункта я привёл того, что эта аргументация не согласуется с желанием людей проксю вкорячить

Alexander
30.05.2017
05:51:22
наследование идеологически - это родственная связь. типа похожие объекты. а в случае с Rack::Request и кастомной поделкой, никакой родственности нет
Да блин, есть она! Мне нужен всё тот же реквест, который просто умеет считать количество обращений к одному из своих методов, и всё

Google
Roman
30.05.2017
05:51:56
Alexander
30.05.2017
05:52:05
Я этот реквест и тестирую по сути в том месте. Его сына, так сказать

Roman
30.05.2017
05:54:57
Не аргумент
а если надо допустим сериализовать реквест в csv- это тоже задача Request? тоже добавим миксин?

ещё раз, composition over inheritance - это про построение новых систем, не про адаптацию существующих

Admin
ERROR: S client not available

Alexander
30.05.2017
06:13:17
Композиция или наследование: как выбрать? / Хабрахабр https://m.habrahabr.ru/post/325478/

Вот, перевод охуенной статьи. Ещё раз убедился, что я прав и не больной

Nikita
30.05.2017
06:44:48
Прокси не зависит от объекта, которому делегирует, может считать вызовы любых методов на любом объекте, это его единственная задача и он может быть использован с любым объектом, написать его нужно только один раз. Все это невозможно с наследованием, только extend может такое сделать, но объект может быть заморожен и тогда это тоже не сработает

Alexander
30.05.2017
07:23:29
#работа Middle / senior RoR разработчик / Team lead Мы в компании seendex.ru (Москва) ищем на full-time middle / senior RoR разработчика. Занимаемся разработкой B2B saas для автоматизации оценки уровня развития компаний и мониторинга эффективности коллектива. Основные задачи: - разработка архитектуры системы - бекенд для расчётов - помощь джуниорам Используем рельсы 5.1.1, стандартный рельсовый набор (постгрес, rspec, sidekiq, всё такое), есть проекты на crystal. Любим классы и ООП. з/п - до 180к рублей, офис в БЦ на м. Юго-Западная. Из минусов: - немного бюррократии - рабочий день должен начинаться не позже 11:00 - нет печенек Из плюсов: - предоставляем рабочий макбук или альтернативу - безлимитный кофе - открыты к использованию новых технологий - много пальм и света ?

Nikita
30.05.2017
07:44:09
я пытаюсь объяснить, что это должно быть выбором по умолчанию, потому что это позволяет писать более универсальный код. Я не считаю, что от того как ты напишешь свой тест, твои волосы станут мягкими и шелковистыми, просто рассказываю почем один подход предпочтительней другого

Anatoly
30.05.2017
11:51:29
Кто-нибудь вкурсе почему Rails.application.load_tasks ломает все тесты контроллеров?

Хотел протестировать рейк таску, но чтобы выполнить ее, нужно загрузить их

Alex
30.05.2017
11:53:37
как именно ломает?

Anatoly
30.05.2017
11:55:34
ActionView::Template::Error: No route matches

Ярослав
30.05.2017
12:04:00
тестирую таски по этой статье, ошибок не возникает https://robots.thoughtbot.com/test-rake-tasks-like-a-boss

Anatoly
30.05.2017
12:17:34
Да, тут очень хорошее решение, т.к. таски дублируются, а не используются текущие, спасибо!

Oleg
30.05.2017
14:11:51
А разве это не цель GIL? Гарантировать 1+1=2
В книге "Путь Руби" говорят что нет. Доверяю этому источнику.

Alexander
30.05.2017
14:12:59
В книге "Путь Руби" говорят что нет. Доверяю этому источнику.
на википедии говорят, что да. доверяю этому источнику, опровержений на практике не видел)

Google
Alexander
30.05.2017
14:13:18
он жертвует параллельными вычислениями из-за этого преимущества

Oleg
30.05.2017
14:14:04
Там пишется что мол оно так, но в очень редких кейсах увы шансы словить подобное есть.

И что лучше использовать для этого специальные инструменты, а не полагаться на GIL

Может быть это не так, но станно тогда это всё

Oleg
30.05.2017
14:26:08
Об этом увы там умолчали

Но я на всякий случай принял во внимание

Alexander
30.05.2017
14:28:04
я не отрицаю, но любопытно. так-то можно сказать, что puts всегда выводит строку, но есть исключения, а какие — мы вам не скажем)

Nikita
30.05.2017
14:42:15
:001 > i = 0 => 0 :002 > 5.times.map { Thread.new { 1000.times { i += 1; sleep(rand(100) / 10000.0) } } }.join :003 > i => 1686 :004 > ruby -v ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-darwin16]

Igor
30.05.2017
14:45:18
join не сработал? Если подождать, то i будет равно 5000

Nikita
30.05.2017
14:46:47
а, точняк)

Alexander
30.05.2017
14:47:06
классный кейс) вот я о таких именно и предполагал: когда программист косячит

Nikita
30.05.2017
14:48:51
нужно было map(&:join)

Ivan
30.05.2017
14:49:12
join у той скобки, только надо .each(&:join)

Nikita
30.05.2017
14:49:16
есть же ruby under microscope, я до нее не добирался, но мне кажется там должно быть это описано

Страница 574 из 1594