I'm new to drools and given a condition (Condition) and a boolean variable "a" , I would like to create the following rule with drools :
if (Condition)
{
a = true;
}
else
{
a = false;
}
What is the best way to do it ?
For the time being I have 2 options :
1.Create 2 rules with Condition and not contidition (If ... then ... , If not ... then ...)
rule "test"
where
$o: Object( Condition)
then
$o.a = true;
end
rule "test2"
where
$o: Object( not Condition)
then
$o.a = false
end
2.Set the variable a to false by default and then fire the rule
rule "test"
no loop
salience 100
where
$o: Object()
then
$o.a = false;
end
rule "test"
where
$o: Object( not Condition)
then
$o.a = true;
end
A rules engine is a good fit for logic that changes often and is highly complex, involving numerous levels of logic. Rules engines are typically part of a Business Rules Management System (BRMS) that provide extensive capabilities to manage the complexity.
A rules engine is a flexible piece of software that manages business rules. Think of business rules as “if-then” statements. So, a basic example of a rule would be, “If A, then B, else if X, then do Y.”
You can build a simple rules engine yourself. All you need is to create a bunch of objects with conditions and actions, store them in a collection, and run through them to evaluate the conditions and execute the actions.
By nature the Rete engine looks for positive matches, so yes you will need multiple rules, one for each condition check in your if-then-else block. Your first example is cleaner and more intuitive, I would go with that.
As an alternative, if you are processing a simple logic negation (if-else) where your variables value matches the conditional, then you can use just one rule:
rule "test"
where
$o: Object()
then
$o.a = (! Condition);
end
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With