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

Как называется следующая парадигма программирования:

Код выполняется на основе набора логических тестов, разрешающих true (предложение). Предложение состоит из операторов и операндов. Каждый операнд - это значение / объект.

Вместо явной оценки предложения, как это делается в императивных языках (например, при обычном управлении потоком, таком как if(){}), предложение объявляется и связывается с результирующим кодом. Когда предложение будет выполнено, в любой момент в будущем код будет выполнен.

Таким образом, это в основном дерево зависимостей, которое повторно оценивает, должен ли код выполняться всякий раз, когда зависимость меняет состояние.

E.g.,

when(a && b && c < 3 && d.changes())
{
  runThisCode();
}

Я ищу более формальное название и определение, и после поиска ничего не придумал. Это что-то среднее между декларативным и императивным, но я никогда не встречал языка или парадигмы, которые позволяли бы это делать.

Спасибо, Шон


person Hanoixan    schedule 28.03.2011    source источник
comment
Вы думаете об аспектно-ориентированном программировании?   -  person sarnold    schedule 28.03.2011


Ответы (2)


Может быть, это программирование потока данных? Или реактивное программирование?

person Marat Salikhov    schedule 28.03.2011
comment
Основываясь на статье в Википедии о реактивном программировании, я чувствую, что то, о чем я спрашиваю, наиболее точно следует за ней. Из базы знаний ничего не выводится. Это намного проще, как в приведенном примере ячеек, которые автоматически обновляются в Excel при изменении ссылочных ячеек в формуле. - person Hanoixan; 29.03.2011

Для меня это похоже на механизм правил. Например. в Jess вы можете определить такие декларативные правила и вызвать императивный или объектно-ориентированный код Java.

person hfs    schedule 28.03.2011
comment
Думаю, вы правы, я бы назвал это программированием на основе правил, а система, с которой я играл очень давно, это CLIPS, который, по-видимому, является предком Джесс. Возможно, что-то подобное можно сделать в Prolog, я никогда полностью не исследовал это. - person bart; 28.03.2011