OCLOperators casetruefalse
No edit summary
Line 21: Line 21:
===== Using in OCL =====
===== Using in OCL =====
If you want to derive a string based on a list of conditions and have an else -statement if none of the expressions where True
If you want to derive a string based on a list of conditions and have an else -statement if none of the expressions where True
  self.oclIsInState(#New).caseTrueFalse('New/Ordering', String.nullValue)+
  (self.oclIsInState(#New).caseTrueFalse('New/Ordering', String.nullValue)+
self.oclIsInState(#Waiting).caseTrueFalse('Waiting', String.nullValue)+
  self.oclIsInState(#Waiting).caseTrueFalse('Waiting', String.nullValue)+
self.oclIsInState(#Ordered).caseTrueFalse('Ordered', String.nullValue)->
  self.oclIsInState(#Ordered).caseTrueFalse('Ordered', String.nullValue))->
  collect(s| s.notNull.caseTrueFalse(s, self.State))->first
  collect(s| s.notNull.caseTrueFalse(s, self.State))->first
The collect construct at the end can when the result, and if null do the "else" statement.
The collect construct at the end can when the result, and if null do the "else" statement. '''Note'''! Parenthesis around the string concatenation.


See also [[OCLOperators_whentrue]]
See also [[OCLOperators_whentrue]]

Revision as of 14:54, 7 April 2022

This is a new compact form to write :

if somebool then
  someexpressionwithtypeX
else
  someOtherexpressionwithtypeX
endif

This operator enables you to write the same thing as

somebool.casetruefalse(someexpressionwithtypeX,someOtherexpressionwithtypeX)
Using in EAL

If you want to execute methods in a case/switch -like statement.

This makes a switch like construct look like this:

let x=SomeObject.SomeEnum in
(
  (x=#Enum1).casetruefalse(SomeObject.DoYourThing1,DoNothing);
  (x=#Enum2).casetruefalse(SomeObject.DoYourThing2,DoNothing);
  (x=#Enum3).casetruefalse(SomeObject.DoYourThing3,DoNothing)
)
Using in OCL

If you want to derive a string based on a list of conditions and have an else -statement if none of the expressions where True

(self.oclIsInState(#New).caseTrueFalse('New/Ordering', String.nullValue)+
 self.oclIsInState(#Waiting).caseTrueFalse('Waiting', String.nullValue)+
 self.oclIsInState(#Ordered).caseTrueFalse('Ordered', String.nullValue))->
collect(s| s.notNull.caseTrueFalse(s, self.State))->first

The collect construct at the end can when the result, and if null do the "else" statement. Note! Parenthesis around the string concatenation.

See also OCLOperators_whentrue

This page was edited 69 days ago on 02/10/2024. What links here