Как называется это усовершенствование кода или практика? (null == conn) в отличие от (conn == null) - PullRequest
2 голосов
/ 28 июня 2011

Я пытаюсь составить отчет о некотором улучшении кода, однако я не слишком уверен, как называется этот элемент.По сути, вместо conn == null он делает null == conn для удобства чтения.

До:

        if (conn == null){            
            if (log.isDebugEnabled()){
                log.debug("Failed to get a DB Connection");
            }
        }

После:

        if (null == conn){            
            if (log.isDebugEnabled()){
                log.debug("Failed to get a DB Connection");
            }
        }

Ответы [ 4 ]

7 голосов
/ 28 июня 2011

Это не для удобочитаемости, это для предотвращения случайного назначения вместо сравнения.

Если вы случайно напишите:

if (conn = null)

в C или C ++, который установит conn в null и затем использует это значение в качестве условия. Это было перенесено в Java, несмотря на то, что в этом нет необходимости.

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

Что касается того, что это называется, я никогда не видел, чтобы ему дали конкретное имя. Вы можете называть это как хотите, если вы это объясните. Мне нравится Accidental assignment avoidance, так как я могу просто сократить это до triple-a.

3 голосов
/ 28 июня 2011

Эта практика называется «помещать константу перед переменной в тесте на равенство».

Якобы его цель - избежать определенного вида ошибок при печати:

if (conn = null) { ...

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

1 голос
/ 28 июня 2011

Этот конкретный синтаксис совершенно бесполезен. Но учтите, когда вы сравниваете объект с неизвестным состоянием инициализации с «постоянным» объектом.

String unknown;
String KNOWN = "Hello";

Гораздо лучше сделать сравнение так:

if(KNOWN.equals(unknown)) do something;

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

1 голос
/ 28 июня 2011

Это просто во избежание ошибочного присвоения переменной.

То есть, если вы используете conn=null, тогда переменной присваивается значение null, однако, если вы делаете null=conn, компилятор выдаст ошибку, поскольку вы не можете назначить значение 'null'.

Таким образом, это предотвращает ошибки, когда вы по ошибке вводите один '=' вместо двух '=='

...