Velocitip: Use ArrayList.equals() for multiple comparisons
Velocity is the only language where Brevity for Brevity's Sake is OK.
In other languages, reducing total lines of code (LOC) with show-offy shortcuts just means your code will make no sense (to you or anyone else) after a few months away.
But in Velocity, the shortest possible implementation is a smart move, since:
- VTL is verbose (only one major operation permitted per line, temp variables required even for void methods)
- it offers limited reusability (especially Marketo's flavor of Velocity, where #macro and reused $references don't work consistently)
- it's completely whitespace-preserving (indenting would help readability, but messes up output — so the fewer lines, the less to mess up)
- the more lines of code in your template, the more distraction from the “meat,” which is the output
Imagine you had a few Lead fields using the JETDS naming system: installationEnvironment, typeOfEquipment, and purpose.
There are 10-20 options for each of these fields, so the number of total combinations is huge. Even if you're only interested in a subset, the conditions get loooooong...
#*
I'm being generous with whitespace here,
but it's *still* hard to read/maintain!
VTL is whitespace-preserving, so indents are true spaces.
*#
#if( $lead.installationEnvironment == "amphibious" )
#if( $lead.typeOfEquipment == "radar" )
#if( $lead.purpose == "receiving" )
do something...
#elseif( $lead.purpose == "detecting" )
do something else...
#elseif( $lead.purpose == "navigation-aid" )
do something else entirely...
#end
#elseif ( $lead.typeOfEquipment == "sonar" )
#if( $lead.purpose == "receiving" )
do yet another thing...
#elseif( $lead.purpose == "detecting" )
do still another thing...
#elseif( $lead.purpose == "navigation-aid" )
...
#end
#end
#elseif( $lead.installationEnvironment == "ground-mobile" )
#if( $lead.typeOfEquipment == "radar" )
#if( $lead.purpose == "receiving" )
...
#elseif( $lead.purpose == "detecting" )
...
#elseif( $lead.purpose == "navigation-aid" )
...
#end
#end
#end
## etc., etc.