Распознавание избыточных круглых скобок

#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 . Если вы не используете круглые скобки в логических выражениях там, где они действительно необходимы (даже не замечая этого), это может привести к логически другому выражению. Всегда используйте круглые скобки, чтобы убедиться, что компьютер оценивает условия в ожидаемом порядке.

Я думаю, что в конце дня (по крайней мере, на мой взгляд) лучше четко разделять логические условия, чтобы их было легче понять, но также дополнительные круглые скобки, такие как отступы, пробелы и другие стандарты стилей, помогают визуально организовать код логическим образом.