mirror of
https://github.com/adambard/learnxinyminutes-docs.git
synced 2024-11-25 20:14:30 +03:00
331 lines
8.9 KiB
Markdown
331 lines
8.9 KiB
Markdown
---
|
|
language: coldfusion
|
|
filename: learncoldfusion.cfm
|
|
contributors:
|
|
- ["Wayne Boka", "http://wboka.github.io"]
|
|
- ["Kevin Morris", "https://twitter.com/kevinmorris"]
|
|
---
|
|
|
|
ColdFusion is a scripting language for web development.
|
|
[Read more here.](http://www.adobe.com/products/coldfusion-family.html)
|
|
|
|
### CFML
|
|
_**C**old**F**usion **M**arkup **L**anguage_
|
|
ColdFusion started as a tag-based language. Almost all functionality is available using tags.
|
|
|
|
```cfm
|
|
<em>HTML tags have been provided for output readability</em>
|
|
|
|
<!--- Comments start with "<!---" and end with "--->" --->
|
|
<!---
|
|
Comments can
|
|
also
|
|
span
|
|
multiple lines
|
|
--->
|
|
|
|
<!--- CFML tags have a similar format to HTML tags. --->
|
|
<h1>Simple Variables</h1>
|
|
<!--- Variable Declaration: Variables are loosely typed, similar to javascript --->
|
|
<p>Set <b>myVariable</b> to "myValue"</p>
|
|
<cfset myVariable = "myValue" />
|
|
<p>Set <b>myNumber</b> to 3.14</p>
|
|
<cfset myNumber = 3.14 />
|
|
|
|
<!--- Displaying simple data --->
|
|
<!--- Use <cfoutput> for simple values such as strings, numbers, and expressions --->
|
|
<p>Display <b>myVariable</b>: <cfoutput>#myVariable#</cfoutput></p><!--- myValue --->
|
|
<p>Display <b>myNumber</b>: <cfoutput>#myNumber#</cfoutput></p><!--- 3.14 --->
|
|
|
|
<hr />
|
|
|
|
<h1>Complex Variables</h1>
|
|
<!--- Declaring complex variables --->
|
|
<!--- Declaring an array of 1 dimension: literal or bracket notation --->
|
|
<p>Set <b>myArray1</b> to an array of 1 dimension using literal or bracket notation</p>
|
|
<cfset myArray1 = [] />
|
|
<!--- Declaring an array of 1 dimension: function notation --->
|
|
<p>Set <b>myArray2</b> to an array of 1 dimension using function notation</p>
|
|
<cfset myArray2 = ArrayNew(1) />
|
|
|
|
<!--- Outputting complex variables --->
|
|
<p>Contents of <b>myArray1</b></p>
|
|
<cfdump var="#myArray1#" /> <!--- An empty array object --->
|
|
<p>Contents of <b>myArray2</b></p>
|
|
<cfdump var="#myArray2#" /> <!--- An empty array object --->
|
|
|
|
<!--- Operators --->
|
|
<!--- Arithmetic --->
|
|
<h1>Operators</h1>
|
|
<h2>Arithmetic</h2>
|
|
<p>1 + 1 = <cfoutput>#1 + 1#</cfoutput></p>
|
|
<p>10 - 7 = <cfoutput>#10 - 7#<br /></cfoutput></p>
|
|
<p>15 * 10 = <cfoutput>#15 * 10#<br /></cfoutput></p>
|
|
<p>100 / 5 = <cfoutput>#100 / 5#<br /></cfoutput></p>
|
|
<p>120 % 5 = <cfoutput>#120 % 5#<br /></cfoutput></p>
|
|
<p>120 mod 5 = <cfoutput>#120 mod 5#<br /></cfoutput></p>
|
|
|
|
<hr />
|
|
|
|
<!--- Comparison --->
|
|
<h2>Comparison</h2>
|
|
<h3>Standard Notation</h3>
|
|
<p>Is 1 eq 1? <cfoutput>#1 eq 1#</cfoutput></p>
|
|
<p>Is 15 neq 1? <cfoutput>#15 neq 1#</cfoutput></p>
|
|
<p>Is 10 gt 8? <cfoutput>#10 gt 8#</cfoutput></p>
|
|
<p>Is 1 lt 2? <cfoutput>#1 lt 2#</cfoutput></p>
|
|
<p>Is 10 gte 5? <cfoutput>#10 gte 5#</cfoutput></p>
|
|
<p>Is 1 lte 5? <cfoutput>#1 lte 5#</cfoutput></p>
|
|
|
|
<h3>Alternative Notation</h3>
|
|
<p>Is 1 == 1? <cfoutput>#1 eq 1#</cfoutput></p>
|
|
<p>Is 15 != 1? <cfoutput>#15 neq 1#</cfoutput></p>
|
|
<p>Is 10 > 8? <cfoutput>#10 gt 8#</cfoutput></p>
|
|
<p>Is 1 < 2? <cfoutput>#1 lt 2#</cfoutput></p>
|
|
<p>Is 10 >= 5? <cfoutput>#10 gte 5#</cfoutput></p>
|
|
<p>Is 1 <= 5? <cfoutput>#1 lte 5#</cfoutput></p>
|
|
|
|
<hr />
|
|
|
|
<!--- Control Structures --->
|
|
<h1>Control Structures</h1>
|
|
|
|
<cfset myCondition = "Test" />
|
|
|
|
<p>Condition to test for: "<cfoutput>#myCondition#</cfoutput>"</p>
|
|
|
|
<cfif myCondition eq "Test">
|
|
<cfoutput>#myCondition#. We're testing.</cfoutput>
|
|
<cfelseif myCondition eq "Production">
|
|
<cfoutput>#myCondition#. Proceed Carefully!!!</cfoutput>
|
|
<cfelse>
|
|
myCondition is unknown
|
|
</cfif>
|
|
|
|
<hr />
|
|
|
|
<!--- Loops --->
|
|
<h1>Loops</h1>
|
|
<h2>For Loop</h2>
|
|
<cfloop from="0" to="10" index="i">
|
|
<p>Index equals <cfoutput>#i#</cfoutput></p>
|
|
</cfloop>
|
|
|
|
<h2>For Each Loop (Complex Variables)</h2>
|
|
|
|
<p>Set <b>myArray3</b> to [5, 15, 99, 45, 100]</p>
|
|
|
|
<cfset myArray3 = [5, 15, 99, 45, 100] />
|
|
|
|
<cfloop array="#myArray3#" index="i">
|
|
<p>Index equals <cfoutput>#i#</cfoutput></p>
|
|
</cfloop>
|
|
|
|
<p>Set <b>myArray4</b> to ["Alpha", "Bravo", "Charlie", "Delta", "Echo"]</p>
|
|
|
|
<cfset myArray4 = ["Alpha", "Bravo", "Charlie", "Delta", "Echo"] />
|
|
|
|
<cfloop array="#myArray4#" index="s">
|
|
<p>Index equals <cfoutput>#s#</cfoutput></p>
|
|
</cfloop>
|
|
|
|
<h2>Switch Statement</h2>
|
|
|
|
<p>Set <b>myArray5</b> to [5, 15, 99, 45, 100]</p>
|
|
|
|
<cfset myArray5 = [5, 15, 99, 45, 100] />
|
|
|
|
<cfloop array="#myArray5#" index="i">
|
|
<cfswitch expression="#i#">
|
|
<cfcase value="5,15,45" delimiters=",">
|
|
<p><cfoutput>#i#</cfoutput> is a multiple of 5.</p>
|
|
</cfcase>
|
|
<cfcase value="99">
|
|
<p><cfoutput>#i#</cfoutput> is ninety-nine.</p>
|
|
</cfcase>
|
|
<cfdefaultcase>
|
|
<p><cfoutput>#i#</cfoutput> is not 5, 15, 45, or 99.</p>
|
|
</cfdefaultcase>
|
|
</cfswitch>
|
|
</cfloop>
|
|
|
|
<hr />
|
|
|
|
<h1>Converting types</h1>
|
|
|
|
<style>
|
|
table.table th, table.table td {
|
|
border: 1px solid #000000;
|
|
padding: 2px;
|
|
}
|
|
|
|
table.table th {
|
|
background-color: #CCCCCC;
|
|
}
|
|
</style>
|
|
|
|
<table class="table" cellspacing="0">
|
|
<thead>
|
|
<tr>
|
|
<th>Value</th>
|
|
<th>As Boolean</th>
|
|
<th>As number</th>
|
|
<th>As date-time</th>
|
|
<th>As string</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<th>"Yes"</th>
|
|
<td>TRUE</td>
|
|
<td>1</td>
|
|
<td>Error</td>
|
|
<td>"Yes"</td>
|
|
</tr>
|
|
<tr>
|
|
<th>"No"</th>
|
|
<td>FALSE</td>
|
|
<td>0</td>
|
|
<td>Error</td>
|
|
<td>"No"</td>
|
|
</tr>
|
|
<tr>
|
|
<th>TRUE</th>
|
|
<td>TRUE</td>
|
|
<td>1</td>
|
|
<td>Error</td>
|
|
<td>"Yes"</td>
|
|
</tr>
|
|
<tr>
|
|
<th>FALSE</th>
|
|
<td>FALSE</td>
|
|
<td>0</td>
|
|
<td>Error</td>
|
|
<td>"No"</td>
|
|
</tr>
|
|
<tr>
|
|
<th>Number</th>
|
|
<td>True if Number is not 0; False otherwise.</td>
|
|
<td>Number</td>
|
|
<td>See "Date-time values" earlier in this chapter.</td>
|
|
<td>String representation of the number (for example, "8").</td>
|
|
</tr>
|
|
<tr>
|
|
<th>String</th>
|
|
<td>If "Yes", True <br>If "No", False <br>If it can be converted to 0, False <br>If it can be converted to any other number, True</td>
|
|
<td>If it represents a number (for example, "1,000" or "12.36E-12"), it is converted to the corresponding number.</td>
|
|
<td>If it represents a date-time (see next column), it is converted to the numeric value of the corresponding date-time object. <br>If it is an ODBC date, time, or timestamp (for example "{ts '2001-06-14 11:30:13'}", or if it is expressed in a standard U.S. date or time format, including the use of full or abbreviated month names, it is converted to the corresponding date-time value. <br>Days of the week or unusual punctuation result in an error. <br>Dashes, forward-slashes, and spaces are generally allowed.</td>
|
|
<td>String</td>
|
|
</tr>
|
|
<tr>
|
|
<th>Date</th>
|
|
<td>Error</td>
|
|
<td>The numeric value of the date-time object.</td>
|
|
<td>Date</td>
|
|
<td>An ODBC timestamp.</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<hr />
|
|
|
|
<h1>Components</h1>
|
|
|
|
<em>Code for reference (Functions must return something to support IE)</em>
|
|
```
|
|
|
|
```cfs
|
|
<cfcomponent>
|
|
<cfset this.hello = "Hello" />
|
|
<cfset this.world = "world" />
|
|
|
|
<cffunction name="sayHello">
|
|
<cfreturn this.hello & ", " & this.world & "!" />
|
|
</cffunction>
|
|
|
|
<cffunction name="setHello">
|
|
<cfargument name="newHello" type="string" required="true" />
|
|
|
|
<cfset this.hello = arguments.newHello />
|
|
|
|
<cfreturn true />
|
|
</cffunction>
|
|
|
|
<cffunction name="setWorld">
|
|
<cfargument name="newWorld" type="string" required="true" />
|
|
|
|
<cfset this.world = arguments.newWorld />
|
|
|
|
<cfreturn true />
|
|
</cffunction>
|
|
|
|
<cffunction name="getHello">
|
|
<cfreturn this.hello />
|
|
</cffunction>
|
|
|
|
<cffunction name="getWorld">
|
|
<cfreturn this.world />
|
|
</cffunction>
|
|
</cfcomponent>
|
|
|
|
<cfset this.hello = "Hello" />
|
|
<cfset this.world = "world" />
|
|
|
|
<cffunction name="sayHello">
|
|
<cfreturn this.hello & ", " & this.world & "!" />
|
|
</cffunction>
|
|
|
|
<cffunction name="setHello">
|
|
<cfargument name="newHello" type="string" required="true" />
|
|
|
|
<cfset this.hello = arguments.newHello />
|
|
|
|
<cfreturn true />
|
|
</cffunction>
|
|
|
|
<cffunction name="setWorld">
|
|
<cfargument name="newWorld" type="string" required="true" />
|
|
|
|
<cfset this.world = arguments.newWorld />
|
|
|
|
<cfreturn true />
|
|
</cffunction>
|
|
|
|
<cffunction name="getHello">
|
|
<cfreturn this.hello />
|
|
</cffunction>
|
|
|
|
<cffunction name="getWorld">
|
|
<cfreturn this.world />
|
|
</cffunction>
|
|
|
|
|
|
<b>sayHello()</b>
|
|
<cfoutput><p>#sayHello()#</p></cfoutput>
|
|
<b>getHello()</b>
|
|
<cfoutput><p>#getHello()#</p></cfoutput>
|
|
<b>getWorld()</b>
|
|
<cfoutput><p>#getWorld()#</p></cfoutput>
|
|
<b>setHello("Hola")</b>
|
|
<cfoutput><p>#setHello("Hola")#</p></cfoutput>
|
|
<b>setWorld("mundo")</b>
|
|
<cfoutput><p>#setWorld("mundo")#</p></cfoutput>
|
|
<b>sayHello()</b>
|
|
<cfoutput><p>#sayHello()#</p></cfoutput>
|
|
<b>getHello()</b>
|
|
<cfoutput><p>#getHello()#</p></cfoutput>
|
|
<b>getWorld()</b>
|
|
<cfoutput><p>#getWorld()#</p></cfoutput>
|
|
```
|
|
|
|
### CFScript
|
|
_**C**old**F**usion **S**cript_
|
|
In recent years, the ColdFusion language has added script syntax to mirror tag functionality. When using an up-to-date CF server, almost all functionality is available using scrypt syntax.
|
|
|
|
## Further Reading
|
|
|
|
The links provided here below are just to get an understanding of the topic, feel free to Google and find specific examples.
|
|
|
|
1. [Coldfusion Reference From Adobe](https://helpx.adobe.com/coldfusion/cfml-reference/topics.html)
|
|
2. [Open Source Documentation](http://cfdocs.org/)
|