У меня вопрос в голове. Во многих местах я видел
int a=2;
if(2==a){
//Some operation
}
Можете ли вы сказать мне, что является преимуществом при сравнении на 2==a
вместо a==2
.
Некоторым людям нравится делать это, чтобы вызвать ошибку, а не неправильное поведение, если они случайно набрали =
вместо ==
. Однако:
поэтому единственная реальная цель - сделать код запутанным для чтения.
Лучшей привычкой может быть объявление всех переменных const
, если вы специально не хотите, чтобы их изменяли. Это также предотвратит случайное присвоение, делая код более легким, чем сложнее рассуждать.
Это стало известно после рассказа, упомянутого в предисловии/введении в книге " Программирование программистов": Deep C Secrets. Питер ван дер Линден. В этой концепции была ошибка в размере 20 миллионов долларов. Поэтому эксперты из этой книги
if (i=3)
instead of:
if (i==3)
У некоторых программистов появилась привычка писать буквальный сначала, например: if (3 == i). Затем, если знак равенства случайно исключен, компилятор будет жаловаться на " попытку присвоения литералу ". Это не будет защищать вас при сравнении двух переменных, но каждый бит помогает.
Весной 1993 года в группе разработки операционной системы в SunSoft у нас был отчет об ошибке "приоритет один", описывающий проблему в асинхронной библиотеке ввода-вывода. Ошибка заключалась в продаже оборудования стоимостью 20 миллионов долларов для клиента, который специально нуждался в библиотечной функциональности, поэтому мы были очень мотивированы, чтобы найти его. После некоторых интенсивных сеансов отладки проблема была окончательно прослежена до утверждения, которое гласило:
х == 2;
Это была опечатка того, что должно было быть выражением о назначении. Палец программиста отскочил на ключ "равно", случайно нажимая его дважды, а не один раз. Заявление, написанное по сравнению с x на 2, сгенерировало true или false и отменило результат.