Variables and Conditionals Hal Helms halhelms.com

Preview:

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

Recommended