Skip to main content

Using closures to make structs behave like objects

When they added closures and anonymous functions to Coldfusion in version 10 it opened up a lot of interesting new avenues to explore.  Some of these are very useful.  Anonymous functions can be created and passed as arguments to other functions without having to separately create a named function.  They added callback arguments to some of the array functions and various others.

Closures allow us to access variables that exist when the function is created, in the same way we do in javascript.  With that ability we can do some very interesting things with structs.



The example above shows how we can create a struct with a function that updates one of the other keys in the struct.  This is very much like an object with properties and methods.  Inside a function we create a var'ed struct named this.  I used the name "this" for the struct, but that name has no special significance here.  I added the value property and a method to set the value.  When we run that code we get the following output.


You can see the struct with the initial value of 5.  Then after the call to setValue it has changed to 10.  Then I dumped out the variables scope just to show that nothing odd is being set outside the struct.

This is interesting but I think we can go further with this idea.  What if we want our object to have private properties.



The code in this example var's the value property instead of adding it to the this struct.  Then I have added a getValue method.  This code produces the following output.



So you can see the value property is not exposed in the dumps of the struct, but we are able to access it and change it with the getValue and setValue methods.

Now we have demonstrated private and public properties, and we have public methods.  I think you can imagine how to create a private method by var'ing a variable and setting it equal to a function.  I wont demonstrate that.

That's all I have for now.  In a future article I may explore inheritance and some other object oriented topics.


Comments

Popular posts from this blog

Getting Hidden App Data From Your Google Drive

Some Android applications use space on your Google Drive to store data.  You can't see this data by browsing drive the normal way.  You can get access to it if you get the access token from the app and do a few other things.

I use an app to keep some notes and other things.  They require getting the paid version of the app to backup your data.  I wanted to see if I could get it myself without paying for the app.  I found out how to do this from this Stackoverflow post http://stackoverflow.com/questions/22832104/see-hidden-app-data-in-google-drive.  The example there uses php. Since I have been learning Python recently, I decided to see if I could do the same thing with Python.

 There is a pretty good explanation of why you need to go through all the steps you need to go through to get your data in the accepted answer for that post, so I won't go into too much detail about that here.


My First Memories of Coding

The first time I remember writing code was in grade school in the computer lab.  We were learning Basic.  I'm not sure how old I was, but it would have been sometime in the late '80s or early '90s.  I remember they had us write a program that would take some numbers from the user and print out the average.  I had to ask how to do division. I had only seen it with the standard division symbol in math class, not the forward slash.  Soon after that I was able to get Basic on my home PC.  Actually I think it was included in MS-DOS.

At school and in the beginning at home I was using Basic where you had to use line numbers to write your code.  Then to edit a line you had to retype that line with the number.  Soon after that I was able to get QBasic and a book to help me get started.


Python control of Broadlink RM2 wifi remote

I recently got a Broadlink wifi remote.  I have been playing around trying to send commands to it with python.  I found code on github that does most of what I need.  It looks like the device itself doesn't learn any remote codes.  It is all in the app.  The code I found can send codes to the device and get codes from learning mode. I have a bunch of buttons programmed in the app already.  I wanted to see if I could get those codes.  I think I got them today.  The app, called eControls, allows you to backup your setup.  Today I was able to get my backup file from their backup site. Tomorrow I will try to use the codes from the backup.