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


_______________________________________________
use-livecode mailing list
use-livecode@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode

Reply via email to