Problem naming groups with integers

Richard Gaskin ambassador at fourthworld.com
Sat Apr 19 23:19:04 CEST 2014


Stephen MacLean wrote:

 > So, even though I'm enclosing it in quotes, LC still thinks that?
 >
 > Strange behavior

It seems strange if you're used to working with languages that support 
explicit data types.

Generally speaking, LiveCode is a typeless language.  Any value is 
considered a string, and converted to a number only when doing 
arithmetic on it, and again automatically converted back to a string 
when you do any string operation on it:

   put 123 into x    -- x is a string
   add 4 to x        -- x is converted to a number
   put x into fld 1  -- converted back to a string
   add 1 to fld 1    -- field 1 is retrieved as a string, converted to
   --                   a number for the arithmetic operation, then
   --                   converted back to a string for display
   put (fld 1) + 2 into x  -- x is a number
   put "string:" before x  -- converted to a string by the concatenation

In those few lines we had 8 type coercions, and unlike most languages we 
didn't have to manually handle any of them.

The upside to this is that we don't need to think about data types, as 
the engine handles the coercion for us automatically as needed.

It only becomes problematic when attempting to use strings consisting of 
only numeric characters as object names, and this is an issue only 
because LiveCode supports convenient syntax for addressing objects by 
ordinal number; e.g., to refer to the second field on a card you could 
write:

   get the long id of field 2

When the name is an integer, LiveCode has no way to know whether you're 
asking for the object by name or by ordinal number, since the two forms 
of syntax as pretty much the same:

   get the long id of field MyFieldName

Putting quotes around values doesn't coerce type, since the language is 
inherently typeless by nature.  Whether comprised of alphanumeric 
characters or solely numeric characters, a string is a string.

Quotes are helpful for readability, and to help the engine distinguish 
between values which might also be variable names or reserved words.

One useful thing about quoting is that it not only makes code more 
readable to you and clearer to the engine, but since quoted strings 
can't be variable names or reserved words, they can give you a modest 
performance boost, since the engine doesn't need to compare the string 
against lists of variables or language tokens.

But whether quoted or not it's still a string, and since objects can be 
referred to by ordinal number where the syntax is identical to referring 
to them by name, avoiding integers as names will keep the engine and you 
both happy.

In cases where you need to maintain some sort of integer value in the 
object's name, you could simply prepend the name with anything else, 
removing the extra stuff when you to obtain the number, e.g.:

   set the name of field 1 to "f1"
   --
   get the short name of field 1
   delete char 1 of it
   DoSomethingWithTheNumber it


--
  Richard Gaskin
  Fourth World
  LiveCode training and consulting: http://www.fourthworld.com
  Webzine for LiveCode developers: http://www.LiveCodeJournal.com
  Follow me on Twitter:  http://twitter.com/FourthWorldSys




More information about the use-livecode mailing list