Могут ли тернарные операторы не быть вложенными (squid: S3358) быть настроенными - PullRequest
0 голосов
/ 19 ноября 2018

Когда у меня есть следующий код с 2 уровнями троичных операций

 double amount = isValid ? (isTypeA ? vo.getTypeA() : vo.getTypeB()) : 0;

Какой сонар предупреждает о

Ternary operators should not be nested (squid:S3358)

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

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

Мой коллега предположил, что такой уровень можно принять, и он более понятен, чем альтернатива.

Интересно, можно ли настроить это правило (или другие) для ограничения допустимых уровней?

Если нет, то почему сонар так строг, когда он имеет дело с соглашениями о коде?

Я не хочу игнорировать правило , просто настроить, чтобы разрешить до 2 уровней вместо 1.

1 Ответ

0 голосов
/ 20 ноября 2018

Интересно, можно ли настроить это правило для ограничения разрешенных уровней?

Не может быть вложено Тернарные операторы. Правило не может быть настроено. Вы можете только включить или отключить его.

Интересно, можно ли настроить другие правила для ограничения допустимых уровней?

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

почему сонар такой строгий, когда речь идет о соглашениях по коду?

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

...