propertyChanged message
Richard Gaskin
ambassador at fourthworld.com
Thu Sep 1 16:42:04 EDT 2022
Bob Sneidar wrote:
> I would like to see a propertyChanged message implemented that gets
> sent to any object when any of it's properties change. There could
> even be two messages, one for built-in properies and another for
> custom properties.
I like the idea (I'd love messages for all sorts of things), but
conversations with Dr Raney remind me of the impact messages have on
overall performance.
There are probably super-smart ways to implement things that don't have
the drag on performance that mouseStillDown once imposed, or the
limitations eventually placed on it to keep it from being a persistent
source of performance loss.
But cleverness comes at a cost of its own, in design, implementation,
testing...
This is worth considering, but perhaps we can start with the use case -
thank you for providing this one:
> Imagine being able to change the font or size of a particular object,
> and then having all the other objects that "subscribed" to that
> object's font or size property ALSO have their fonts change. It would
> then be possible to build a kind of Object Oriented environment.
OOP systems are largely defined by their object model.
In LC's stack/card/control model, visual properties are inherited, so
changing once at the stack level allows everything downstream to reflect
the change, no code needed at all.
I can see cases where it would be nice to have CSS-like classes, where
we could define style properties in one place and have everything
assigned to use that set of properties automatically reflect changes.
I believe that level of style-sheet-like flexibility is something Mark
Waddingham may have mentioned before. Bonus if it could use actual CSS
syntax as an *option*, so newcomers can jump in quickly and old-timers
can choose whether to enjoy the compactness of CSS or the completeness
of LC Script, "set the x of y to x".
There are of course ways to do things like this using custom props, and
I'll go out on a limb to try to channel Dr Raney on this, based on
conversation I'd had with him about messages:
"Show me a use case where it's not possible to get what you need from a
custom message, and I'll consider a way to override built-in messages."
His concern with messages was two-fold:
- Performance: the open-ended mechanism needed to allow overriding
adds overhead to setting up the calling change each time the
context changes, and sometimes during execution.
- Consistency: it creates a world of unpredictability, where simply
using someone's library can alter messages you've been relying on
for years.
I believe both of those can be seen as relevant to property changes.
And with that view, one attempt to satisfy this is provided with virtual
properties: getProp and setProp.
Using custom prop names for custom behavior ensures that the built-in
names will always reliably do what you expect, while still leaving open
a boundless universe of options for custom behavior, simply by calling
it via a custom name.
Within a getProp or setProp handler, one can get and set any number of
built-in properties, and also custom properties, and call commands and
functions, and set properties of other objects, and do just about
anything LC Script allows. Very powerful.
I know you're already very familiar with getProp and setProp, as are
most of the readers here. So I'm not re-introducing them to be pedantic,
or to gatekeep your request. I'm merely trying to understand your
request in terms of real-world development needs.
So to help my understanding, I'll pose to you a variation of what Raney
posed to me:
"What are you working on that can't be done by having custom property
handling accomplished via custom property names?"
--
Richard Gaskin
Fourth World Systems
Software Design and Development for the Desktop, Mobile, and the Web
____________________________________________________________________
Ambassador at FourthWorld.com http://www.FourthWorld.com
More information about the use-livecode
mailing list