Which of these is more efficient in ColdFusion?
isDefined('url.myvar')
or
structKeyExists(url, 'myvar')
Which of these is more efficient in ColdFusion?
isDefined('url.myvar')
or
structKeyExists(url, 'myvar')
These days (CF8+) the difference in speed is not that great. However, structKeyExists
is indeed a little faster. Here's why.
When you use isDefined
, the string you pass in is searched for as a key name in several scopes. As of CF9, the list of scopes, in the order checked is: (source)
Even if you use the scope name with isDefined
(like: if isDefined('variables.foo')
) the list will still be checked in order; and if the variable local.variables.foo
is defined, it will be found BEFORE variables.foo
.
On the other hand, structKeyExists
only searches the structure you pass it for the existence of the key name; so there are far fewer places it will have to look.
By using more explicit code (structKeyExists
), not only are you gaining some performance, but your code is more readable and maintainable, in my opinion.
structKeyExists()
though. If you deserialize a JSON string with ColdFusion and you have a property myVal
with the value null
, then structKeyExists(object, "myVal")
will return true
, while isDefined("object.myVal")
will not. Or in other words, if you try to access the property with object.myVal
after checking with structKeyExists()
, you'll get an error. –
Decemvir isNull()
before your structKeyExists()
call, whenever null is an acceptable value. –
Brandling Use the one which is easier to read and best shows what you're doing.
The difference between the two is incredibly small, and very likely not worth worrying about at all.
Don't waste time optimising code unless you have a proven and repeatable test case which demonstrates the slowness.
structKeyExists
. I find that its explicit nature makes everything crystal clear, where isDefined
does not always, which results in more time and headaches when coming back to old code (and/or someone else's code) months or years later. –
Brandling © 2022 - 2024 — McMap. All rights reserved.