Присвоение и оценка состояния за один шаг - PullRequest
2 голосов
/ 07 января 2010

У меня есть этот код

def errorMap = validateParams(params)
if (errorMap) {
    flash.errorMap = errorMap
    return
}

Мой вопрос такой: могу ли я объединить присваивание в строке # 1 и оценку условия в строке # 2, чтобы получить один вкладыш, как показано ниже:

if (flash.errorMap = validateParams(params)) {
   return
}

Это плохая практика?

Спасибо

Виджай Кумар

Ответы [ 4 ]

1 голос
/ 07 января 2010

Мы знакомы с C-подобными языками, поэтому одинарные «=» должны выглядеть как опечатка в операторе if. Использование синтаксиса, где единственное равенство делает то, что вы имеете в виду, затрудняет выявление случаев опечаток.

Хотя вы, конечно, можете сделать это, мои два цента в том, что это обычно плохая практика. Это кратко, но ваше утверждение if теперь полагается на оценку назначения, что может быть неочевидно сразу после того, как вы вернетесь и повторно вернетесь к этому коду через несколько месяцев.

0 голосов
/ 08 января 2010

Хотя отдельный код выглядит точным и элегантным, оператор присваивания (=) внутри предложения if, скорее всего, будет пропущен как более распространенный оператор сравнения (==), что вызовет больше проблем.

Я бы не использовал это на практике. Это может сделать хороший вопрос с несколькими вариантами ответа.

0 голосов
/ 07 января 2010

Если это код C ++ или C #, вы можете комбинировать присваивание и оценку условия. Просто убедитесь, что вы не используете присваивание (=) вместо сравнения (==). Вы можете потратить часы, разбираясь с этим.

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

Например, if (x ++> 100) doStuff ()

против

if (x + 1> 100) doStuff ()

0 голосов
/ 07 января 2010

На мой взгляд, это очень хорошая практика. Вызов функции и проверка ее возвращаемого значения должны быть продуманы вместе, и объединение их в исходном коде помогает сделать это. Если вы делаете это привычно, то по сути становится невозможным случайно вызвать функцию, но пропустить проверку кода на предмет ее успешности.

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