common code patterns
Mark Waddingham
mark at livecode.com
Mon Aug 14 05:35:16 EDT 2017
On 2017-08-14 11:14, Monte Goulding via use-livecode wrote:
> Hmm… so say merge(“ string “, resolve escapes) = ` string ` ? I’ve got
> to say I wasn’t thinking of interpolation as I thought that merge does
> that sufficiently well.
Seeing 'special tokens' as syntactic sugar is definitely the way to go I
think - it means that these escaping / interpolation operations are
available for direct use form code, as well as when they are embedded
(as tokens) in code.
Merge does do interpolation reasonably well, but it does not do
escaping. In contrast format does escaping and formatting, but not
interpolation. Escaping, formatting and interpolation are all part of a
'similar' idea - and they are unified into a single thing in many other
languages so it would perhaps make sense for them to be so in LiveCode
too.
Of course, strictly speaking they are separate operations -
interpolation requires more machinery than formatting which requires
more machinery than escaping. However, cognitively, being able to do
them all in a single unified string format does perhaps have a lot of
value - and makes what is a 'slightly more complex' set of operations,
'slightly easier' to grok.
[ Indeed, 'under the hood' the best way to look at it is that
interpolation is transformed to format which then uses unescaping before
filling in the placeholders ]
>>
>> However, there are other options too - at the end of the day is
>> 'format("...")' actually too onerous on occasions you want escaping?
>
> Yes, unless you can use it in a constant or variable declaration which
> would be unusual and a bit too special casey for me:
>
> constant kSomething = format(“this\tis\todd”)
I'm not sure I see why it would be 'special-casey' in particular. The
mechanism we need to do this is universal - i.e. would apply to constant
inputs to any pure/constant function. There is of course (as always) a
slight 'yak-shave' here with regards constants
(http://quality.livecode.com/show_bug.cgi?id=19413) - as anything after
an initializer is currently treated as a literal, and *not* an
expression.
The thought I'm having along this line is that 'easy things should be
easy' and 'hard things should be possible'. i.e. The complexity of the
syntax should reflect the complexity of the operation. There seems to be
significant value in *just* having " and ' be plain strings - which
suggests that perhaps escaping/interpolation should require slightly
different syntax (and be perhaps slightly more verbose).
> Sure if you it’s a priority. The PR is only up there because I got
> interested in something on a rainy Sunday arvo. It’s not like we
> haven’t got other stuff to do and this bike shed seems to be rather
> large ;-)
It is certainly 'important' as far as working out what the best approach
is. After all, if we can break things down into small bite-sized chunks
heading towards what a generally considered reasonable goal, then it
means it is more likely to happen over time (particularly as each
bite-sized chunk probably has other fringe benefits). The idea(s) and
such have been hanging around for long enough, it would be good to
actually figure out the whys and wherefores - and choose some colors for
all the bike-sheds which don't cause anyone too much nausea!
Warmest Regards,
Mark.
--
Mark Waddingham ~ mark at livecode.com ~ http://www.livecode.com/
LiveCode: Everyone can create apps
More information about the use-livecode
mailing list