valueDiff for arrays?
Mark Waddingham
mark at livecode.com
Sun Aug 5 17:07:51 EDT 2018
On 2018-08-05 22:37, Monte Goulding via use-livecode wrote:
> I think it’s nice sugar but it adds complexity when trying to
> understand the statement. You need to comprehend the expression or
> pattern then comprehend the relationship between discarding/keeping
> and with | without | not matching | where in order to figure out what
> will actually happen. I would rather [by { keeping | discarding }] be
> a parser error if used with without and not matching.
I'm not sure I follow - I think you took the above out of context - I
was using an elided form of the operations to indicate the mapping from
existence / non-existence of keywords to the underlying operation...
The form is actually:
filter X by keeping the lines where P
filter X by discarding the lines matching "glob"
filter X by keeping the lines not matching pattern "regex"
* Yes I've inserted 'the' there - because it then makes the query
expressions the same as Mark Wieder's suggestion. Also I might not have
matching quite right - it might be a bit more verbose than that.
I'm not too fussed about whether the new form has with or without - they
are the 'arcane' words in this situation which caused me the problem in
the first place.
By arcane here I mean you actually have to read the docs to understand
what they are referring to:
filter X with "foobar"
Isn't exactly clear at first sight - "foobar" is a string - with
<String> ? What does that mean? (You have to forget that you know *what*
that command actually means to actually get my point - the reason I can
do that easily is that I never remember correctly and always have to
either try both or look it up).
I think the key point is that - out of context - which is generally the
first phase of reading code:
filter lines of X matching Y
filter lines of X not matching Y
Makes no reference to what the 'default' mode of filter is - i.e.
whether it keeps the solids, or keeps the liquids as Jacque put it.
Given any recipe (to use the culinary metaphor) which in either case is
entirely defined by *what* you are cooking (after all - how many recipes
keep the fluid you get after draining potatoes, rather than the
potatoes?)... But this isn't cooking - this is coding, so in this case
you need to read the docs to find out what the default mode of filter
is. (Of course, this might entirely be one of those things that my brain
just won't get, or ever get - so it might very well just be me!).
If we insert an explicit keep / discard then it makes it crystal clear
and unambiguous regardless of context.
Sure we can make the extra bits optional - so you can type less if you
want - that's personal taste, and how much you want to torture yourself
later, and others, when they read the code!
Anyway - extending the current form with 'where' (rather than 'with
expression') is more than adequate at the moment.
The proposal above needs more work anyway - so it isn't an immediate
thing in any case.
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