Starting with the easy question, Snap<i>!</i>
. My Mac has a feature that lets you set up abbreviations for things you type often, so I have S!
set to expand into that.
The thing is, that conflicts with the goal of keeping simple things simple. Users wouldn't know what "c/s" means, so we'd end up with a block like
which would never get past Jens. :~)
So instead my idea is that the block should look just like the existing CONTAINS primitive, but when you hover over the right edge, it turns into
and then clicking on a left-arrowhead deletes that input slot and its label. (Yeah, the spacing is wrong around the arrowheads.) You'd never see a right-arrowhead for these inputs; they're optional, not variadic.
This would allow a block to have a dozen optional inputs, and still look simple in the palette. Some of the network-related blocks have a zillion options and would benefit from this treatment. In the normal case you leave them all with their default value (it doesn't have to be a Boolean, although that'll be common) and the block is short and sweet. But experts can get exactly what they want by making the optional inputs visible.
Without this feature, we could do something like
in which each arrowhead corresponds to an optional input and you'd have to learn (by opening and closing them) which arrowhead corresponds with the input you want. But that's hideous, right?
Sure. Instead of
you'd just say
in which I'm using the brown oval to mean "optional input with label" (just for discussion purposes; I don't know how we'd actually indicate that category in the UI). The formal parameter, e.g.,
case-sensitive
, with a colon appended, is what's used as the label, so the user doesn't have to type the name twice in the prototype.