Velocitip: Use ArrayList.equals() for multiple comparisons

SanfordWhiteman
Level 10 - Community Moderator
Level 10 - Community Moderator

    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.

Read the full post on TEKNKL :: Blog →​

845
0