/ / Чи є більш стислий спосіб написання цього коду - рубін

Чи є більш стислий спосіб написання цього коду - рубій

Я щойно написав цей рубіновий код, це дужепросто, я просто хочу поміняти порядок роботи залежно від змінної. У мене таке відчуття, що те, що я написав, є більш багатослівним, ніж потрібно, чи може хтось придумати більш стислий спосіб його написання?

if opts["--appears"]
if regex = opts["--matches"]
test = !response.text.match(regex)
else
test = !response.empty?
end
else
if regex = opts["--matches"]
test = response.text.match(regex)
else
test = response.empty?
end
end

Тож, на мою думку, можна оптимізувати зовнішній, якщо блоковий, все, що змінюється - це перетворюється test в !test. Вибачте за те, що здається простим питанням, але я просто не можу придумати, що робити для його оптимізації.

Повідомте мене, якщо ви вважаєте це поганим форумом для цього питання чи ви вважаєте, що його слід перенести на перегляд коду. Я думав, що це може бути найкращим місцем для цього, але хіба не впевнений.

Дякую

Відповіді:

2 для відповіді № 1

Просте вдосконалення - спершу запустити тест, а потім повернути мінус, якщо опція ["- з'являється"]:

test = if regex = opts["--matches"]
response.text.match(regex)
else
response.empty?
end

opts["--appears"] ? !test : test

0 для відповіді № 2

Я вважаю, що це одночасно спростить код і покращить читабельність:

regex = opts["--matches"]
test =
if opts["--appears"]
regex ? !response.text.match(regex) : !response.empty?
else
regex ? response.text.match(regex)  : response.empty?
end

або, якщо ви віддаєте перевагу:

regex = opts["--matches"]
test =
case opts["--appears"]
when true
regex ? !response.text.match(regex) : !response.empty?
when false
regex ? response.text.match(regex)  : response.empty?
end