LINUX.ORG.RU
ФорумTalks

Однострочник

 


0

1

Встретил такой однострочник:

Stats::Updater.new(JSON.parse(File.open(args[:json_path]).read)).update!
Это нормально с точки зрения Ruby/читаемости, etc ?



Последнее исправление: Jopich1 (всего исправлений: 1)

не зная ruby вообще, процентов 80 понял..

то есть с точки зрения читаемости - нормально :-)

не понял только «!» в конце expression

MKuznetsov ★★★★★
()

Открыть файл -> прочитать -> распарсить содержимое как джейсон -> обновить метрики из этих данных. Руби не знаю.

Тебе показать перловый однострочник?

ЗЫ

args[:json_path] — args наверное ассоциативный массив, берем из него по ключу :json_path.

update! — хз, может синтаксис для асинка какой-нибудь.

filosofia
()
Последнее исправление: filosofia (всего исправлений: 1)
Ответ на: комментарий от MKuznetsov

В Ruby имена методов могут оканчиваться на ?, ! или =. С воклицательным знаком обычно те, которые меняют сам объект (update!). С вопросительным — предикаты (alive?). Знак равно используют для трюков типа foo.bar = 3. Это не присваивание, это вызов метода bar= объекта foo с параметром 3.

Про восклицательный знак можно догадаться, если, скажем, знаком со Scheme. Про смысл вопросительных многие догадаются. Про знак равенства я узнал только сегодня.

i-rinat ★★★★★
()

Нет, это нечитаемая наркомания.
И с точки зрения функциональности тоже оч сомнительно.

Goury ★★★★★
()

А что с этой строчкой не так?

Leupold_cat ★★★★★
()
Ответ на: комментарий от i-rinat

foo.bar = 3

это вызов метода bar= объекта foo с параметром 3

А пробелы в Ruby тоже могут являться частью имён методов? :)

intelfx ★★★★★
()
Ответ на: комментарий от intelfx

Самые обычные - нет. Различные модификации, как например, неразрывный пробел и прочие подобные - да.

Leupold_cat ★★★★★
()
Последнее исправление: Leupold_cat (всего исправлений: 2)
Ответ на: комментарий от etwrq

! - это просто часть названия метода. Чтобы сказать программисту что сейчас что-то выполнится. Это не несет в себе никакой логики кроме того что тут кто будет читать код сразу поймет

oster2011 ★★★
()
Ответ на: комментарий от Jopich1

У вас ооп головного мозга, пройдите к доктору. Ну и в целом однострочники такие этого тоже своего рода спецолимпиада. Никакой обработки ошибок, только прямой флоу, шаг влево, шаг вправо - маловнятный стектрейс на лицо

cobold ★★★★★
()

Здорово, из-за File.open не надо лишнего кода писать

Int0l ★★
()
Ответ на: комментарий от TooPar

интересно Вы о пистоне отзываетесь :-)

etwrq ★★★★★
()

я когда использую такого рода чейны, а иногда возможно длиннее - использую новую строку для каждого метода. так удобнее в отладке.
а в целом - вполне норм.

etwrq ★★★★★
()

File.open(args[:json_path]).read)

заменить на File.read(args[:join_path]).

Это нормально с точки зрения Ruby

Зависит от codestyle, принятого в проекте.

Это нормально с точки зрения […] читаемости

Я бы разбил на две строки.

theNamelessOne ★★★★★
()
Последнее исправление: theNamelessOne (всего исправлений: 2)
Ответ на: комментарий от etwrq

Если это было бы так, возникают вопросы. Что передаётся аргументом в метод, если «чейн зафейлился»? Будет ли вызываться метод, если в чейне бросят исключение?

i-rinat ★★★★★
()

С точки зрения читаемости - понятно. С точки зрения стандартов кодирования - плохо.

Зачем бэнг у update? Есть ли смысл делать Stats::Updater statefull классом? Зачем смешивать получение данных и их обработку?

Первое с чего начать - разбить на две строчки.

Mitsumi
()
Ответ на: комментарий от intelfx

:)

Знак = это особый случай, он может быть только в конце имени метода. Особый случай обрабатывается особо, поэтому нет проблем в том, что bar = 3 с пробелом между bar и =, а в bar= пробела нет.

Ruby — странный. Но за это его и любят.

i-rinat ★★★★★
()
Ответ на: комментарий от etwrq

Это лишь convention в stdlib рубей.

Стоит отойти подальше - и вот уже появляется «с бэнгом - бросаются эксепшены, без бенга - нет», и прочее. А когда приходят веб-макаки, то бэнги добавляются к методам по велению левой пятки.

Mitsumi
()

Нет, это НЕ нормально.

Ибо сам Ruby - это оксюморон.

У нас в Akka ! - это “fire-and-forget”.

Но это в действительно востребованном языке программирования (де-факто в занимающем enterpriZe нишу DSL диалекте мегарулезной Джавы).

За знание продуктов от Lightbend реально платят, в отличие от тех «фрилансеров», которые 8 * 5 (+ соцпакет) считают «офисным рабством»(С), не понимая, что 16 * 7 (+ дырка от бублика) - это _добровольное рабство_ и «ветер в кармане».

Bioreactor ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.