XSharper has the usual if/else construction, which has two notations.
The first XML-like notation, where else is included as a part of if element is a bit cumbersome. There is however an alternative syntax, with
<set a='Z' /> <set b='X' /> <if isTrue="${=$a>$b}"> <print>${a} is more than ${b}</print> <else> <print>${a} is NOT more than ${b}</print> </else> </if> <!-- alternative syntax --> <if isTrue="${=$b>$a}"> <print>${b} is more than ${a}</print> <else /> <print>${b} is NOT more than ${a}</print> </if>
There is a bunch of possible attributes in conditionals, isTrue, isFalse, isSet (if variable is set), isNotSet, isZero, isNotZero etc. Use xsharper /? if for more details.
XSharper has only a simple while loop.
<xsharper> <set i="0" /> <while isTrue="${= $i #LT# 5 }"> <print>i=${i}</print> <set i="${=(int)$i+1}" /> </while> </xsharper>
Note the use of #lt# instead of <, to make the expression more readable.
While loop may define a maximum number of loops:
<xsharper> <set i="0" /> <while maxLoops="3"> <print>i=${i}</print> <set i="${=(int)$i+1}" /> </while> </xsharper>
Actually, while can automatically assign its loop counter value to a variable specified in name attribute, making the code a bit shorter:
<while name="i" maxLoops="3" > <print>i=${i}</print> </while>
There is also a break statement, to exit a loop prematurely:
<xsharper> <set i="0" /> <while> <print>i=${i}</print> <set i="${=(int)$i+1}" /> <if isTrue="${= $i > 10}"> <break /> </if> </while> </xsharper>
forEach loop iterates through each element of a collection, XML document or a rowset.
Syntax is <foreach variable='${enumerable}'>
<!-- print 1,2,3 in different rows --> <foreach x="${= {1,2,3}}" > <print>${x}</print> </foreach>
Or <foreach name='x' in='${enumerable}'> where name is optional (and defaults to empty string):
<!-- print list of files in C:\ --> <foreach in="${= new DirectoryInfo('c:\').GetFileSystemInfos('*.*') }" > <print>${=$.FullName}</print> </foreach>
foreach can also parse rowsets:
<!-- running a piece of code for every row of rowset --> <rowset id="rs"> <row order="1" description="Two large pineapple pizzas" /> <row order="22" description="One Greek Salad" /> </rowset> <foreach rowsetId="rs" name="pref_"> <print>Order: ${=$pref_order.PadLeft(5)}</print> <print>Description=${pref_description}</print> <print>-----</print> </foreach>