Магическое число (программирование)

del.icio.us del.icio.us
Digg Digg
Furl Furl
Reddit Reddit
Rojo Rojo
Add to OnlyWire

Понятие «Магическое число» в программировании имеет два значения:

Сигнатура данных

Магическое число, или сигнатура файла — целочисленная константа, используемая для однозначной идентификации ресурса или данных. Такое число само по себе не несёт никакого смысла, и может вызвать недоумение, встретившись в коде программы без соответсвующего контекста или комментария. По этой причине подобные числа были иронично названы магическими. В настоящее время это название прочно закрепилось как термин. Например, любой откомпилированный класс языка Java начинается с «магического числа» 0xCAFEBABE. Второй широко известный пример — любой исполняемый файл ОС Microsoft Windows с расширением .exe начинается с последовательности байт 0x4D5A.

Плохая практика программирования

Также «магическими числами» называют плохую практику программирования, когда в исходном тексте встречается числовое значения и неочевидно, что оно означает. Например, такой фрагмент будет плохим:

drawSprite(53, 320, 240);

Человеку, который не является автором программы, трудно сказать, что такое 53, 320 или 240. Но если этот код переписать, всё становится на свои места.

final int SCR_WIDTH = 640;
final int SCR_HEIGHT = 480;
final int SCR_X_CENTER = SCR_WIDTH/2;
final int SCR_Y_CENTER = SCR_HEIGHT/2;
final int SPRITE_CROSSHAIR = 53;
drawSprite(SPRITE_CROSSHAIR, SCR_X_CENTER, SCR_Y_CENTER);

Теперь понятно: данная строка выводит в центр экрана спрайт — перекрестие прицела. В большинстве языков программирования все значения, используемые для таких констант, будут вычислены ещё на этапе компиляции и подставлены в места использования значений. Поэтому такое изменение исходного текста не ухудшает быстродействие программы.

Числа, которые не являются магическими

Не все числа требуется переносить в константы. Например, код на Delphi:

for i:=0 to Count-1 do ...

Смысл чисел 0 и 1 понятен, и дальнейшего объяснения не требуется.

Также можно не делать константами 0 в качестве false и 1 в качестве true.

This article is from Wikipedia. All text is available under the terms of the GNU Free Documentation License.


Giant Panda

Mercedes Car
James Bond Guide
This site monitored by SitePinger.net