Введение

В компьютерном программировании, сигнальное значение (также называемое флагом, пороговым значением, недействительным значением, сигнальным значением или фиктивными данными) — это специальное значение в контексте алгоритма, которое использует его наличие как условие завершения, обычно в цикле или рекурсивном алгоритме. Сигнальное значение является формой данных, передаваемых вместе с данными, что позволяет определить конец данных, когда нет дополнительных данных (например, явного указания размера). Значение должно быть выбрано таким образом, чтобы оно гарантированно отличалось от всех допустимых значений данных, поскольку в противном случае наличие таких значений преждевременно сигнализировало бы об окончании данных (проблема полупредиката). Сигнальное значение иногда называют «Слоном в Каире», из-за шутки, где это используется как физический сигнал. В безопасных языках большинство сигнальных значений можно заменить типами Option, которые обеспечивают явную обработку исключительного случая.

Варианты

Схожая практика, используемая в несколько иных обстоятельствах, заключается в размещении конкретного значения в конце данных, чтобы избежать необходимости в явной проверке на завершение в цикле обработки, поскольку это значение вызовет завершение цикла за счет уже существующих проверок по другим причинам. В отличие от вышеописанных способов применения, данные в этом случае не хранятся и не обрабатываются естественным образом, а это скорее оптимизация по сравнению с прямым алгоритмом, который проверяет условие завершения. Обычно это применяется при поиске. Например, при поиске определенного значения в несортированном списке каждый элемент сравнивается с этим значением, и цикл завершается при обнаружении совпадения. Однако, чтобы обработать случай, когда искомое значение отсутствует, необходимо также проверять после каждого шага, не завершился ли поиск безрезультатно. Добавив искомое значение в конец списка, исключается возможность неудачного поиска и отпадает необходимость в явной проверке на завершение во внутреннем цикле. После поиска необходимо определить, было ли найдено истинное совпадение, но эту проверку нужно выполнять только один раз, а не на каждой итерации. Кнут называет такое значение, размещенное в конце данных, "заглушкой", а не "сторожевым значением".