Every function used so far in this course — arrayLen, structKeyExists, serializeJSON, dateFormat — is a built-in function. ColdFusion ships with hundreds of them, covering almost everything a typical application needs without reaching for a third-party library.
This lesson is a map of that library, plus a genuinely modern CFML feature: built-in functions can be treated as first-class values, passed around and used as callbacks exactly like the user-defined functions in the next lesson.
Learning Objectives
After completing this lesson, you'll be able to:
- Call and nest built-in functions inside expressions.
- Name the major categories of ColdFusion's built-in function library.
- Pass a built-in function as a value to another function, using first-class function syntax.
- Know when NOT to reach for dynamic/reflective function calls.
Calling and Nesting Functions
A function call is just an expression, so function calls can be nested directly inside each other — the innermost one runs first.
Categories of Built-in Functions
Most of these categories already have their own dedicated lessons or are coming up later in the course — this is just the map.
| Category | Examples |
|---|---|
| Array / List / Struct | arrayLen, listAppend, structKeyExists |
| String | uCase, trim, reReplace |
| Date & Time | now, dateFormat, dateAdd |
| Math | round, min, randRange |
| Query | queryNew, valueList |
| JSON / XML | serializeJSON, xmlParse |
| Security | hash, encrypt, generateSecretKey |
| File / Directory | fileRead, directoryList |
| Image | imageResize, imageNew |
Built-in Functions as First-Class Values
In modern CFML, a built-in function can be passed by name — without calling it — to another function, which can then call it later. This is the same pattern arrayMap and arrayFilter use with your own closures, except here the callback is a built-in function instead of one you wrote.
Notice lCase is passed without parentheses — lCase, not lCase(). Adding parentheses would call it immediately instead of handing it over as a value.
What Not to Do: Calling a Function by a Dynamic Name
Sometimes people want to call a built-in function whose name is only known at runtime, stored in a string. It's technically possible (evaluate() on Adobe ColdFusion, getBuiltinFunction() on Lucee) but it's fragile: named arguments don't work through it, and a handful of functions (writeDump, location, throw) can't be reached this way at all. If you need dynamic dispatch, write your own small mapping — a struct of names to functions — instead of relying on reflection tricks.
Common Beginner Mistakes
Calling lCase() instead of passing lCase when it's meant to be a callback
lCase("One") runs immediately and passes the string "one" as the argument. lCase, with no parentheses, passes the function itself — that's what a callback parameter expects.
Assuming every function is available on every engine
A number of functions are Adobe ColdFusion-only or Lucee-only. Check the function's documentation page before relying on it if the code needs to run on both engines.
Best Practices
- Reach for a built-in function before writing your own — check whether ColdFusion already has one for what you need.
- Use first-class function passing for simple transformations (lCase, uCase, trim) instead of writing a one-line wrapper closure just to satisfy a callback signature.
- Avoid evaluate() / getBuiltinFunction() for dynamic dispatch — prefer an explicit mapping struct.
Interview Questions
What does it mean for a built-in function to be "first-class" in ColdFusion?
It means the function itself can be assigned to a variable or passed as an argument without being called — the same way a user-defined closure can be passed to arrayMap or arrayFilter.
What's the risk of calling a built-in function by name using evaluate()?
Named arguments don't work through it, a few functions can't be reached that way at all, and it's generally fragile — an explicit mapping struct is safer.
Summary
In this lesson, you toured the major categories of ColdFusion's built-in function library and learned that built-in functions can be passed around as first-class values, the same as user-defined closures.
What's Next?
The next lesson covers writing your own functions — user-defined functions, in both CFScript and tag syntax.
Ready to Practice CFML?
Write and run real ColdFusion code online, on Adobe ColdFusion, no local install or signup required.
Practice CFML Online ↗Opens CFFiddle, a third-party CFML playground, in a new tab. External site terms and privacy policy apply.
Or try 50 CFML practice questions →