En Java pur, je pourrais faire ceci:
value = (a > b) ? a : b;
Alors que dans Velocity, la forme longue serait:
#if($a > $b)
#set($value = $a)
#else
#set($value = $b)
#end
Existe-t-il une forme courte dans Velocity? Je veux pouvoir faire un si/autrement en ligne.
Tu peux faire
#set($value = "#if($flag)red#{else}blue#end")
Vous n'avez pas besoin d'une directive #macro ou #set. La clé utilise des accolades pour la directive #else.
#if($plural)were#{else}was#end
De doc (presque à la fin de la section Conditionals):
Encore une note utile. Lorsque vous souhaitez inclure du texte immédiatement après une directive #else, vous devrez utiliser des accolades entourant immédiatement la directive pour la différencier du texte suivant. (Toute directive peut être délimitée par des accolades, bien que ce soit plus utile pour #else).
[~ # ~] note [~ # ~] : Indépendamment de ce que dit le doc, j'ai depuis trouvé qu'il peut être nécessaire d'ajouter les accolades lors de l'utilisation d'une instruction if en ligne simple.
#if($includePrefix)Affected #{end}Inspection
Il existe également une approche avec macro réutilisable:
#macro(iif $cond $then $else)#if($cond)$then#else$else#end#end
Ensuite
#define ($value)
#iif("$a > $b", $a, "$b")
#end
Notez que les documents sur la vitesse indiquent que l'utilisation de macros a un impact sur les performances.