Внимание, пассажиры: рейс 0703 также проходит под номером 451


Автор: Эрик Липперт.
Источник: Attention passengers: Flight 0703 is also known as Flight 451.

Я ненавижу восьмеричные числа – они порождают ошибки.  Я ненавижу ошибки, особенно тупые ошибки.

Глупые C-программисты пишут…

int arr_flight = 0703;

… не осознавая, что присваивают вовсе не 703, а 7 x 64 + 3 = 451.

Хуже того, глупые JScript-программисты пишут…

var arr_flight = 0708;
var dep_flight = 0707;

… не понимая, что первое значение записано в десятичном, а последнее – в восьмеричном формате.

Да, в JScript это именно так: если числовая константа, начинающаяся с нуля, содержит цифры 8 или 9, то это десятичное число, в противном случае это восьмеричное значение! В первой версии лексического анализатора JScript не были реализованы эти правила, однако в конце концов мы учли их ради совместимости с реализацией Netscape.

Это соответствут принципу разработки «Есть проблема? Сделай как-нибудь!», который я упоминал ранее. Тем не менее, раз проблема может быть обнаружена во время компиляции, я считаю, что это было плохое решение: сделать неверные восьмеричные числа десятичными.

Здесь путаница. Восьмеричные значения и управляющие последовательности были удалены из спецификации ECMAScript, хотя, конечно, они сохранены в действующих реализациях ради обратной совместимости.

Вот почему я добавил в JScript .NET код, который в случае использования целочисленной константы, начинающейся с нуля, выводит предупреждение компилятора, кроме одного случая. Очевидно, что для x = 0; предупреждение не выводится!

Реклама
Запись опубликована в рубрике перевод, scripting с метками . Добавьте в закладки постоянную ссылку.

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s