Введение
В компьютерном программировании, сигнальное значение (также называемое флагом, пороговым значением, недействительным значением, сигнальным значением или фиктивными данными) — это специальное значение в контексте алгоритма, которое использует его наличие как условие завершения, обычно в цикле или рекурсивном алгоритме. Сигнальное значение является формой данных, передаваемых вместе с данными, что позволяет определить конец данных, когда нет дополнительных данных (например, явного указания размера). Значение должно быть выбрано таким образом, чтобы оно гарантированно отличалось от всех допустимых значений данных, поскольку в противном случае наличие таких значений преждевременно сигнализировало бы об окончании данных (проблема полупредиката). Сигнальное значение иногда называют «Слоном в Каире», из-за шутки, где это используется как физический сигнал. В безопасных языках большинство сигнальных значений можно заменить типами Option, которые обеспечивают явную обработку исключительного случая.
In computer programming, a sentinel value (also referred to as a flag value, trip value, rogue value, signal value, or dummy data) is a special value in the context of an algorithm which uses its presence as a condition of termination, typically in a loop or recursive algorithm. The sentinel value is a form of in band data that makes it possible to detect the end of the data when no out of band data (such as an explicit size indication) is provided. The value should be selected in such a way that it is guaranteed to be distinct from all legal data values since otherwise, the presence of such values would prematurely signal the end of the data (the semipredicate problem). A sentinel value is sometimes known as an "Elephant in Cairo," due to a joke where this is used as a physical sentinel. In safe languages, most sentinel values could be replaced with option types, which enforce explicit handling of the exceptional case.
Варианты
Схожая практика, используемая в несколько иных обстоятельствах, заключается в размещении конкретного значения в конце данных, чтобы избежать необходимости в явной проверке на завершение в цикле обработки, поскольку это значение вызовет завершение цикла за счет уже существующих проверок по другим причинам. В отличие от вышеописанных способов применения, данные в этом случае не хранятся и не обрабатываются естественным образом, а это скорее оптимизация по сравнению с прямым алгоритмом, который проверяет условие завершения. Обычно это применяется при поиске. Например, при поиске определенного значения в несортированном списке каждый элемент сравнивается с этим значением, и цикл завершается при обнаружении совпадения. Однако, чтобы обработать случай, когда искомое значение отсутствует, необходимо также проверять после каждого шага, не завершился ли поиск безрезультатно. Добавив искомое значение в конец списка, исключается возможность неудачного поиска и отпадает необходимость в явной проверке на завершение во внутреннем цикле. После поиска необходимо определить, было ли найдено истинное совпадение, но эту проверку нужно выполнять только один раз, а не на каждой итерации. Кнут называет такое значение, размещенное в конце данных, "заглушкой", а не "сторожевым значением".