View
232
Download
3
Tags:
Embed Size (px)
Citation preview
Variables and Conditionals
Hal Helms
halhelms.com
What we'll cover
• Basics of variables
• Types of variables (strings, arrays, etc.)
• Scopes of variables (session, application, etc.)
• Conditionals (working with boolean variables)
Basics
• Variables are name/value pairs
• Variables permit our programs to work with values that can't be known at design time or that may change from their original value customerName yourStreetAddress currentUser
Basics
• Variables give context and constraint to valuesThe value "42" is meaningless apart from a
context, usually provided by variable name (e.g. meaningOfLife)
Data typing constrains variables to hold meaningful values• isNumeric() returns a boolean value
• randRange() returns an integer value
Strong data typing
• Some languages employ strong typing, requiring the programmer to declare a variable's data type prior to using itString myName;int myAge;Company myEmployer;
• ExamplesJavaC#
Weak data typing
• Other languages use weak typing, in which the language implicitly determines the data type of a variable
• ExamplesSmalltalkColdFusion
• Weakly typed languages are not untyped languages!
Data typing
• Different data types hold different types of valuesstring
int
structure
Car
"Visualize whirled peas"
1024
name "Hal Helms"ACMmember true
numberOfChildren 1
ColdFusion data types
• string• numeric• query• list (string)• structure• array• object• boolean• date• GUID• UUID
Complex variable type: query
• queryseries of 1 or more rows with column or field
values for each rowid descriptionprice
100 Widget29.99200 Framus, left-handed75.00
• addressable products.price — refers to current row products.price[2] — specifies row
products
Complex variable type: structure
• structurecollection of name/value pairs grouped around a
central idea or itemteacher Hal Helms
• addressable javaClass.maxStudents javaClass['maxStudents']
maxStudents 10isActive true
Ben Edwards
javaClass
Complex variable type: 1-d array
• one-dimensional arraycollection of ordered valuesresembles a single row of a spreadsheet
Hal Helms
• addressable onedee[2]
Sean CorfieldBen Edwards
onedee
[1] [2] [3]
Complex variable type: 2-d array
• two-dimensional arraycollection of ordered valuesresembles multiple rows of a spreadsheet
68
• addressable twodee[1][3]
8472
twodee
[1] [2] [3]
62 6969[1]
[2]
Complex variable type: object
• Objects are fundamentally different from all other data types in that they encapsulate both data and behavior
• Objects allow us to create scale models of the world under consideration Car
• getMake(): string
• addGas(gallons): void
• accelerate(): void
Quiz time!
• For each of the following,explain which data type you'd use and whyfinal test scores for all studentscollection of Student objectslyrics to "Memories" (thank heavens for garbage collection!)
number of students in a classinformation from LDAP servercomposer's date born, date died, nationality,
typical genrean hourly employee
Understanding scopes
• A variable typically has a lifespan and a scopelifespan: how long the system keeps a reference
to a variablescope: location from which variable is visible
• In ColdFusion, a variable's scope and lifespan are bound together in a single attribute, scope, which is prefixed to the variable name
Understanding scopesprefix visibility lifespan
application everywhere in same app life of application
attributes within custom tag (for variables passed into custom tag)
current request
caller within custom tag (for variables on calling page)
current request
cgi everywhere current request
client everywhere in same application for an individual user
varies by purge timeframe
cookie everywhere in all apps on domain
varies; set by cookie
form everywhere current request
request everywhere current request
server everywhere by all apps on single server
varies by server timeout setting
session everywhere in same app for an individual user
varies by session timeout setting
url everywhere current request
variables local to page/CFC and any included pages
current request
Quiz time!
• For each of the following,explain which scope you'd use and whyglobal "constants" such as datasource namequery meant to be created and used on same
pagea CFC, currentUser, that encapsulates data and
behavior for the currently logged in usera cookie crumb arraya userID meant to identify the user between visitsa custom tag "reaching into" the base template to
read or set a variable on that page
Conditionals
• All conditionals involve carrying out some instructions based on whether an expression evaluates to true
<cfif>
<cfif form.betNumber EQ winningNumber><cflocation url="index.cfm?fuseaction=home.winner" />
</cfif>
<cfelse>
<cfif form.betNumber EQ winningNumber><cflocation url="index.cfm?fuseaction=home.winner" />
<cfelse><cflocation url="index.cfm?fuseaction=home.loser" />
</cfif>
<cfelseif>
<cfif form.betNumber EQ winningNumber><cflocation url="index.cfm?fuseaction=home.winner" />
<cfelseif form.betNumber LT 0><cflocation url="index.cfm?fuseaction=home.cheater" />
<cfelse><cflocation url="index.cfm?fuseaction=home.loser" />
</cfif>
iif()
<cfset randomBoolean = iif(RandRange(0,1), true, false) />
switch/case
<cfswitch expression="#attributes.fuseaction#"><cfcase value="home">
<cfinclude template="dspHome.cfm" /></cfcase>
<cfdefaultcase><cfinclude template="qryMenuItems.cfm"
/><cfinclude template="dspMenu.cfm" />
</cfdefaultcase></cfswitch>
Conclusion
• Variables are the basis of all programs• Data typing, although mostly hidden in
ColdFusion, is very important—particularly in OO languages
• Do experiment with "complex" data types; you'll find they make your code easier to write and maintain
• Conditionals allow us to execute commands based on the result of some run time boolean value