CFScript: Difference between revisions

Content deleted Content added
m rm contraction
Tags: Mobile edit Mobile app edit iOS app edit App section source
 
(42 intermediate revisions by 18 users not shown)
Line 1:
{{refimproveMore citations needed|date =November 2006}}
 
'''CFScript''' is an extension of [[ColdFusion Markup Language|CFML]] on the ColdFusion platform. CFScript resembles [[JavaScript]]. Some ColdFusion [[Software Developers|developers]] prefer it since it has less visual and typographical overhead than ordinary CFML;.{{Clarify|reason=|date=March only the actual changes are represented in the code (whereas normal CFML would involve CFSET tags at every line).2020}}
 
== Usage ==
Unless it is within a pure script-based ColdFusion Component, all CFScript code must be contained within a CFScript tag pair as follows:
<syntaxhighlight lang="cfm">
<cfscript>
xParam = 115;
yParam = 200;
color = 'FFCC99';
</cfscript>
</syntaxhighlight>
 
A simple example of a [[Subroutine|function]]:
All CFScript code must be contained within a CFScript tag pair, as follows:
<syntaxhighlight lang="cfm">
<pre>
<cfscript>
function Sum(a, b) {
xParam = 115;
yParamvar sum = 200a + b;
colorreturn = 'FFCC99'sum;
}
</cfscript>
</syntaxhighlight>
</pre>
 
A simple example of a component in CFScript, containing two functions:
While many ColdFusion tags have exact CFScript analogies, there are quite a few tags that do not. These include both complex tags that would be difficult to duplicate and simple tags that are easy to imitate (using ColdFusion UDF's):
<syntaxhighlight lang="javascript">
component {
public void function foo() {
WriteOutput("Method foo() called<br/>");
}
 
public function getString() {
Complex:
var x = "hello";
<pre>
return x;
<cfquery>
}
<cffile>
}
<cfdirectory>
</syntaxhighlight>
</pre>
 
ColdFusion 11, [[Railo]] 4.1+, and [[Lucee]] 4.5+ both do their best to fully support cf tags in CFScript.
Simple:
While there may not be direct substitutions for all tags, it is often still possible to achieve the results of a tag in script, but via a different syntax. For example, this is how to get a query into a variable in CFSCRIPT without writing a [[User-defined function|UDF]]:
<pre>
<syntaxhighlight lang="cfm">
<cfdump>
<cfthrow>
</pre>
 
While there may not be direct substitutions for all tags, it is often still possible to achieve the results of a tag in script, but via a different syntax. For example this is how to get a query into a variable in CFSCRIPT without writing a UDF:
<pre>
<cfscript>
qGetData = new Query();
qGetData .setDataSource('#APPLICATIONApplication.datasource#');
qGetData .setSQL('SELECT column1, column2 FROM table WHERE 1');
qDateResult = qGetData .Execute().getResult();
</cfscript>
</syntaxhighlight>
</pre>
 
== Syntax ==
 
Since ColdfusionColdFusion 8, cfscriptCFScript has supported [[Syntax (programming languages)|syntax]] abbreviations that are common in many other programming languages, such as "++", "<=" and "+=".<ref>Nadel,{{Cite Ben. httpweb|url=https://www.bennadel.com/blog/741-Learninglearning-ColdFusioncoldfusion-8-Allall-Hailhail-Thethe-Newnew-Operatoroperator.htm|title=Learning ColdFusion 8: All Hail The New ++ Operator|last=Nadel|first=Ben|date=May 31, 2007|website=|archive-url=|archive-date=|access-date=}}</ref>
 
=== Arithmetic operators ===
==References==
{| class="wikitable"
|-
! Operator !! Description
|-
| + - * / || Basic arithmetic: Addition, subtraction, multiplication, and division.
 
In division, the right operand cannot be zero.
|-
| ++ -- || Increment and decrement. Increase or decrease the variable by one.
 
These operators can be used for pre-incrementing or decrementing (as in x = ++ i), where the variable is changed before it is used in the expression. They can also be used for post-incrementing or decrementing (as in x = i++), where the value is changed after it is used in the expression. If the value of the variable i is initially 7, for example, the value of x in x = ++i is 8 after expression evaluation, but in x=i++, the value of x is 7. In both cases, the value of i becomes 8.
 
These operators cannot be used with expressions that involve functions, as in f().a++. Also, you can use an expression such as -++x, but ---x and +++x cause errors, because their meanings are ambiguous. You can use parentheses to group the operators, as in -(--x) or +(++x), however.
|-
| += -= *= /= %= || Compound assignment operators. The variable on the right is used as both an element in the expression and the result variable. Thus, the expression a += b is equivalent to a = a +b.
 
An expression can have only one compound assignment operator.
|-
| + - || Unary arithmetic: Set the sign of a number.
|-
| MOD or % || Modulus: Return the remainder after a number is divided by a divisor. The result has the same sign as the divisor. The value to the right of the operator should be an integer; using a non-numeric value causes an error, and if you specify a real number, ColdFusion ignores the fractional part (for example, 11 MOD 4.7 is 3).
|-
| \|| Integer division: Divide an integer by another integer. The result is also an integer; for example, 9\4 is 2. The right operand cannot be zero
|-
| ^|| Exponentiation: Return the result of a number raised to a power (exponent). Use the caret character (^) to separate the number from the power; for example, 2^3 is 8. Real and negative numbers are allowed for both the base and the exponent. However, any expression that equates to an imaginary number, such -1^.5 results in the string "-1.#IND. ColdFusion does not support imaginary or complex numbers.
|}
 
=== Comments ===
CFScript has two forms of comments: single line and multiline.
<syntaxhighlight lang="javascript">
// This is a single-line comment.
// This is a second single-line comment.
</syntaxhighlight>
 
<syntaxhighlight lang="javascript">
/* This is a multiline comment.
You do not need to start each line with a comment indicator.
This line is the last line in the comment. */
</syntaxhighlight>
 
=== Try / catch ===
<syntaxhighlight lang="javascript">
try {
throw(message="Oops", detail="xyz");
} catch (any e) {
WriteOutput("Error: " & e.message);
rethrow;
} finally {
WriteOutput("I run even if no error");
}
</syntaxhighlight>
 
=== Switch statement ===
<syntaxhighlight lang="javascript">
switch (car) {
case "Nissan":
WriteOutput("I own a Nissan");
break;
case "Toyota":
WriteOutput("I own a Toyota");
break;
default:
WriteOutput("I'm exotic");
}
</syntaxhighlight>
 
=== Looping ===
 
==== For loop ====
<syntaxhighlight lang="javascript">
for (i=1; i <= ArrayLen(array); i=i+1) {
WriteOutput(array[i]);
}
</syntaxhighlight>
 
==== FOR IN Loop ====
<syntaxhighlight lang="javascript">
struct = StructNew();
struct.one = "1";
struct.two = "2";
for (key in struct) {
WriteOutput(key);
}
//OUTPUTS onetwo
</syntaxhighlight>
 
==== While loop ====
<syntaxhighlight lang="javascript">
x = 0;
while (x < 5) {
x = x + 1;
WriteOutput(x);
}
// Outputs: 12345
</syntaxhighlight>
 
==== Do / while loop ====
<syntaxhighlight lang="javascript">
x = 0;
do {
x = x + 1;
WriteOutput(x);
} while (x <= 0);
// Outputs: 1
</syntaxhighlight>
 
==== Looping over an array ====
<syntaxhighlight lang="javascript">
for (item in array) {
doSomething(item);
}
</syntaxhighlight>
 
== Differences from JavaScript ==
Although CFScript and JavaScript are similar, they have several key differences. The following list identifies CFScript features that differ from JavaScript:
 
* CFScript uses ColdFusion [[Expression (computer science)|expression]], which are not a superset or a subset of JavaScript expressions. In particular, ColdFusion expressions do not support [[Bitwise operation|bitwise operators]], and the ColdFusion MOD or % operator operates differently from the corresponding JavaScript % operator: In ColdFusion, the operator does integer arithmetic and ignores fractional parts. ColdFusion expressions also support the EQV, IMP, CONTAINS, and DOES NOT CONTAIN operators that are not supported in JavaScript.
*[[Variable declaration|Variable declarations]] (var keyword) are only used in user-defined functions and threads.
* CFScript is not case sensitive.
* All statements end with a semicolon, and line breaks in the code are ignored.
* Assignments are statements, not expressions, and therefore cannot be used in situations that require evaluating the assignment operation.
* JavaScript objects, such as <code>window</code> and <code>document</code>, are not available.
* Only the ColdFusion server processes CFScript. There is no client-side CFScript.
 
== References ==
{{Reflist}}
 
== External Linkslinks ==
* [http://help.adobe.com/en_US/ColdFusion/9.0/Developing/WSc3ff6d0ea77859461172e0811cbec22c24-7feb.html Extending ColdFusion Pages with CFML Scripting - Adobe]
* [https://helpx.adobe.com/coldfusion/developing-applications/the-cfml-programming-language/extending-coldfusion-pages-with-cfml-scripting.html]
[http://www.sitekickr.com/blog/defending-coldfusion/ Defending ColdFusion]
 
{{DEFAULTSORT:Cfscript}}
[[Category:CFML programming language]]
[[Category:Scripting languages]]
 
 
{{Compu-lang-stub}}