Должны ли круглые скобки всегда помещаться вокруг троичного оператора? - PullRequest
8 голосов
/ 01 сентября 2010

Checkstyle жалуется на следующее:

return (null == a ? a : new A());

и говорит, что парены не нужны.

Несмотря на то, что утверждение, безусловно, прекрасно работает без них, оно кажется гораздо более читабельным при наличии - иначе, когда я читаю его, я склонен видеть:

return null

сначала, а затем нужно сделать паузу, чтобы рассмотреть оставшиеся

== a ? a : new A(); 

часть, так как мой мозг уже пошел по одному пути.

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

Итак: должны ли параньи вокруг троицы быть стандартом де-факто? Есть ли какая-либо причина, чтобы не помещать их туда?

Ответы [ 6 ]

7 голосов
/ 01 сентября 2010

Хорошо, контрольный стиль верен, скобки бесполезны для выполнения. Но бесполезный для выполнения не означает бесполезный для хорошего чтения вашего кода. Вы должны оставить их, если есть смысл читать.

Я думаю, что этот код не нуждается в дополнительных скобках:

int number = (myBoolean)? 1 : 2;

но в вашем случае ключевое слово return и тот факт, что ваше логическое выражение является выражением, могут изменить способ чтения оператора.

5 голосов
/ 01 сентября 2010

Когда я читаю оператор return, я знаю, что все между 'return' и ';'это то, что будет возвращено, поэтому я не могу прочитать ваш пример кода как return null, за которым следуют некоторые символы, как вы утверждаете, что читаете его.

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

Я всегда удаляю ненужные скобки.Они не помогают в понимании кода, так как я хорошо знаю приоритет оператора Java.В странное время я не уверен, я добавляю круглые скобки и жду, чтобы узнать, скажет ли IDEA, что они излишни.Затем я удаляю их и пытаюсь зафиксировать в памяти только что обнаруженное правило приоритета.

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

2 голосов
/ 01 сентября 2010

Нет, это не должно быть стандартом де-факто. Я предпочитаю это без паренов.

Я думаю, что единственная причина, по которой они там есть, - это навязать порядок оценки или прояснить запутанную строку.

1 голос
/ 10 мая 2016

В общем, нет .

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

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

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

  • Если ваша троица достаточно сложна, чтобы заслужить несколько строк; затем вы можете заключить свое заявление в парены, чтобы предотвратить автоматическую вставку точек с запятой.

  • Если ваша троица вложена в другую троицу.

См. Также в MDN:

1 голос
/ 01 сентября 2010

Оба варианта верны, используйте то, что использует ваша команда или что вам нравится, если вы работаете в одиночку.

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

0 голосов
/ 01 сентября 2010

Поскольку основа для вашего вопроса связана с актом чтения кода, я подойду к вопросу с этой точки зрения.

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

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

...