Как запустить серию проверок? - PullRequest
1 голос
/ 29 августа 2011

Я пытаюсь выполнить серию операторов if / else, но сейчас они в основном оказываются глубоко вложенными в операторы if / else.

В конечном итоге я хочу сказать: если A неtrue, запустите B. Если B не соответствует true, запустите C. Если C не соответствует true, запустите D и т. д.

Пример неочищения:

if a == b
  return true
else
  c = d/e
  if c = a
    return true
  else
    g = h*i

    if g == true
      return true
    else
      return false
    end
  end
end

Ответы [ 3 ]

2 голосов
/ 29 августа 2011

Во-первых, вам не нужно else, когда вы возвращаетесь из первой ветви if, поэтому ваш

if (condition)
  return true
else
  # otherwise code
end

всегда должен быть написан

if (condition)
  return true

# otherwise code

Это может быть написано более кратко в Rails:

return true if (condition)

# otherwise code

Во-вторых, этот шаблон особенно отвратителен:

if (condition)
  return true
else
  return false
end

Вы должны всегда предпочитать просто возвращатьусловие, которое в точности эквивалентно (при условии, что условие оценивается как логическое истина / ложь):

return (condition)

Сложите их вместе, и вы получите этот существенно упрощенный, не вложенный, но идентичный код:

return true if a == b

c = d/e

return true if c == a

g = h*i

return g == true
1 голос
/ 29 августа 2011

Из вашего примера, поскольку вы возвращаетесь при обнаружении успеха, нет причин вкладывать операторы if.Следующее:

return true if a == b
c = d/e
return true if c == a
g = h*i
return g

будет делать то же самое, что и ваш пример.(На самом деле, я не думаю, что мое окончательное заявление о возврате также требуется)

1 голос
/ 29 августа 2011
return true if a == b
c = d/e
return true if c == a
g = h*i
return true if g == true
return false

Вы можете использовать модификаторы операторов в Ruby для добавления условной логики.Таким образом, вместо вложенных операторов if вы можете просто делать то, что вы планируете делать , если выполняется какое-то условие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...