Jump to content

Триггер (программирование)

В компьютерном программировании триггер — это редко используемая синтаксическая конструкция , которая позволяет логическому значению переключаться с ложного на истинное при выполнении первого условия, а затем обратно на ложное при выполнении второго условия. Синтаксис доступен на языках программирования Perl. [1] и Руби . [2] Аналогичная логика доступна в sed и awk . [1]

Триггер с первым условием A и вторым условием B не эквивалентен варианту «если A, а не B», поскольку первый имеет постоянное состояние и является истинным, даже если A больше не является истинным, пока в какой-то момент в прошлом А было правдой, а Б всегда было ложью.

Хорошей аналогией может быть то, что даже если А не является истиной, а Б — истиной, он все равно поверит А.

Следующий код Ruby печатает числа от 4 до 6:

(1..10).each do |x|
  puts x if (x == 4 .. x == 6)
end

Первый экземпляр «..» — это оператор диапазона , который производит перечисление целых чисел от 1 до 10. Второй «..» — это оператор триггера, также известный как оператор триггера. [3] Обратите внимание, что число 5 печатается, даже если оба значения «x == 4» и «x== 6» являются ложными. Это связано с тем, что выражение запоминает, что «x == 4» было истинным на предыдущей итерации, и что «x == 6» в тот момент никогда не было истинным.

Подводные камни

[ редактировать ]

Оператору триггера необходимо сохранить свое текущее состояние. У программиста нет возможности явно определить, где хранится это состояние и каково его время жизни. Время жизни имеет значение, когда один и тот же код используется несколькими потоками или в рекурсивных функциях. Этот одновременный доступ к состоянию оператора триггера может привести к неопределенному поведению или, по крайней мере, к неожиданным результатам, в зависимости от языка программирования. Например, в Perl каждый триггерный оператор имеет свое собственное состояние, общее для всех потоков. [4] другие языки программирования делают то же самое.

Чтобы обойти это ограничение, оператор триггера должен быть смоделирован как абстрактный тип данных, параметризованный с помощью:

  • предикат, который сообщает, включать ли триггер,
  • предикат, указывающий, следует ли выключать триггер.

Этот тип данных триггера предоставит функцию, которая одновременно запрашивает и обновляет свое состояние. Эта функция получает фактические данные, от которых зависят предикаты переключения, и при необходимости передает эти данные двум предикатам.

Из-за этой присущей ему сложности лишь немногие языки программирования приняли оператор триггера.

  1. ^ Jump up to: а б «Операторы Perl и приоритет» . Проверено 21 октября 2016 г.
  2. ^ Нитин Бекал (21 ноября 2014 г.). «Оператор флип-флопа в Ruby» .
  3. ^ «Молниеносный доклад PyCon Australia: операторы флип-флопа (флип-флоператоры)» . 26 августа 2018 г.
  4. ^ «Оператор диапазона в Perl» . 16.08.2020.


Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 7cb22c712046a83120bf4e2e9e81676b__1711492620
URL1:https://arc.ask3.ru/arc/aa/7c/6b/7cb22c712046a83120bf4e2e9e81676b.html
Заголовок, (Title) документа по адресу, URL1:
Flip-flop (programming) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)