RE: Delimiters for String Templates (the ultimate Bike Shed!)

> I could live with either <<[...]>> <<{...}>> or @@.
>
> A possible advantage of << is that Perl (and bash) uses it:

I could also live with either of these.  

Suppose we had to choose between the following  options:

1. <<[  ]>>,  <<{ }>>
2. @@[  ]@@,  @@{  }@@
3. ~~[   ]~~, ~~{ }~~~
4. ``[   ]``, ``{ }``

Here's what they look like for our examples.  

This is a known bike shed, but here's my impression:
- I find that the angle brackets in #1 tend to cause figure/ground problems among angle brackets produced for HTML or XML.  
- I find that @@ is kind of ugly, and the @@ shouts much more loudly than the difference between { and [, so it winds up being less readable than I would prefer.
- I find that ~~[ ]~~, ~~{ }~~ is more readable and somewhat less irritating than the other two. 
- I find  ``[ ]``  ``{ }`` the most readable of all.

Here's what they look like for our examples.

1. <<[  ]>>,  <<{ }>>

declare function local:prize-message($a) as xs:string
{
<<[Hello <<{$a.name}>>
You have just won <<{$a.value}>> dollars!
<<{ 
   if ($a.in_ca) 
   then <<[Well, <<{$a.taxed_value}>> dollars, after taxes.]>>
   else ""
}>>]>>
}

Here's what it looks like if we produce HTML instead of text:

declare function local:prize-message($a) as xs:string
{
<<[
  <div>
    <h1>Hello <<{$a.name}>></h1>
    <p>You have just won <<{$a.value}>> dollars!</p>
    <<{ 
      if ($a.in_ca) 
      then <<[ <p>Well, <<{$a.taxed_value}>> dollars, after taxes.</p> ]>>
      else ""
    }>>
  </div>
]>>
}

Here's what it looks like if we produce JSON:

declare function local:prize-message($a) as xs:string
{
<<[
 { 
     "greetings" : "Hello!",
     "value" : $a.value
     <<{
      if ($a.in_ca) 
      then 
<<[, 
    "taxed_value", <<{ $a.taxed_value }>>
]>>  
      else ""  
     }>>
 }
]>> 
} 

2. @@[  ]@@,  @@{  }@@

declare function local:prize-message($a) as xs:string
{
@@[Hello @@{$a.name}@@
You have just won @@{$a.value}@@ dollars!
@@{ 
   if ($a.in_ca) 
   then @@[Well, @@{$a.taxed_value}@@ dollars, after taxes.]@@
   else ""
}@@]@@
}

Here's what it looks like if we produce HTML instead of text:

declare function local:prize-message($a) as xs:string
{
@@[
  <div>
    <h1>Hello @@{$a.name}@@</h1>
    <p>You have just won @@{$a.value}@@ dollars!</p>
    @@{ 
      if ($a.in_ca) 
      then @@[ <p>Well, @@{$a.taxed_value}@@ dollars, after taxes.</p> ]@@
      else ""
    }@@
  </div>
]@@
}

Here's what it looks like if we produce JSON:

declare function local:prize-message($a) as xs:string
{
@@[
 { 
     "greetings" : "Hello!",
     "value" : $a.value
     @@{
      if ($a.in_ca) 
      then 
@@[, 
    "taxed_value", @@{ $a.taxed_value }@@
]@@  
      else ""  
     }@@
 }
]@@ 
} 

3. ~~[   ]~~, ~~{ }~~

declare function local:prize-message($a) as xs:string
{
~~[Hello ~~{$a.name}~~
You have just won ~~{$a.value}~~ dollars!
~~{ 
   if ($a.in_ca) 
   then ~~[Well, ~~{$a.taxed_value}~~ dollars, after taxes.]~~
   else ""
}~~]~~
}

Here's what it looks like if we produce HTML instead of text:

declare function local:prize-message($a) as xs:string
{
~~[
  <div>
    <h1>Hello ~~{$a.name}~~</h1>
    <p>You have just won ~~{$a.value}~~ dollars!</p>
    ~~{ 
      if ($a.in_ca) 
      then ~~[ <p>Well, ~~{$a.taxed_value}~~ dollars, after taxes.</p> ]~~
      else ""
    }~~
  </div>
]~~
}

Here's what it looks like if we produce JSON:

declare function local:prize-message($a) as xs:string
{
~~[
 { 
     "greetings" : "Hello!",
     "value" : $a.value
     ~~{
      if ($a.in_ca) 
      then 
~~[, 
    "taxed_value", ~~{ $a.taxed_value }~~
]~~  
      else ""  
     }~~
 }
]~~ 
} 

4. ``[   ]``, ``{ }``

declare function local:prize-message($a) as xs:string
{
``[Hello ``{$a.name}``
You have just won ``{$a.value}`` dollars!
``{ 
   if ($a.in_ca) 
   then ``[Well, ``{$a.taxed_value}`` dollars, after taxes.]``
   else ""
}``]``
}

Here's what it looks like if we produce HTML instead of text:

declare function local:prize-message($a) as xs:string
{
``[
  <div>
    <h1>Hello ``{$a.name}``</h1>
    <p>You have just won ``{$a.value}`` dollars!</p>
    ``{ 
      if ($a.in_ca) 
      then ``[ <p>Well, ``{$a.taxed_value}`` dollars, after taxes.</p> ]``
      else ""
    }``
  </div>
]``
}

Here's what it looks like if we produce JSON:

declare function local:prize-message($a) as xs:string
{
``[
 { 
     "greetings" : "Hello!",
     "value" : $a.value
     ``{
      if ($a.in_ca) 
      then 
``[, 
    "taxed_value", ``{ $a.taxed_value }``
]``  
      else ""  
     }``
 }
]`` 
} 

Received on Tuesday, 29 September 2015 14:59:50 UTC