#java #parentheses
#java #круглые скобки
Вопрос:
Обычно в вашей программе легко обнаружить ненужные круглые скобки, но у меня небольшая путаница с использованием круглых скобок в if
операторах.
public class TestClass {
void method(String sectionName) {
if ("Content".equals(sectionName) || "Overview".equals(sectionName)
// suppression list
|| (!"AbbreviationAsWordInName".equals(sectionName)
amp;amp; !"AbstractClassName".equals(sectionName)
)) {
System.out.println();
}
}
}
Я чувствую, что скобки в строке 5 (до !"AbbreviationAsWordInName"
) не нужны. Теперь проблема в том, что обычно я мог бы протестировать код, а затем прийти к выводу, но сейчас я исправляю какую-то ошибку в программе с открытым исходным кодом, а этот плагин, в свою очередь, используется многими другими программами, поэтому я немного запутался.
Другие примеры-
if (active == (forward ? past : future) amp;amp;
((increasing amp;amp; switchOnIncrease) || (!increasing amp;amp; switchOnDecrease)))
В приведенном выше примере я чувствую, что в строке 2 есть ненужные круглые скобки.
Другой пример-
else if ((c >= '0' amp;amp; c <= '9') || (c >= 'a' amp;amp; c <= 'f') || (c >= 'A' amp;amp; c <= 'F')) {}
Я думаю, что в приведенном выше примере есть дополнительные круглые скобки, это должно быть похоже-
else if (c >= '0' amp;amp; c <= '9' || c >= 'a' amp;amp; c <= 'f' || c >= 'A' amp;amp; c <= 'F') {}
Пожалуйста, помогите мне с надежным решением.
Комментарии:
1. Если вы хотите это прояснить, вам нужно взглянуть на это: docs.oracle.com/javase/tutorial/java/nutsandbolts /… и держите в уме приоритет операторов.
2. Определенно лучше иметь больше круглых скобок. Оставьте их для ясности.
3. Код не будет передаваться на CI, если там есть дополнительные круглые скобки.
4. @JayC667 Кроме того, эта функция настраивается, вы можете отключить некоторые функции, если хотите.
5. Когда вы проверяете приоритет,
amp;amp;
это происходит первым, поэтому вам не нужны круглые скобки. Что нужно сделать, это создать тест, который проверяет все условия.
Ответ №1:
Если вы отформатируете этот оператор if в однострочный, у вас будет лучшая ясность того, что на самом деле происходит в операторе.
if ("Content".equals(sectionName) || "Overview".equals(sectionName) || (!"AbbreviationAsWordInName".equals(sectionName) amp;amp; "AbstractClassName".equals(sectionName) )) {
Теперь, если вы посмотрите на это и разбейте это на сегменты, вы увидите, что есть только 3 условия, которые необходимо выполнить.
- 1-й.
if ("Content".equals(sectionName))
- 2-й.
if ("Overview".equals(sectionName))
- 3-й.
if (!"AbbreviationAsWordInName".equals(sectionName) amp;amp; "AbstractClassName".equals(sectionName) )
Хотя может быть правильным оставить скобку в 3-м условии после ||
и перед закрывающей круглой скобкой, код будет оцениваться как единое условие — для любого, кто смотрит на 3-е условие, эти «избыточные» круглые скобки на самом деле дают небольшую ясность относительно того, что является частью этого условия. условие. Нет сомнений, что оба из них "AbbreviationAsWordInName".equals(sectionName)
и "AbstractClassName".equals(sectionName)
должны быть выполнены, чтобы оценить значение true.
Если вы не указали эту круглую скобку, можно запутаться в том, являются ли эти две частью одного условия или нет.
Также стоит упомянуть, что в логических выражениях существует такой уровень приоритета, как so: src
Как и арифметические операторы, логические операторы имеют порядок операций: сначала NOT, затем AND, затем OR . Если вы не используете круглые скобки в логических выражениях там, где они действительно необходимы (даже не замечая этого), это может привести к логически другому выражению. Всегда используйте круглые скобки, чтобы убедиться, что компьютер оценивает условия в ожидаемом порядке.
Я думаю, что в конце дня (по крайней мере, на мой взгляд) лучше четко разделять логические условия, чтобы их было легче понять, но также дополнительные круглые скобки, такие как отступы, пробелы и другие стандарты стилей, помогают визуально организовать код логическим образом.