Что лучше применять два условия вложенных Если или использовать сингл с И?
Вложенное Если или одно, если с оператором И, который лучше подходит?
Одиночный Если с помощью
if (txtPackage.Text != string.Empty && txtPackage.Text == "abc")
{
//
}
Вложенный, если
if (txtPackage.Text != string.Empty)
{
if (txtPackage.Text == "abc")
{
//
}
}
Ответы
Ответ 1
Собираетесь ли вы сделать что-то другое в примере "вложенные, если", если на самом деле txtPackage.Text не пуст, но содержит нечто иное, чем "abc"?
Если вы этого не сделаете, я бы спросил, почему вы вообще проверяете string.empty?
Вы можете просто написать:
if (txtPackage.Text == "abc")
{
//
}
и выполняться с ним.
Полностью зависит от того, что вы хотите сделать в конце.
Ответ 2
Я не собирался звонить, но, видя, что некоторые ответы здесь, похоже, касаются "Мне нравится, чтобы мой код выглядел так"... Я чувствую, что должен сказать что-то:)
"Лучше" означает, что код будет выполняться быстрее или более читабельным/расширяемым. Вы хотели бы вложить ваш if, если в случае, если у вас будет несколько проверок, у всех есть общее требование.
Пример:
if (myThingy != null)
{
if (myThingy.Text = "Hello") ...
if (myThingy.SomethingElse = 123) ...
}
EDIT: также нужно сказать, что вложение вашего IF требует большего количества циклов процессора (и, следовательно, "медленнее" ), чем один IF. Кроме того, порядок ваших условий может значительно повысить производительность.
Повторно запустите:
if (somethingQuick() && somethingThatTakesASecondToCalculate()) ...
намного быстрее (конечно), чем
if (somethingThatTakesASecondToCalculate() && somethingQuick()) ...
Потому что, если первая часть ПЧ выходит из строя, вторая часть даже не будет выполнена, тем самым экономя время.
Ответ 3
никто не упомянул о сохранении этого кода. Что проще отлаживать?
если это не удается:
if (thisIsTrue && thisIsTrueToo)
doStuff();
вы знаете, что одно из этих двух утверждений не удалось, но не тот.
если это не удается:
if (thisIsTrue) {
if (thisIsTrueToo)
doStuff();
}
ваше исключение указывает номер строки.
Я говорю "идти" для удобства обслуживания, так как вы, вероятно, не будете на этом коде навсегда.
Ответ 4
Вам действительно нужно определить, что вы подразумеваете под "лучше".
Мой стиль должен использовать один if и AND, если, как и в вашем примере, я тестирую одно и то же для двух разных значений.
Если два теста концептуально отличаются, я, вероятно, их выложу
if (!user_option.work_offline) {
if (no_current_connection) {
start_connection()
}
}
Ответ 5
Я чувствую, что лучше избегать вложенных ifs.
Иногда я даже дублирую простые тесты, чтобы избежать уровня вложенности.
Пример (python):
# I prefer:
if a and b:
foo()
elif a and not b:
bar()
elif not a and b:
foobar()
elif not a and not b:
baz()
# Instead of:
if a:
if b:
foo()
else:
bar()
else:
if b:
foobar()
else:
baz()
Иногда более естественно иметь else-clause как последнюю часть. В таких случаях я обычно утверждаю условия предложения else. Пример:
if a and b:
foo()
elif a and not b:
bar()
elif not a and b:
foobar()
elif not a and not b:
baz()
else:
assert not a and not b
baz()
Ответ 6
+1 к его matt
В исходном вопросе я лично избегаю вложенных ifs, где это возможно, иначе я бы получил много кода стрелки.
Есть, однако, исключения из этого мини-правила. Если будет происходить разное поведение для каждого из условных исходов, тогда вложенный ifs может быть ответом. Вам нужно внимательно изучить влияние гнездования, чтобы вы не писали сложно читать (и, следовательно, поддерживать) код.
Ответ 7
Я предпочитаю использовать условные операторы AND/OR, когда это необходимо, вместо вложенных ifs. Выглядит менее беспорядочно и делает меньше строк кода.
if (thisIsTrue) {
if (thisIsTrueToo) doStuff();
}
является сугубо таким же, как:
if (thisIsTrue && thisIsTrueToo) doStuff();
если thisIsTrue является ложным, второе условие не оценивается. Работает также для || для условного OR.
Ответ 8
Я думаю, что это зависит от того, как вы хотите, чтобы он протекал, если вы выполняете только true, true (или любую другую сингулярность), тогда одно утверждение if вам нужно.
Ответ 9
Это зависит от того, чего именно вы хотите достичь. Это логичный вопрос, а не программирующий запрос. Если у вас есть зависимое условие, то есть если первый имеет значение ИСТИНА и затем проверяет второе условие; если второй TRUE делает что-то, если FALSE что-то делает, в этом случае вам нужно использовать вложенный if. Но вам нужно состояние обоих условий, чтобы что-то сделать, тогда вы можете пойти с операторами.
Ответ 10
По-моему, вы должны использовать стиль, который имеет наибольший смысл для того, что вы тестируете. Если эти два тесно связаны, вы можете проверить их на одной линии без потери ясности. Особенно просто, когда программа разрешает "если x == (1 ИЛИ 2)" конструкции.
С другой стороны, если два теста не связаны друг с другом, я бы предпочел их разделить, чтобы сделать логику более явной.