| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45
Back To Interview list
In Michael Smith's third interview with Hal Helms, they discuss Hal's talk on "Variables and Conditions" at the CF Bootcamp track at CFUN-04.
Michael Smith: Why should a new CF programmer care about variables?
Hal Helms: Variables allow our programs to adapt to changes, to conditions that the programmer cannot know about precisely. They do so by providing a layer of adaptable abstraction rather than a hard-coded value.
MS: Hmmm...what exactly does that mean?
HH: Let me give you an example. Ready for a hard-coded value? Here it is: 42.
MS: 42? That's it?
HH: Not much use, is it? It's because I've provided no context for that value. A variable, on the other hand, has both a context and a constraint. The context is, typically, the descriptive name. In this case, the variable name is "meaningOfLife."
MS: But you might also have said, "productOfSixTimesSeven."
HH: Right, or "sumOfTwentyAndTwentyTwo." Variables express context -- and once we know the context, the value has meaning. Without that context, it's just a value; it doesn't do us much good.
MS: OK, you also said variables have constraints?
HH: Yes. The most obvious constraint is the data type of the value of a variable. Here, the value of "meaningOfLife" is an integer. Constraints help to ensure that the value of a variable has relevance to its context.
MS: But ColdFusion doesn't make distinctions between integers and floating numbers -- or even strings.
HH: It's true that ColdFusion doesn't require explicit typing. Some languages -- Java, for example -- require that before you use a variable you define its data type. ColdFusion doesn't require this, but it doesn't mean that there are no data types in ColdFusion; it's just that CF hides this from you. Still, you do have to be explicit at times, right? When you create a structure, for example, you need to tell ColdFusion that you're working with a structure, using the StructNew() function. The point is, even though ColdFusion is weakly-typed (it doesn't require you to explicitly declare variable types, usually), it doesn't do away with data types. And understanding both data types and variable scopes is important.
MS: Your talk is geared for the novice programmer. I can see that they need to understand ColdFusion scopes, but do they really need to understand about data types?
HH: Absolutely. I see a lot of programmers -- even fairly experienced programmers -- shy away from using so-called "complex variables" such as arrays and structures. That's really unfortunate because, despite the "complex" tag, these data types can make our lives as programmers a lot simpler. In the talk, we'll look at these and see (a)why to use them and (b)how to use them.
MS: I think scopes confuse a lot of new ColdFusion programmers.
HH: Yes, that's true. Part of the reason is that there are quite a lot of scopes: session, application, caller, attributes, server, client...
MS: Is there a way to sort out scopes and know when to use which scopes?
HH: Yes, there is. During the talk, I'll present a "scope matrix" that explains how to think about scopes. It's also very useful as a tool for deciding which scope to use in which context.
MS: Well, it sounds like a lot of good material, and not just for novice programmers.
HH: It's really foundational material. So anyone who wants a solid foundation -- or at least the start of a solid foundation -- should benefit.
MS: See you at CFUN.