Custom Properties

Richard Gaskin ambassador at fourthworld.com
Thu Apr 13 11:20:56 EDT 2006


Thomas McGrath III wrote:

> While trying to understand the best use for me for setProp/getProp I  
> came across an idea or concept that I thought would be great.
> I wanted to have a custom prop for each line in a field as in:
> set the isAFolder of line 1 of me to "true"
> Of course it did not work but I thought 'Wow' that would be useful.
> I guess that some creative scripting would get similar results. (I do  
> that now) but in the scope of this great discussion I thought a  
> custom prop for each line and or word and or char would be really  
> great for working with fields and providing that elusive 'word  
> processor' attributes that keep coming up on the list.
> 
> How hard would this be? Or is it a completely 'wrong' use of custom  
> props?

Rev's prety flexible so it's hard to have a "wrong" use of custom props.

But for things like characters in a field, if they're being updated in 
response to user typing then performance will be critical, and the 
native message path edges out even setProp for efficiency:

Native: 0.006ms
Send:   0.010ms
Do:     0.010ms
Prop:   0.009ms

(Times shown are per call, with modest overhead within the handler being 
called. Benchmark code is below; it was written hastily, so may be 
improved for greater accuracy.)

As useful as custom props are, they have limitations.  For example, it 
may not be possible to use them for some of the word processing features 
people have requested, things like paragraph-level formatting and such.

The main benefits of custom props are as triggers for code that relates 
to a given object, and for neatly storing a variety of data elements.

When they make code simpler or easier to maintain, they're worth 
pursuing.  But sometimes it's easier to just call a handler in a library.

---------------------------------------------------

Benchmark Code

Script of button in a stack:

on mouseUp
   put 100000 into n
   --
   put the millisecs into t
   repeat n
     doMe
   end repeat
   put (the millisecs - t)/n into t1
   --
   put the millisecs into t
   repeat n
     send "doMe" to this cd
   end repeat
   put (the millisecs - t )/n into t2
   --
   put the millisecs into t
   repeat n
     do "doMe"
   end repeat
   put (the millisecs - t)/n into t3
   --
   put the millisecs into t
   repeat n
     get the uWhat of this cd
   end repeat
   put (the millisecs - t)/n into t4
   --
   set the numberformat to "0.000"
   put "Native: "& t1 &"ms" &cr\
       &"Send:   "&t2 &"ms" &cr\
       &"Do:      "&t3 &"ms" &cr\
       &"Prop:    "&t4 &"ms"
end mouseUp


Script in card of that stack:

on doMe
   get "nothing"
   put "nothing" into it
end doMe

getProp uWhat
   get "nothing"
   put "nothing" into it
end uWhat



--
  Richard Gaskin
  Managing Editor, revJournal
  _______________________________________________________
  Rev tips, tutorials and more: http://www.revJournal.com



More information about the use-livecode mailing list